Тогда предположим дальше что самописный метод getItem(i) не выкидывает исключений, что нельзя сказать про метод contains.valchkou wrote: ↑08 Oct 2018 23:54 мы видим задачу по разному, в данном примере я предположил что
cart.getItems() не создает никаких коллекций, а попросту возвращает референс на коллекцию спрятанную внутри объекта cart.
причем имплементация коллекции может быть как массивом так и hash based structure.
но нам по барабану потому как они все имплементируют метод contains().
55+ в ИТ
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
-
- Уже с Приветом
- Posts: 9563
- Joined: 26 Mar 2011 23:02
- Location: Russia -> Orlando, FL
Re: 55+ в ИТ
Откуда там null может появиться?
Стареет Комиссар. Комиссар уже не тот.
Пример с корзиной конечно некорректный, но смысл понятен, что плохо просто сканировать огромный массив.
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
-
- Уже с Приветом
- Posts: 1321
- Joined: 10 Jan 2000 10:01
- Location: Хьюстон
Re: 55+ в ИТ
У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.
Проверку аргументов на null в private методах обычно не делаем
Code: Select all
private isItemInCart(item: Item): boolean {
return this.cart.Items.Any(cartItem => cartItem.Id === item.Id);
}
Проверку аргументов на null в private методах обычно не делаем
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
это верно. стало быть, нужно взвешивать риски, плюсы-минусы и все такое. ИМЕННО ЭТО есть то, за что платят инжинегру. а не за обход дереваМальчик-Одуванчик wrote: ↑08 Oct 2018 23:35Что налагает более жесткие требования устойчивости к исключениям для методов корзины.
Ведь так легко сделать данные несогласовынными если исключение вылетело между операцией изменения корзины и обновлением счетчика.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
та ни, все как valchkou понял: Cart имеет кучу полей, одно из них - спейсок CartItems. getter просто возвращает ссылку на этот спейсокМальчик-Одуванчик wrote: ↑08 Oct 2018 23:39Тут я честно не понял. Разве getItems() не создает эту саму коллекцию, то есть новую структуру данных, отличающуюся от cart?
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсе
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень частоmajor Major Major Major wrote: ↑09 Oct 2018 16:40 У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.Code: Select all
private isItemInCart(item: Item): boolean { return this.cart.Items.Any(cartItem => cartItem.Id === item.Id); }
Проверку аргументов на null в private методах обычно не делаем
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 1321
- Joined: 10 Jan 2000 10:01
- Location: Хьюстон
Re: 55+ в ИТ
Все зависит от задачи. Если мы про shopping cart то количество предметов в ней не будет того порядка когда разница между hashmap будет существенна и оправданна. Плюс кто сказал что надо будет всегда искать по id? А по категории товара, по количеству, по стоимости?АццкоМото wrote: ↑09 Oct 2018 17:09Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень частоmajor Major Major Major wrote: ↑09 Oct 2018 16:40 У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.Code: Select all
private isItemInCart(item: Item): boolean { return this.cart.Items.Any(cartItem => cartItem.Id === item.Id); }
Проверку аргументов на null в private методах обычно не делаем
Я не против быстрого кода, у меня задачи часто такие что без оптимизации просто никуда, но оптимизировать и усложнять там где можно обойтись чем то простым и надежным считаю напрасной тратой времени. То есть если бы речь шла о методе isItemInOrderHistory() то бяда пичалька, а так не особо.
Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Я там выше в цитате два ключевых момента выделил. Да, не всегда ХэшМап/Таблица это лучшее решение. Но а) их нужно рассмотреть как вариант бэ) даже перебор нужно делать элегантнееmajor Major Major Major wrote: ↑09 Oct 2018 17:18Все зависит от задачи. Если мы про shopping cart то количество предметов в ней не будет того порядка когда разница между hashmap будет существенна и оправданна. Плюс кто сказал что надо будет всегда искать по id? А по категории товара, по количеству, по стоимости?АццкоМото wrote: ↑09 Oct 2018 17:09Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень частоmajor Major Major Major wrote: ↑09 Oct 2018 16:40 У нас было бы примерно так
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.Code: Select all
private isItemInCart(item: Item): boolean { return this.cart.Items.Any(cartItem => cartItem.Id === item.Id); }
Проверку аргументов на null в private методах обычно не делаем
Я не против быстрого кода, у меня задачи часто такие что без оптимизации просто никуда, но оптимизировать и усложнять там где можно обойтись чем то простым и надежным считаю напрасной тратой времени. То есть если бы речь шла о методе isItemInOrderHistory() то бяда пичалька, а так не особо.
Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
если мы говорим про агрегацию 100500 миллионов, то одной блятекой тут не обойтись даже интерапту, не зря же наворотили разных хадупов, спарков и следом распределенных in-memory DB.АццкоМото wrote: ↑09 Oct 2018 17:07я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсе
сначала нужно все это барахло найти поставить настроить и только потом можно будет немного расслабившись налить чайку и написать несколько строчек работающего кода.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Ну тогда по идее самое оно параметризовать тип контейнера в реализации и специализировать функцию поиска, если она отличается от тривиального find()major Major Major Major wrote: ↑09 Oct 2018 17:18 Если не считать что твой старпер не верит в электречество и array.find() не использует, не говоря уже про LINQ. Code review у меня бы по этому не прошел. Читабельность страдает
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
От бага в другом модуле.
-
- Уже с Приветом
- Posts: 818
- Joined: 06 Jul 2016 18:30
Re: 55+ в ИТ
[map][/map]
Что под капотом тот же обход листа
На самом деле 30-летний погромист учился кодить на питоне, поэтому он выдаст чтото вроде
Code: Select all
def isInCart(item, cart):
return len(filter(lambda x: x.getId() == item.getId(), cart.getItems())) > 0
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: 55+ в ИТ
Уж больно коряво, если вы про Питон.Zachet wrote: ↑10 Oct 2018 02:45 [map][/map]На самом деле 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()
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
“A вы друзья, как ни садитесь...”
-
- Уже с Приветом
- Posts: 818
- Joined: 06 Jul 2016 18:30
Re: 55+ в ИТ
Не принципиально. Суть в том что 30-летний погромист напишет на питоне обход листа в одну строчку, и забудет. Пока Комиссар будет выяснять, не подменили-ли инопланетяне у него в карте один айтем на нулл.M. Ridcully wrote: ↑10 Oct 2018 05:13Уж больно коряво, если вы про Питон.Zachet wrote: ↑10 Oct 2018 02:45 [map][/map]На самом деле 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()
-
- Уже с Приветом
- Posts: 2272
- Joined: 29 Jul 2005 17:39
- Location: Калифорнийский Мухосранск
Re: 55+ в ИТ
Зато у Комиссара приложение не начнёт падать в продакшн с нуль пойнтер эксепшен когда какое-нибудь другое молодое дарование внезапно(tm) поменяет код по добавлению айтемов в эту корзину.Zachet wrote: ↑10 Oct 2018 16:08Не принципиально. Суть в том что 30-летний погромист напишет на питоне обход листа в одну строчку, и забудет. Пока Комиссар будет выяснять, не подменили-ли инопланетяне у него в карте один айтем на нулл.M. Ridcully wrote: ↑10 Oct 2018 05:13Уж больно коряво, если вы про Питон.Zachet wrote: ↑10 Oct 2018 02:45 [map][/map]На самом деле 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()
Хотя, конечно, мы ту обсуждаем сферического коня в вакууме. Без знаний как за кадром устроен этот cart из примера, что там с айтемами (как там например имплементирован метод equal() и т.п.) - все остальное гадание на кофейной гуще. Фреймворки тоже не боги писали, как мне помнится классный библиотечный binary search в Java как раз на 100500 классно гнал фуфло.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: 55+ в ИТ
Дык, чисто потрындеть да своей гениальностью блеснуть, как водится.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
сюрпрайз: для этого придуманы не только аннотации типа @NonNull, которые решают проблему частично, но и йызыки тиипа Котлина, которые решают проблему полностью. И молодое дарование наверняка умеет этим пользоваться, а старперы будут и дальше надувать щеки "а вот если вдруг"
На всякий случай напомню, что идея Комми - проверять на нуль и кидать эксепшн. Не NPE, а другой. Т.е. по факту у неопытного писюка будет код такой, что нарушить null-safety будет невозможно, а у Комми - такой, что не падает со стыдным NPE, но падает с KommyVerifiedThatHereWeHaveANullPointerInCollectionAndYouAllSuckException
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: 55+ в ИТ
А вообще всех за пояс заткнет Кумар Дипшитович, который честно поймает null pointer и в обработчике сделает молчаливый возврат безо всякой диагностики. И подумает: "у меня ничего не падает, а вы поебитесь отлаживать".
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: 55+ в ИТ
Мои эксепшны выводятся на экран PM со словами "ЗА ВАМИ УЖЕ ВЫЕХАЛИ"АццкоМото wrote: ↑10 Oct 2018 17:46сюрпрайз: для этого придуманы не только аннотации типа @NonNull, которые решают проблему частично, но и йызыки тиипа Котлина, которые решают проблему полностью. И молодое дарование наверняка умеет этим пользоваться, а старперы будут и дальше надувать щеки "а вот если вдруг"
На всякий случай напомню, что идея Комми - проверять на нуль и кидать эксепшн. Не NPE, а другой. Т.е. по факту у неопытного писюка будет код такой, что нарушить null-safety будет невозможно, а у Комми - такой, что не падает со стыдным NPE, но падает с KommyVerifiedThatHereWeHaveANullPointerInCollectionAndYouAllSuckException
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Ага. А когда мой код не работает, фиксят компилятор. Продолжим?Komissar wrote: ↑10 Oct 2018 18:33Мои эксепшны выводятся на экран PM со словами "ЗА ВАМИ УЖЕ ВЫЕХАЛИ"АццкоМото wrote: ↑10 Oct 2018 17:46сюрпрайз: для этого придуманы не только аннотации типа @NonNull, которые решают проблему частично, но и йызыки тиипа Котлина, которые решают проблему полностью. И молодое дарование наверняка умеет этим пользоваться, а старперы будут и дальше надувать щеки "а вот если вдруг"
На всякий случай напомню, что идея Комми - проверять на нуль и кидать эксепшн. Не NPE, а другой. Т.е. по факту у неопытного писюка будет код такой, что нарушить null-safety будет невозможно, а у Комми - такой, что не падает со стыдным NPE, но падает с KommyVerifiedThatHereWeHaveANullPointerInCollectionAndYouAllSuckException
Мат на форуме запрещен, блдж!