1. Ruby / Говнокод #23469

    +6

    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
    Ruby programmers are very particular about how their for-loops are written and will declare you a bad programmer for simply using this one construct wrong. 
    They went so far as to break the for-each version of looping so that there are problems with using it, forcing you to conform to their culture. Heed my warning that
     you should always use .each and never for-each for fear of being forever branded bad and shunned. Yes, it is as ridiculous as it sounds.
    
    # запишут в пидарасы
    for i in (1..10)
      puts i
    end
    
    # зауважают
    (1..10).each do |i|
      puts i
    end

    Запостил: SemaReal, 31 Октября 2017

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

    • ну справедливости ради второе позволяет всякие упрощенные конструкции типа objects.each(&:method)
      Ответить
      • Умение передать блок в each это круто и функционально

        но первый вариант тут явно ничуть не лучше второго
        Ответить
    • Мы добавим в язык кучу сахара, а потом придумаем rubocop, который будет запрещать вам его использовать.
      Ответить
      • Существует 32 способа обойти массив, но 31 из них не рекомендован к использованибю
        Ответить
        • Существует 32 способа обойти массив, но 32 из них не рекомендованы к использованибю
          Ответить
    • Пойаны я понил почему так

      Просто блок создает область видимости, а фор нет
      Ответить
      • Чувак, ты реально крэйзи.
        Ответить
      • # Просто блок создает область видимости, а фор нет.

        Создатель руби, он реально крейзи
        Ответить
        • А ещё в блоке, емнип, можно юзать return и он вернётся из функции, а не из блока (в отличие от лямбды).
          Ответить
          • а ты откуда знаешь? ты тоже обрубился, борманд-кун?
            Ответить
          • Блок вообще интересная штука:
            * можно просто выйти из блока, вернув значение (next *args, неявный return в конце)
            * можно выйти из метода, вызвавшего блок (break *args)
            * можно выйти из метода, объявившего блок, или отхватить LocalJumpError, если такое уже невозможно (явный return *args)
            Это вам не какое-нибудь goto в середину цикла :3

            Что характерно, в лямбде тоже можно next и break. А что они делают - попробуйте догадаться без гугла и ideone :3
            Ответить
            • При этом блок не является объектом. Объектом является proc.
              Создать объект proc из блока (и наоборот) можно посредством "&".
              Лямбда это тоже proc, но в отличие от Proc.new + block она не проверяет аргументы.

              Забористая трава на солнечном склоне горы Фудзиямы
              Ответить
              • Чего можно ожидать от нихонцев, если они даже гору называют ямой?
                Ответить

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