- 1
- 2
- 3
- 4
code = _factorCodeMax[factorUnid];
code++;
_factorCodeMax[factorUnid] = code;
return code;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+138
code = _factorCodeMax[factorUnid];
code++;
_factorCodeMax[factorUnid] = code;
return code;
bormand 10.08.2012 08:25 # +3
Думаете return ++factorCodeMax[factorUnid] смотрелось бы лучше ? ;)
guest 10.08.2012 08:36 # −1
bormand 10.08.2012 08:44 # +3
defecate-plusplus 10.08.2012 09:00 # +13
> 1mGai
и ты туда же??
bormand 10.08.2012 09:00 # +1
roman-kashitsyn 10.08.2012 08:50 # 0
bormand 10.08.2012 08:52 # +2
P.S. Ну вернее 3 вместо двух в моем примере, или в коде ОП'а.
bormand 10.08.2012 08:56 # +3
Ваш код: http://ideone.com/6jeOP 2 get 1 set
Код ОП'а: http://ideone.com/BIo0x 1 get 1 set
Мой код: http://ideone.com/6WBrw 1 get 1 set
absolut 10.08.2012 10:20 # 0
bormand 10.08.2012 10:42 # 0
Временными переменными можно пренебречь, да и они есть в каждом из вариантов.
wvxvw 10.08.2012 12:26 # 0
По-идее должно быть самым быстрым вариантом, но влом пробовать.
roman-kashitsyn 10.08.2012 10:53 # +1
Чуть длиннее, чем с ++, но мне по каким-то необъяснимым причинам нравится конструкция += 1.
А для хэша (да и вообще любой индексируемой структуры) неплохо было бы иметь операцию обновления значения, чтобы можно было сделать всё в один лукап.
У Data.Map вроде бы есть updateLookupWithKey.
Правда, аналог в java выглядел бы ужасно. В c# получше, там лямбды есть.
roman-kashitsyn 10.08.2012 11:05 # +3
код с побочным эффектом отделён от "чистого"
bormand 10.08.2012 11:18 # 0
roman-kashitsyn 10.08.2012 12:08 # 0
bormand 10.08.2012 12:25 # 0
roman-kashitsyn 10.08.2012 12:34 # +1
В python нету оператора ++, вот привычка и осталась
bormand 10.08.2012 12:40 # 0
Да у вас же стэйтмент!
А на самом деле - что ++, что += это выражения. Которые с++/c# позволяют использовать как стейтменты.
roman-kashitsyn 10.08.2012 12:48 # +2
Спасибо, не знал. Кстати, некоторые языки об этом другого мнения:
vistefan 10.08.2012 19:18 # +1
invalid proektiroval syntax
bormand 10.08.2012 11:17 # +1
absolut 10.08.2012 12:13 # +1
bormand 10.08.2012 12:37 # 0
Мы, конечно, можем сделать один get, и прочитать\поменять много-много свойств у объекта.
Но мы не можем в одну операцию прочесть и, при необходимости, заменить этот объект другим. Придется делать get для получения старого и set для сохранения нового (ну собственно как и в случае с value-type).
absolut 10.08.2012 13:15 # 0
roman-kashitsyn 10.08.2012 13:23 # 0
А там только амортизированный O(1)
absolut 10.08.2012 13:37 # 0
bormand 10.08.2012 14:48 # 0
roman-kashitsyn 10.08.2012 15:00 # 0
Тогда мапа сможет сделать лукап, (возможно) найти ячейку, обновить/вставить значение при помощи функции и вернуть новое значение. Итого всего один лукап.
Но для этого нужно писать свою мапу.
bormand 10.08.2012 15:02 # 0
3.14159265 10.08.2012 15:10 # 0
>Но для этого нужно писать свою мапу.
Это конечно звучит красиво, но как-то изъебисто.
И если, например, оно используется в многопоточной среде (а оно наверняка так и будет).
Может так случится, что вычисления дорогостоящей лямбды на одном и том же значении будут запускаться несколько раз.
>updateWith(K key, (Option[(K, V)] => V))
То есть оно уже считается. Тут приходит еще один тред и просит то же значение. И та же лямбда запускается уже в другом треде.
3.14159265 10.08.2012 15:11 # 0
ConcurentHashMap.putIfAbsent(), FutureTask и анонимные наследники.
absolut 10.08.2012 15:30 # 0
всё равно джва поиска ведь
3.14159265 10.08.2012 15:33 # 0
Откуда инфа? Пруфы в студию.
Да и вообще поиски не столь важно не, сколь способность мапы раssпаралеливаеться и сколько раз вычисляется дорогостоящая функция.
absolut 10.08.2012 15:37 # 0
3.14159265 10.08.2012 15:40 # 0
То ж псевдокод-заменитель для малоумных братьев.
is equivalent.
Совсем не означает что внутри оно тоже так тупо. Там ведь еще чудесное слово atomic.
Пруфы надо из сырцов.
absolut 10.08.2012 15:43 # 0
3.14159265 10.08.2012 15:45 # 0
Да и не я эту тему поднял
>>В жабе-то есть что-то для этого?
absolut 10.08.2012 15:47 # 0
3.14159265 10.08.2012 15:49 # 0
Ой-вей. Раньше надо было ко мне быть таким снисходительным.
А сейчас я обиделся и уже не могу не рыдать.
absolut 10.08.2012 16:02 # 0
на жаба-сленге это слово подразумевает нечто большее, чем защита от влияния другого потока?
3.14159265 10.08.2012 16:07 # 0
Это слово подразумевает, раз уж пишем отдельный метод, то проще сделать всё за один скан, чем накладывать лочку и сканить джва раза.
roman-kashitsyn 10.08.2012 15:35 # 0
Да нет, вроде один
3.14159265 10.08.2012 15:38 # 0
3.14159265 10.08.2012 14:54 # 0
Ну это правильно. Конструкция универсальна и православна, а инкременты - сахарочек.
И я бы оставил сей коммент без внимания, если бы не один нюанс.
3.14159265 10.08.2012 15:02 # 0
>>>Признаюсь, я ориентировался на массив...
А я же говорил, что перегрузка - зло.
Maps 10.08.2012 09:29 # +2
return ++_factorCodeMax[factorUnid];
sayidandrtfm 10.08.2012 10:11 # 0