1. ActionScript / Говнокод #3203

    −86

    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
    if (event.customerName != "")
    {
    	criteria.xmlCriteria =
    		"<criteria>" +
    		"<billingDetailsName>" + event.customerName + "</billingDetailsName>" +
    		"</criteria>";
    }
    else
    {
    	criteria.xmlCriteria =
    		"<criteria>" +
    		"</criteria>";
    }

    Запостил: voice, 12 Мая 2010

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

    • о да. а вдруг эксепшн, если вдруг пустая строка )))
      Ответить
    • Классический говнокод по запарке.
      Ответить
      • да нет, тут что-то хитрее, не без НЛП дело обошлось.... Matrix has you, Neo - раз уж такая паранойя
        Ответить
        • Смысл кода - "если в event.customerName ничего нет, то не создавать тэг billingDetailsName вообще". Без ветвления в любом случае не получится. А вот else ветка не нужна, из-за неё, IMHO, данный фрагмент и является говнокодом.
          Ответить
          • выше был хумор )
            ГК даже не из-за ветки else, а то, что там еще два стринга клеятся. А так, можно было бы еще предположить...ммм, оптимизацию по скорости, что ли? )))
            Ответить
          • Юмор еще в том, что если добавить еще один параметр то данную структуру полюбому придется переделывать.

            К стати, автор кода утверждает что програмит на Java 10 лет :)
            Ответить
            • причем переделывать каждый раз при добавлении параметра. и мне интересно, сколько их надо, что бы у автора кончилось терпение и он начал думать, а не мэппить свои желания в код

              автору тоже 10 лет? ))
              Ответить
    • для тех, кто не в курсе, так это должно было бы выглядеть, если бы человек иногда заглядывал в мануал:
      criteria.xmlCriteria = <criteria/>;
      if (event.customerName)
      {
      	criteria.xmlCriteria.billingDetailsName = event.customerName;
      }
      Ответить
      • Спасибо! До этого коммента я был уверен, что Boolean('') вернёт "true"... :/
        Ответить
    • RE: для тех, кто не в курсе, так это должно было бы выглядеть

      Сынок, не много ли Ты на себя берешь? Ну допустим сегодня всем пофигу на производительность, в которой твой вариант явно проигрывает, НО У ТЕБЯ ЖЕ НОМИНАЛЬНЫЙ ВАРИАНТ В УСЛОВНОМ БЛОКЕ!!!!
      Ответить
      • 1. Потести, если "вдруг" конкатенация строк в AVM окажется быстрее чем нативный C код который делает по сути то же самое, то, я даже не знаю, как же Адоби так XML написали. Но, даже если и нет, то мой вариант трансформируется в гораздо меньше инструкций байткода, и, есть шанс, что даже если конкатенация десйствительно окажется быстрее, то за счет того, что на обработку кода отведено меньше инструкций, он все равно выиграет.
        2. Можно перевести в нижний регистр и объяснить в чем собственно проблема? Или если customerName === null, то нужно имя клиента записать (будет "null" строка). Я так предположил, что ожидаемое поведение должно быть аналогично си-шарповому String.IsNullOrEmpty() - ну тут уже у автора надо спрашивать :S
        Ответить
    • Я так понимаю что event.customerName == "" явление исключительно невероятное, потому что судя по коду customerName является единственной в критерии. Теперь смотри как Ты предлагаешь писать:
      if (Условие которое почти 100% всегда выполняется) {
      делаем, то что делаем почти в 100% случаев.
      }

      Тебя гарантированно поймут по другому:
      if (Если произошло что-то неординарное) {
      делаем какое-то редкое действие
      }
      Размещение номинального варианта в условном блоке является ошибкой, которая снижает читаемость кода.
      Автор же шедевра 3203 хотя бы оставил номинальному 50%, да же нет ~66% потому что разместил наиболее невероятный вариант в блоке else
      Ответить
      • > Размещение номинального варианта в условном блоке является ошибкой
        нет
        > снижает читаемость кода
        да
        Ответить
      • Вы поленились не то, что спецификацию, а даже конвенции осилить...
        Если вы не пишите на ECMAScrip-подобных языках, то вам они могут показаться непонятными. Но, по спецификации компилятор ECMAScripta обязан кастовать выражение в условном блоке к Boolean. Поэтому то, что вы сделали просто добавит 3 лишних опкода перекаста из Boolean в Boolean. То, что вы написали это домыслы по незнанию. Смешно то, с каким апломбом вы это еще и защищаете...
        Ответить
      • Да, и откуда вы взяли, что это невероятное явление? Я вполне себе представляю такой код на какой-нибудь форме, где нужно сделать валидацию каких-то опциональных параметров (раз уж в исходном коде оба варианта приемлимы). Например, имени заказчика может не быть, если это установка с регистрацией, когда регистрацию можно сделать и позже... да и мало ли вообще вариантов.
        Ответить
        • Re: wvxvw
          > Но, даже если и нет, то мой вариант трансформируется в гораздо меньше инструкций байткода

          Я не стал отвечать на эту хуйню вчера, потому что, думал что даже такому долбоёбу как Ты очевидно, что количество байткода которое получишь на выходе, слабо коррелирует с количеством буков исходника, одно дело две(три) строки склеить другое дело строить XML документ.

          Я конечно понимаю что твой вариант короче на одну строчку и с точки зрения ActionScript выглядит лучше чем то что показал voice, но увы и ах - он унылое говно. Обясняю тебе как видят его люди:
          1.criteria.xmlCriteria = <criteria/>;
          Тег закрыт, критерий сформирован, заебись дальше можно не читать.
          2. if (event.customerName)
          Какая-то хуйня, всё же произошла, интересно почему этот условный оператор расположен после формирования результата, ладно хуй с ним почитаем что там говнокодеры дальше пишут.
          3. criteria.xmlCriteria.billingDetailsName = event.customerName;
          Хуясе, в закрытый тег пихают, теперь вообще придеться читать до того места пока XML на сервер не уйдёт, а то где нибудь выясниться что ещё что-то забыли и примотают c десяток параметров.

          > Да, и откуда вы взяли, что это невероятное явление? Я вполне себе представляю такой код на какой-нибудь форме, где нужно сделать валидацию каких-то опциональных параметров.

          Какая нахуй опцианальная валидация единственного условия, глаза разуйте на первый пост, там же черным по белому написано что условие единственное.
          Ответить
          • О, да тут оказывается говна больше в людях, а не в коде...
            смотри, я бы мог выложить то, во что скомпилируются оба варианта и с объяснениями почему и как оно работает. Если интересно, то знаю я это не только потому, что даже человек вроде тебя, не знакомый с технологией, может воспользоваться SWFdump, которая есть у каждого, у кого есть флекс СДК, а еще и потому, что я еще и тестю это на правах оф. тестера... наверное год уже как... Тоесть, ты абсолютно не понимая, что говоришь, пытаешься меня убедить в том, о чем вообще не имеешь никакого представления... Ну, как бы понятно, Интернет, анонимность и все такое, но хоть немного здравого смысла это же должно было оставить? Или я не прав? :)
            Ответить

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