- 1
Ranges.closedOpen(0, list.size()).asSet(DiscreteDomains.integers())
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+114
Ranges.closedOpen(0, list.size()).asSet(DiscreteDomains.integers())
Самый простой известный мне способ сделать аналог питоновского range(len(list)). Даже с Guava.
и даже iterator. если на самом деле хочется по целым числам итерировать, то эмулировать надо xrange().
Ну а я о чем.
На самом деле, на последней ветке фитона range() возвращает итератор.
хорошо сказал. почти нофелет, но про программирование.
И да, в Жабе есть и сишный фор, и форыч, так что потенциальная область применения range/xrange гораздо уже. Но она таки есть.
Отвечает Александр Друзь Джошуа Блох:
http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html
To keep the number of core collection interfaces manageable, the Java platform doesn't provide separate interfaces for each variant of each collection type. (Such variants might include immutable, fixed-size, and append-only.)
В общем, чтобы не плодить стопицот разных интерфейсов. Есть один интерфейс, а реализации кидают UnsupportedOperationException, где надо.
Всегда за это жабщину не любил. Вместо того что бы просто сказать "сорри облажались" они начинают городить поводы что бы сделать вид что оно так и задумывалось.
Что ещё ждать от человека, который рекомендует читать Design Patterns
А навстречу ему Страуструп, и говорит такой: Джошуа, а я вот считаю, что лучше когда сложности реализации язык перекладывает на свои плечи со щупленких плечей программиста, вон посмотри тока, какой мы СТЛ отгрохали? А?
Страуструп может СТЛ и одобрил, но авторство не его. Если я правильно помню он как раз и хотел темплейты/этс поменять потому считал что на них сложно что либо сделать. Но потом тот Степанов ( http://en.wikipedia.org/wiki/Alexander_Stepanov ) выплыл и показал что на темплейтах таки можно что-то сделать. После этого просто и порешили ничего больше не менять. Другими словами: если не гений как Степанов, то лучше не трогай СТЛ/темплейты.
В частности, шаблоны, принимающие на вход шаблоны, появились из-за потребности в аллокаторах (придуманных, между прочим, не Степановым - их навязал комитет).
Пруфы можно найти в и Design and Evolution of C++
Может и спелись. Основная цель Страуструпа была стандартная библиотека с хорошим набором утилит. Степанов ее предоставил. Страуструп просто не хотел повторения истории С, где в общем случае все всё сами пилили на коленке. Но и опускатся до Смолтока он тоже не хотел, где все что "нужно" уже включено (со всеми вытекающими: цена, портабельность, кто-то за других решает что "нужно" а что нет, и т.д.).
Вообщем, всем просто крупно не повезло что именно эти два товарища случайно пересеклись в жизни.
с другой стороны то что реализуется, весьма примитивно и банально.
другими словами. коэфициэнт "полезность деленая на избыточность" слегка зашкаливает в нету сторону.
без stl каждый первый бы до сих пор изобретал std::string, std::vector, std::map, std::cout...
Всего: 52
C++: 25
C: 17
Java: 3
Куча: 5
Perl: 1
bash: 1
шах и мат!
Так что, unшах!! и unмат!! ;)
ЗЫ профессионально, я 50%/50% - С/С++. официально то, согласно начальству, у нас на фирме вообще ничего на перле не написано. (за исключением: {длиный список внутренних тулзов опущен}.)
Ну не видит человек говна в пёрле, раз он перловщик со стажем. Зато в крестах, си и жабе видит ;)
правильно, это не говно - это гольф
Раз уж речь зашла о пёрле. Сегодня на работе подпиливал пёрловый скрипт, и, стёба ради, на практике поюзал "оператор" goatse (http://search.cpan.org/dist/perlsecret/lib/perlsecret.pod#Goatse__=%28_%29=). Он оказался довольно удобным:
ЗЫ А про что вообще книжка?
да всякий матан про типы, концепты и метапрограммирование
ну я как бы и спрашивал: зачем тебе этот список, например?
я кроме тестов каких, нигде ничего подобного ни разу еще и не писал.