1. Java / Говнокод #13808

    +114

    1. 1
    Ranges.closedOpen(0, list.size()).asSet(DiscreteDomains.integers())

    Самый простой известный мне способ сделать аналог питоновского range(len(list)). Даже с Guava.

    Запостил: someone, 18 Сентября 2013

    Комментарии (30) RSS

    • а зачем тебе нужен то range()? в питоне у него основное применение это цикл. в жабе то есть нормальные циклы.
      Ответить
      • Таки двачну. range() обычно используется для эмуляции сишного for (в питоне есть только foreach). Ну и какой из них нормальнее - это большой вопрос.
        Ответить
        • но в жабе то есть сишный for.

          и даже iterator. если на самом деле хочется по целым числам итерировать, то эмулировать надо xrange().
          Ответить
          • >но в жабе то есть сишный for.
            Ну а я о чем.

            На самом деле, на последней ветке фитона range() возвращает итератор.
            Ответить
            • > фитон

              хорошо сказал. почти нофелет, но про программирование.
              Ответить
      • Нужно сгенерировать список чисел 0..n. Можно старым добрым фором, но это некузяво.

        И да, в Жабе есть и сишный фор, и форыч, так что потенциальная область применения range/xrange гораздо уже. Но она таки есть.
        Ответить
        • Почему бы просто не написать класс Range implements List<Int> (или Iterable<Int>. вот почему нет ImmutableCollection/ImmutableList?) с трёмя числами внутри? Пишется вместе с тестами максимум за час.
          Ответить
          • > вот почему нет ImmutableCollection?

            Отвечает Александр Друзь Джошуа Блох:

            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, где надо.
            Ответить
            • Всё от того, что контейнеры паршиво выражаются через наследование (кого я обманываю, почти всё паршиво выражается через наследование). В плюсах есть const и утиная типизация в шаблонах, которые решают эту проблему.
              Ответить
            • Джошуа Блох гонит. Пример же на той самой странице. Умудрились же зачем то кроме List'а еще Queue и Deque вставить, вместо того что бы все аккуратно слить в List (а остатавшиеся мелкие запчасти то все равно уже в concurrent валяются).

              Всегда за это жабщину не любил. Вместо того что бы просто сказать "сорри облажались" они начинают городить поводы что бы сделать вид что оно так и задумывалось.
              Ответить
              • > Джошуа Блох гонит
                Что ещё ждать от человека, который рекомендует читать Design Patterns
                Ответить
                • >> Джошуа Блох гонит
                  А навстречу ему Страуструп, и говорит такой: Джошуа, а я вот считаю, что лучше когда сложности реализации язык перекладывает на свои плечи со щупленких плечей программиста, вон посмотри тока, какой мы СТЛ отгрохали? А?
                  Ответить
                  • "А навстречу ему Страуструп"

                    Страуструп может СТЛ и одобрил, но авторство не его. Если я правильно помню он как раз и хотел темплейты/этс поменять потому считал что на них сложно что либо сделать. Но потом тот Степанов ( http://en.wikipedia.org/wiki/Alexander_Stepanov ) выплыл и показал что на темплейтах таки можно что-то сделать. После этого просто и порешили ничего больше не менять. Другими словами: если не гений как Степанов, то лучше не трогай СТЛ/темплейты.
                    Ответить
                    • Нифига, эти два друга неплохо спелись. Степанов пилил женерик алгоритмы, а Страуструп радостно пилил компилер, ибо компилятор не умел в те конструкции, которые требовались для алгоритмов. Более того, Страуструп сам предложил запихнуть stl в стандарт.

                      В частности, шаблоны, принимающие на вход шаблоны, появились из-за потребности в аллокаторах (придуманных, между прочим, не Степановым - их навязал комитет).

                      Пруфы можно найти в
                      http://www.stlport.org/resources/StepanovUSA.html
                      и Design and Evolution of C++
                      Ответить
                      • "Нифига, эти два друга неплохо спелись." "Более того, Страуструп сам предложил запихнуть stl в стандарт."

                        Может и спелись. Основная цель Страуструпа была стандартная библиотека с хорошим набором утилит. Степанов ее предоставил. Страуструп просто не хотел повторения истории С, где в общем случае все всё сами пилили на коленке. Но и опускатся до Смолтока он тоже не хотел, где все что "нужно" уже включено (со всеми вытекающими: цена, портабельность, кто-то за других решает что "нужно" а что нет, и т.д.).

                        Вообщем, всем просто крупно не повезло что именно эти два товарища случайно пересеклись в жизни.
                        Ответить
                        • Откуда такая ненависть к stl
                          Ответить
                          • с одной стороны очень крутая и завороченая реализация.

                            с другой стороны то что реализуется, весьма примитивно и банально.

                            другими словами. коэфициэнт "полезность деленая на избыточность" слегка зашкаливает в нету сторону.
                            Ответить
                            • попахивает ревностью и обидой со стороны юзера борланд билдера
                              без stl каждый первый бы до сих пор изобретал std::string, std::vector, std::map, std::cout...
                              Ответить
                              • бля, меня перловщика со стажем сравнить с борландовской школотой?!?!.... :D
                                Ответить
                                • Список говнокодов пользователя Dummy00001
                                  Всего: 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=). Он оказался довольно удобным:
                                        // было
                                        my @matches = $s =~ /some regex/g;
                                        my $n = scalar(@matches);
                                        // стало
                                        my $n =( )= $s =~ /some regex/g;
                                        Ответить
                    • Кстати, на днях нашёл в офисе книжку Elements of Programming с автографом Степанова.
                      Ответить
                      • Канистру бензина и спички могу проспонсировать. :)

                        ЗЫ А про что вообще книжка?
                        Ответить
                        • > А про что вообще книжка?
                          да всякий матан про типы, концепты и метапрограммирование
                          http://www.elementsofprogramming.com/book.html
                          Ответить
                    • На ютубе есть интервью где он понтами кидается, и рассказывает про то, как Ц++ самый лучший язык. От туда же это его мнение.
                      Ответить
        • "Нужно сгенерировать список чисел 0..n. Можно старым добрым фором, но это некузяво."

          ну я как бы и спрашивал: зачем тебе этот список, например?

          я кроме тестов каких, нигде ничего подобного ни разу еще и не писал.
          Ответить
          • У меня тольк 1 вопрос - почему пост еще не заминусованн?
            Ответить

    Добавить комментарий