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

    +77

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    switch (status) {
    
       case "createInitRequest":
            requestXml = ExtFunc.executeFreemarker(initReqTempl, null, values, em);
            //values.put("soap", soap);
            status = "signInitRequest";
            //return;
    
        case "signInitRequest":    
            initReqSoap = ExtFunc.signSoap(requestXml, context, em);
            if (initReqSoap == null) return;
                    infomsg = "Запрос сформирован и подписан. Нажмите 'Продолжить' для отправки запроса.";
            status = "preSendInitRequest";
            //return;
    
        case "preSendInitRequest":
            status = "sendInitRequest";                   
            return;
    
        // далее ещё 20 кейсов, каждый из которых меняет значение status на значение следующего кейса
    
    }

    Запостил: chsh, 27 Ноября 2014

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

    • Да это же стейт-машина!

      Ну а на самом деле конечно автора расстрелять и переписать все на SCXML (ввиду наличия редактора) потому что такое писать императивно это пздц, благо под джаву есть реализации SCXML от апаче.

      зы: свич по стринге? В шестерке такого не было
      Ответить
      • показать все, что скрытоВ семерке есть.
        Ответить
        • Somewhere in 2011 (или когда она там вышла)
          разработчики: сан, сан, сан, ну что ты нам принес? Лямбды? Сахар для async?
          сан: вот вам дети switch по строке
          Ответить
          • показать все, что скрыто> вот вам дети switch по строке
            У него еще реализация прикольная и не требующая никаких изменений в jvm.
            Ответить
            • ну давайте, скажите что он превращается в кучу if с equals
              Ответить
              • показать все, что скрытоВ switch по хешкоду строки, в ветвях которого ифы с equals'ами, которые выставляют переменную, которая передается во второй свич (уже по интам). Как-то так.
                Ответить
                • показать все, что скрытоЗахардкоженный дикт, короче. Кстати,как оно сочетается с рандомизацией hashcode?
                  Ответить
                  • показать все, что скрыто> рандомизацией hashcode
                    1) А она в жабе вообще есть?
                    2) Рандомизацию, емнип, пилят на уровне самого хешмапа, а не объектов, которые в него суют. Поэтому мешать не будет.

                    > Захардкоженный дикт, короче.
                    Угу.
                    Ответить
                    • чиво?

                      hashCode должен иметь максимальный расброс, тогда хешмапа будет лучше работать. В вырожденном случае (hashCode == 42) всё свалится в одну ветку и будет такой лист с O(N)
                      Ответить
                      • показать все, что скрытоИ причем здесь hashCode == 42?

                        Мы с s-a--m'ом говорим об атаке, когда злоумышленник, зная функцию хеширования, вынуждает сервер упихать большую часть ключей в одну корзинку дабы хешмапа выродилась в связный список и сдохла в мучениях.
                        Ответить
                        • >дабы хешмапа выродилась в связный список и сдохла в мучениях.
                          Выродится в дерево. Не сдохнет.
                          TREEIFY_THRESHOLD = 8;
                          http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/HashMap.java?av=f
                          Ответить
                      • >В вырожденном случае (hashCode == 42) всё свалится в одну ветку и будет такой лист с O(N)
                        Не будет.
                        Будет дерево с O(log(N))
                        Ответить
                        • каким образом будет дерево если у всех hash одинаковый?
                          Ответить
                          • >каким образом будет дерево если у всех hash одинаковый?
                            Отвечу вопросом. А как же функционирует дерево?
                            Ответить
                            • В дереве данные разложены по веточкам. Зная хешкод, можно сразу пойти в нужную ветку и таким образом вызывать equals надо не для всех элементов в дереве, а лишь для её части.

                              В случае если хешкод будет всегда одинаковым, то для поиска нужного элемента всё равно придется проверить все элементы, а значит O(n), а значит разницы с листом никакой.

                              Вы наверное имеете ввиду что внутри-то там всё равно будет дерево, а не лист. Ну тут наверное можно согласиться)
                              Ответить
                              • >В дереве данные разложены по веточкам.
                                >Зная хешкод, можно сразу пойти в нужную ветку и таким образом вызывать equals надо не для всех элементов в дереве, а лишь для её части.
                                А можно поподробнее?
                                Ответить
                                • https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

                                  is implementation provides constant-time performance for the basic operations (get and put), assuming the hash function disperses the elements properly among the buckets. Iteration over collection views requires time proportional to the "capacity" of the HashMap instance (the number of buckets) plus its size (the number of key-value mappings).


                                  см. так же HashMap#get(). По хешкоду мы сразу идем в нужный бакет и уже там ищем нужный там элемент.
                                  Ответить
                                  • >см. так же HashMap#get().
                                    Речь идёт о функционировании дерева. Причём тут хешмап?
                                    дереве данные разложены по веточкам.
                                    Ответить
                                    • table внутри HashMap есть частный случай дерева.
                                      На первом уровне ветки по hashCode, на втором -- по значению.

                                      Если речь идет о TreeMap, то там и вовсе RBTree (как следует из названия)
                                      Ответить
                    • показать все, что скрыто>1) А она в жабе вообще есть?
                      Должна быть везде.

                      >2) Рандомизацию, емнип, пилят на уровне самого хешмапа, а не объектов, которые в него суют. Поэтому мешать не будет.
                      Я так и не понял, куда именно ее засунули, но ее смысл, чтобы удаленный пользователь не мог предсказать, у каких строк совпадет хеш.
                      Ответить
          • показать все, что скрыто> Лямбды
            И ведь лямбды тоже не повлияли на jvm. Ведь они всего лишь реализации интерфейсов с одним методом...
            Ответить
            • лямбды это сахар, да.

              повлияло dynamic invoke (спасибо от имени всех пользователей грувей)
              Ответить
              • показать все, что скрыто> dynamic invoke
                А из жабы оно доступно?
                Ответить
                • См пакет java.lang.invoke, да только зачем оно там?
                  Это же для поддержки ЯПов без статики в JVM.

                  Кста в C# есть dynamic, он позволяет отказаться от статической проверки типов (рантаймовая проверка остается конечно). Думаю что он нужен чуть реже чем никогда.
                  Ответить
                  • Иногда dynamic очень удобен. Конечно, можно и без него, например, с помощью рефлексии или с написанием тонны ручного кода.
                    Некоторые алгоритмы получаются намного короче и проще с dynamic. Тот же паттерн визитор. Или использование заранее неизвестных типов в рантайме. Но, учитывая отсутствие интеллисенса для динамики, усложнение рефакторинга, лучше использовать это только для прототипов, чтобы быстро получить результат. А потом переписать без dynamic.

                    А также dynamic сильно упрощает взаимодействие c COM (если это кому-то ещё нужно).
                    Ответить
                    • показать все, что скрыто>Но, учитывая отсутствие интеллисенса для динамики, усложнение рефакторинга, лучше использовать это только для прототипов, чтобы быстро получить результат.
                      А не лучше ли для этого взять изначально динамический язык?
                      Ответить
              • показать все, что скрытоforeach и даже сишный фор это всего лишь сахар. Что теперь?
                Ответить
            • показать все, что скрытоКстати, это они классно сделали, я для своего легоробота на восьмой яве писать могу, несмотря на то, что на роботе велосипедная JVM юзается (lejos).
              Ответить
          • показать все, что скрыто>Сахар для async?
            Ага, хуй тебе. В 2020 выйдет.
            Ответить
      • показать все, что скрыто>стейт-машина!
        Не все поцреоты руssкого мира с руssким языком знают термин "конечный автомат"?
        Ответить
        • Нету никакого смысла переводить устоявшиеся термины. И я, вообще-то, безродный космополит. Вы меня с кем-то спутали.
          Ответить
          • показать все, что скрыто> стейт-машина
            >устоявшиеся термины
            Где? На кабре?
            Ответить
            • стейт-машина
              Результатов: примерно 64 700 (0,29 сек.)
              Ответить
              • показать все, что скрытоконечный автомат
                Результатов: примерно 278 000 (0,42 сек.)
                Ответить
                • Автомат термин правильный, научный и математический.
                  А стейтмашина -- устоявшийся
                  Ответить
                  • показать все, что скрытоНу или крестик снимите, или трусы наденьте...

                    Есть finite state machine. Есть конечный автомат. Зачем изобретать новую хрень, которая мало того, что кривая калька с английского, так еще и без finite...

                    Соглашусь с s-a--m'ом. Задрали уже все эти мерчандайзеры, супервайзеры, митапы и прочие воркшопы.
                    Ответить
                    • Это не я изобрел. Этот термин встречается то тут, то там. Часто в описании сетевых протоколов (например в литературе cisco) или не сетевых (например применительно к поведению разных компонентов PC, PCI master'а например). Тот факт что он finite и ёжику понятно, вот и упускают:)
                      Ответить
                      • показать все, что скрыто> Этот термин встречается то тут, то там.
                        Миллионы мух не могут ошибаться?

                        > описании сетевых протоколов
                        > поведению разных компонентов PC, PCI master'а например
                        Если переводчик не знает терминологии и пишет "стейт-машина", то доверие к нему падает ниже плинтуса... Я лучше на английском прочитаю, ей-богу.
                        Ответить
                        • Я говорю об англоязычной литературе конечно же.
                          Оттуда он перекочевал в жаргон программистов. Никто не говорит "точка останова", "ловушка" (всмысле trap: эксепшен или фолт в IA-32), "отладчик" или "связывание", правда?
                          Ответить
                          • показать все, что скрыто> жаргон программистов
                            Из-за этого сраного жаргона у меня профдеформация - многие английские слова не могу правильно произносить :(

                            Имхо, если уж и использовать такие слова - так писать их латиницей, без уродской транслитерации, а читать - правильно.

                            > отладчик
                            Ну вот отладчик зря... Тут, вроде бы, большинство так говорит. И по исключению так же (эксепшн редко пишут).
                            Ответить
                            • Когда я compiling свою application by clicking shift F10 в моем IDE я всегда думаю о том что английские слова из manuals лучше писать латиницей)
                              Ответить
                              • показать все, что скрытоКогда я компилирую своё приложение нажав Ctrl-F10 в моем IDE, я всегда думаю о том, что английские слова из руководств лучше писать латиницей.

                                P.S. А чем транслит то лучше? Как-то так надо по-вашему: "Когда я компилю мою апликуху кликнув шифт-ф10 в моем ИДЕ, я всегда думаю о том, что слова из манов на инглише лучше писать латиницей"? Ну для форума кулхацкеров - само то...
                                Ответить
                                • Когда я собираю свое приложение нажав Ctrl-F10 в моей ИСР..

                                  Транзлит выглядит не так глупо, имхо)
                                  Ах нет, не имхо! Пмсм!
                                  Ответить
                        • показать все, что скрыто> Миллионы мух не могут ошибаться?
                          Вот это верно подмечено. Если читать статьи на сами знаете каком сайте, то можно прочувствовать всю боль ситуации. Одни делают ошибки из-за того, что они не специалисты в описываемых областях. Другие - узкоспециализированные авторы-профессионалы уже нужные термины знают, но, как и Кегдан, делают ошибки из-за того, что вертели они русский язык сами знаете на чём.
                          (Конечно, есть и промежуточные варианты, но крайности достаточно устойчивы, чтобы в них скатываться.)
                          Ответить
                      • показать все, что скрытоЕсли переводили как переводят документалки на рашкатв (с "атомами силикона"), то может быть все, что угодно, алсо, ты же в другом треде был против переводов мрикософта?
                        Ответить
    • soap movies for 2300
      Ответить
    • я не очень модный. Java теперь умеет в switch по строкам?
      Ответить
    • показать все, что скрытоКЛИЕНТСКИЕ БАЗЫ для всех кто много продает (для юрлиц и физлиц)! Узнайте подробнее! Skype: prodawez390 Email: [email protected] Whatsapp: +79139230330 Viber: +79139230330 Telegram: +79139230330
      Ответить

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