1. JavaScript / Говнокод #23559

    +5

    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
    function ехал(f) { f(); }
    function через(f) { f.call(null); }
    function видит(f) { setTimeout(f, 0); }
    function сунул(f) { Promise.resolve(null).then(f); }
    function в(f) { alert("Hello functional world!"); return f; }
    
    ехал(function() {
    	через(function() {
    		видит(function() {
    			(function(_function) {
    				сунул(function() {
    					_function(в(function() {}))
    				})
    			})(function(_function() {
    				_function(function() {})
    			})
    		})
    	})
    })

    Запостил: someone, 20 Ноября 2017

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

    • Это не functional , это callback hell, помноженный на говносинтаксис JS до 2015ES.
      Лечится через корутины
      Ответить
    • Баяниссимо.
      http://govnokod.ru/17129#comment255095
      Ответить
    • Ожидался символ ')'

      А всё потому, что надо ставить точку с запятой всегда, а то были случаи и до тебя.
      Ответить
      • > Например, в JavaScript лишними являются точки с запятой.
        > Они не несут смысла, и не имеют структурной роли.
        > Они лишь занимают лишнее место на экране и замедляют чтение кода.
        const number = 100
        // чище чем
        const number = 100;

        > Когда точек с запятыми на экране много, то они очень сильно мешают восприятию кода.
        > Также в JavaScript в некоторых случаях лишними являются круглые и фигурные скобки.

        https://habrahabr.ru/post/342648/
        Ответить
        • красота:
          const abs = number => {
            if (number >= 0) return number
            return -number
          }
          // лучше чем
          const abs = number => {
            if (number >= 0) {
               return number
            } else {
                return -number
            }
          }
          // но в идеале 
          const abs = number => 
               number >= 0 ? number : -number


          и вот это:
          > Вообще идеально заменять то, что можно на тернарный оператор.
          и вот это:
          > Ничего не засоряет код больше, чем комментарии.

          если на пыхе пишут 4х летние - то на жабоскрипте тогда 3х летние?

          ЗЫ в комментариях там чудака ростят в полный рост.
          Ответить
        • из комментариев:
          > > > В нескольких компаниях, где я работал else считался дурным тоном [...]
          > > [...] Думаю в хипстерской, потому как всегда плохим тоном считался «multiple return».

          как выяснилось, multiple return на самом деле имеет реальные последствия - для coverage test'ов. тут давеча один модуль переписали в "новый стиль", включая multiple return. код который раньше покрывался 2-3 тестами, теперь нужно лепить 5-15, потому что нужен как минимум один доп тест на каждый ретурн.
          Ответить
          • TDD: Test-drowned development.
            Ответить
            • лол. у меня случай скорее другой: "использование модных хипстерских методологий, и как это все через год ооочень успешной разработки hits the fan на стадии допиливания тестов."
              Ответить
          • Значит, в другом месте поубавилось ифов. Cyclomatic complexity не должна была поменяться
            Ответить
            • на копейку дороже.

              extern int ofunc1( int );
              extern int ofunc2( int );
              extern int ofunc3( int );
              
              int func1( int arg )
              {
                      int isOk;
                      isOk = ofunc1( arg );
                      if (isOk)
                              isOk = ofunc2( arg );
                      if (isOk)
                              isOk = ofunc3( arg );
                      return isOk;
              }
              
              int func2( int arg )
              {
                      if (!ofunc1( arg )) return 0;
                      if (!ofunc2( arg )) return 0;
                      if (!ofunc3( arg )) return 0;
                      return 1;
              }


              $ pmccabe test1.c 
              3       3       7       7       10      test1.c(7): func1
              4       4       7       18      7       test1.c(18): func2
              Ответить
            • с другой стороны, для ковераджа самое главное что каждая строка и каждый вызов функций были достигнуты. поэтому цикломатика здесь не совсем применима. цикломатика - это если тебе нужно кол-во тестов для всех путей через функцию.
              Ответить
              • Ну и на как тест на хуёвость тоже. Если цикломатическая сложность велика то и код, скорее всего, требует рефакторинга
                Ответить
        • >Когда точек с запятыми на экране много, то они очень сильно мешают восприятию кода
          А ведь он прав:
          int main() {;{{int x=1;;;{{{;;;;};;};int x=2;;;{{;;;
          ;;;;;};{};;};;{;;;;;{;;;{printf("%d", x);;;};;;};;;;
          ;;;;;{{;;;;;;;};;;;};;;;;;{;;;;;return 0;};;;}};;}}}
          https://ideone.com/7DuCfq
          Ответить
          • Это не из-за точек с запятыми, это из-за того, что код не отформатирован.
            Сравним
            int main() { {{int x=1;  {{{    }  } int x=2;  {{   
                 } {}  }  {     {   {printf("%d", x);  }   }    
                 {{       }    }      {     return 0;}   }}  }}}
            и
            ;;;int main() {;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;int x=1;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;int x=2;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;printf("%d", x);;;
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;;;;;return 0;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;;;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ;;;};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            Ответить
            • А если точки с запятой разбавить пробелами, то можно ещё писать текст или рисовать картинки на фоне текста программы.
              Ответить
      • точка с запятой не нужна
        и оператор new не нужен (нигде кроме C++)
        Ответить
      • > Ожидался символ ')'

        В строке 14 надо убрать открывающую скобку после _function. К сожалению, редактировать свой код тут нельзя.

        https://jsfiddle.net/erqp4yn5/
        Ответить
    • Но всё же в нормальных языках точка с запятой ставится, остальные языки говноподобные
      Ответить

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