55+ в ИТ

User avatar
major Major Major Major
Уже с Приветом
Posts: 1321
Joined: 10 Jan 2000 10:01
Location: Хьюстон

Re: 55+ в ИТ

Post by major Major Major Major »

АццкоМото wrote: 09 Oct 2018 17:09
major Major Major Major wrote: 09 Oct 2018 16:40 У нас было бы примерно так :)

Code: Select all

private isItemInCart(item: Item): boolean  {
    return this.cart.Items.Any(cartItem => cartItem.Id === item.Id);
}
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.
Проверку аргументов на null в private методах обычно не делаем
Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень часто
Все зависит от задачи. Если мы про shopping cart то количество предметов в ней не будет того порядка когда разница между hashmap будет существенна и оправданна. Плюс кто сказал что надо будет всегда искать по id? А по категории товара, по количеству, по стоимости?
Я не против быстрого кода, у меня задачи часто такие что без оптимизации просто никуда, но оптимизировать и усложнять там где можно обойтись чем то простым и надежным считаю напрасной тратой времени. То есть если бы речь шла о методе isItemInOrderHistory() то бяда пичалька, а так не особо.
Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

major Major Major Major wrote: 09 Oct 2018 17:18
АццкоМото wrote: 09 Oct 2018 17:09
major Major Major Major wrote: 09 Oct 2018 16:40 У нас было бы примерно так :)

Code: Select all

private isItemInCart(item: Item): boolean  {
    return this.cart.Items.Any(cartItem => cartItem.Id === item.Id);
}
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.
Проверку аргументов на null в private методах обычно не делаем
Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень часто
Все зависит от задачи. Если мы про shopping cart то количество предметов в ней не будет того порядка когда разница между hashmap будет существенна и оправданна. Плюс кто сказал что надо будет всегда искать по id? А по категории товара, по количеству, по стоимости?
Я не против быстрого кода, у меня задачи часто такие что без оптимизации просто никуда, но оптимизировать и усложнять там где можно обойтись чем то простым и надежным считаю напрасной тратой времени. То есть если бы речь шла о методе isItemInOrderHistory() то бяда пичалька, а так не особо.
Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
Я там выше в цитате два ключевых момента выделил. Да, не всегда ХэшМап/Таблица это лучшее решение. Но а) их нужно рассмотреть как вариант бэ) даже перебор нужно делать элегантнее
Мат на форуме запрещен, блдж!
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: 55+ в ИТ

Post by valchkou »

АццкоМото wrote: 09 Oct 2018 17:07
valchkou wrote: 08 Oct 2018 23:39
АццкоМото wrote: 08 Oct 2018 23:05 Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов. Тоже вроде бы не бином ньютона, а мало кто напишет эффективно.
согласен что интереснее, но не согласен что не бином.
добавим сюда вполне ожидаемые требования по high availability, scalability, latency и задача сразу превращается в нетривиальный проект.
я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсе
если мы говорим про агрегацию 100500 миллионов, то одной блятекой тут не обойтись даже интерапту, не зря же наворотили разных хадупов, спарков и следом распределенных in-memory DB.
сначала нужно все это барахло найти поставить настроить и только потом можно будет немного расслабившись налить чайку и написать несколько строчек работающего кода.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: 55+ в ИТ

Post by Мальчик-Одуванчик »

major Major Major Major wrote: 09 Oct 2018 17:18 Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
Ну тогда по идее самое оно параметризовать тип контейнера в реализации и специализировать функцию поиска, если она отличается от тривиального find()
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: 55+ в ИТ

Post by Komissar »

brrdrr wrote: 09 Oct 2018 16:32
Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Откуда там null может появиться?
От бага в другом модуле.
Zachet
Уже с Приветом
Posts: 818
Joined: 06 Jul 2016 18:30

Re: 55+ в ИТ

Post by Zachet »

[map][/map]
АццкоМото wrote: 09 Oct 2018 17:11
Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
На самом деле 30-летний погромист учился кодить на питоне, поэтому он выдаст чтото вроде

Code: Select all

 
 
 def isInCart(item, cart):
   return len(filter(lambda x: x.getId() == item.getId(), cart.getItems())) > 0
 
 
Что под капотом тот же обход листа
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: 55+ в ИТ

Post by M. Ridcully »

Zachet wrote: 10 Oct 2018 02:45 [map][/map]
АццкоМото wrote: 09 Oct 2018 17:11
Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
На самом деле 30-летний погромист учился кодить на питоне, поэтому он выдаст чтото вроде

Code: Select all

 
 
 def isInCart(item, cart):
   return len(filter(lambda x: x.getId() == item.getId(), cart.getItems())) > 0
 
 
Что под капотом тот же обход листа
Уж больно коряво, если вы про Питон.
Лучше уж

Code: Select all

def is_in_cart(item, cart):
    return item.getId() in (it.getId() for it in cart.getItems())
Или даже так, если объекты по-людски написаны:

Code: Select all

def is_in_cart(item, cart):
    return item in cart.getItems()
Мир Украине. Свободу России.
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: 55+ в ИТ

Post by Komissar »

“A вы друзья, как ни садитесь...”
Zachet
Уже с Приветом
Posts: 818
Joined: 06 Jul 2016 18:30

Re: 55+ в ИТ

Post by Zachet »

M. Ridcully wrote: 10 Oct 2018 05:13
Zachet wrote: 10 Oct 2018 02:45 [map][/map]
АццкоМото wrote: 09 Oct 2018 17:11
Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
На самом деле 30-летний погромист учился кодить на питоне, поэтому он выдаст чтото вроде

Code: Select all

 
 
 def isInCart(item, cart):
   return len(filter(lambda x: x.getId() == item.getId(), cart.getItems())) > 0
 
 
Что под капотом тот же обход листа
Уж больно коряво, если вы про Питон.
Лучше уж

Code: Select all

def is_in_cart(item, cart):
    return item.getId() in (it.getId() for it in cart.getItems())
Или даже так, если объекты по-людски написаны:

Code: Select all

def is_in_cart(item, cart):
    return item in cart.getItems()
Не принципиально. Суть в том что 30-летний погромист напишет на питоне обход листа в одну строчку, и забудет. Пока Комиссар будет выяснять, не подменили-ли инопланетяне у него в карте один айтем на нулл.
KinDzaDza
Уже с Приветом
Posts: 2275
Joined: 29 Jul 2005 17:39
Location: Калифорнийский Мухосранск

Re: 55+ в ИТ

Post by KinDzaDza »

Zachet wrote: 10 Oct 2018 16:08
M. Ridcully wrote: 10 Oct 2018 05:13
Zachet wrote: 10 Oct 2018 02:45 [map][/map]
АццкоМото wrote: 09 Oct 2018 17:11
Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
На самом деле 30-летний погромист учился кодить на питоне, поэтому он выдаст чтото вроде

Code: Select all

 
 
 def isInCart(item, cart):
   return len(filter(lambda x: x.getId() == item.getId(), cart.getItems())) > 0
 
 
Что под капотом тот же обход листа
Уж больно коряво, если вы про Питон.
Лучше уж

Code: Select all

def is_in_cart(item, cart):
    return item.getId() in (it.getId() for it in cart.getItems())
Или даже так, если объекты по-людски написаны:

Code: Select all

def is_in_cart(item, cart):
    return item in cart.getItems()
Не принципиально. Суть в том что 30-летний погромист напишет на питоне обход листа в одну строчку, и забудет. Пока Комиссар будет выяснять, не подменили-ли инопланетяне у него в карте один айтем на нулл.
Зато у Комиссара приложение не начнёт падать в продакшн с нуль пойнтер эксепшен когда какое-нибудь другое молодое дарование внезапно(tm) поменяет код по добавлению айтемов в эту корзину.
Хотя, конечно, мы ту обсуждаем сферического коня в вакууме. Без знаний как за кадром устроен этот cart из примера, что там с айтемами (как там например имплементирован метод equal() и т.п.) - все остальное гадание на кофейной гуще. Фреймворки тоже не боги писали, как мне помнится классный библиотечный binary search в Java как раз на 100500 классно гнал фуфло.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: 55+ в ИТ

Post by M. Ridcully »

KinDzaDza wrote: 10 Oct 2018 16:50
Хотя, конечно, мы ту обсуждаем сферического коня в вакууме.
Дык, чисто потрындеть да своей гениальностью блеснуть, как водится. :mrgreen:
Мир Украине. Свободу России.
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

KinDzaDza wrote: 10 Oct 2018 16:50 Зато у Комиссара приложение не начнёт падать в продакшн с нуль пойнтер эксепшен когда какое-нибудь другое молодое дарование внезапно(tm) поменяет код по добавлению айтемов в эту корзину.
сюрпрайз: для этого придуманы не только аннотации типа @NonNull, которые решают проблему частично, но и йызыки тиипа Котлина, которые решают проблему полностью. И молодое дарование наверняка умеет этим пользоваться, а старперы будут и дальше надувать щеки "а вот если вдруг"

На всякий случай напомню, что идея Комми - проверять на нуль и кидать эксепшн. Не NPE, а другой. Т.е. по факту у неопытного писюка будет код такой, что нарушить null-safety будет невозможно, а у Комми - такой, что не падает со стыдным NPE, но падает с KommyVerifiedThatHereWeHaveANullPointerInCollectionAndYouAllSuckException :umnik1:
Мат на форуме запрещен, блдж!
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: 55+ в ИТ

Post by M. Ridcully »

А вообще всех за пояс заткнет Кумар Дипшитович, который честно поймает null pointer и в обработчике сделает молчаливый возврат безо всякой диагностики. И подумает: "у меня ничего не падает, а вы поебитесь отлаживать".
Мир Украине. Свободу России.
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: 55+ в ИТ

Post by Komissar »

АццкоМото wrote: 10 Oct 2018 17:46
KinDzaDza wrote: 10 Oct 2018 16:50 Зато у Комиссара приложение не начнёт падать в продакшн с нуль пойнтер эксепшен когда какое-нибудь другое молодое дарование внезапно(tm) поменяет код по добавлению айтемов в эту корзину.
сюрпрайз: для этого придуманы не только аннотации типа @NonNull, которые решают проблему частично, но и йызыки тиипа Котлина, которые решают проблему полностью. И молодое дарование наверняка умеет этим пользоваться, а старперы будут и дальше надувать щеки "а вот если вдруг"

На всякий случай напомню, что идея Комми - проверять на нуль и кидать эксепшн. Не NPE, а другой. Т.е. по факту у неопытного писюка будет код такой, что нарушить null-safety будет невозможно, а у Комми - такой, что не падает со стыдным NPE, но падает с KommyVerifiedThatHereWeHaveANullPointerInCollectionAndYouAllSuckException :umnik1:
Мои эксепшны выводятся на экран PM со словами "ЗА ВАМИ УЖЕ ВЫЕХАЛИ"
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

Komissar wrote: 10 Oct 2018 18:33
АццкоМото wrote: 10 Oct 2018 17:46
KinDzaDza wrote: 10 Oct 2018 16:50 Зато у Комиссара приложение не начнёт падать в продакшн с нуль пойнтер эксепшен когда какое-нибудь другое молодое дарование внезапно(tm) поменяет код по добавлению айтемов в эту корзину.
сюрпрайз: для этого придуманы не только аннотации типа @NonNull, которые решают проблему частично, но и йызыки тиипа Котлина, которые решают проблему полностью. И молодое дарование наверняка умеет этим пользоваться, а старперы будут и дальше надувать щеки "а вот если вдруг"

На всякий случай напомню, что идея Комми - проверять на нуль и кидать эксепшн. Не NPE, а другой. Т.е. по факту у неопытного писюка будет код такой, что нарушить null-safety будет невозможно, а у Комми - такой, что не падает со стыдным NPE, но падает с KommyVerifiedThatHereWeHaveANullPointerInCollectionAndYouAllSuckException :umnik1:
Мои эксепшны выводятся на экран PM со словами "ЗА ВАМИ УЖЕ ВЫЕХАЛИ"
Ага. А когда мой код не работает, фиксят компилятор. Продолжим?
Мат на форуме запрещен, блдж!

Return to “Работа и Карьера в IT”