1. Swift / Говнокод #21506

    +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
    В данном случае наговнокодили создатели свифта.
    
    В Си был оператор for
    for (var i = subviews.count - 2; i >= 0; i -= 1) 
    
    Но в Swift 3 его выпилили и вместо него изобрели богомерзкий stride:
    
    for i in (subviews.count - 2).stride(through: 0, by: -1) 
    
    through - до какого значения должен дойти цикл, включительно. Если вместо него написать to, то будет не включительно. Интуитивно понятно, не так ли? (сарказм). 
    Ну и до кучи, в случае со stride нужно больше печатать. 
    
    Я уже молчу, что ++ и -- посчитали небезопасными и выпилили. Наверно, потому, что некоторые дауны путаются с префиксной и постфиксной версией. теперь надо писать += 1 и -= 1. Очень наглядно, по сравнению с ++ и --

    Запостил: gorsash, 20 Октября 2016

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

    • > for (var i = subviews.count - 2; i >= 0; i -= 1)
      typedef var int?
      Ответить
      • почти 10 лет пишу на плюсах и все еще путаю местами типы в тайпдефе)
        Ответить
      • var это как auto в ваших сях
        Ответить
        • > В Си был оператор for
          Речь и шла о наших сях.
          Ответить
        • > var это как auto в ваших сях
          ты ошибаешься.
          автовывод типа в свифте и для var, и для let. var показывает то, что переменная будет изменена.
          Ответить
          • > ты ошибаешься

            И в чём же? В с++ auto никак не влияет на мутабельность объекта, только на вывод типа.
            var ~= auto, let ~= const auto
            Ответить
            • > И в чём же?
              в том, что var - это как auto.
              ты ж сам говоришь, что auto - это про автовывод, а var - это про мутабельность.
              Ответить
              • > ты ж сам говоришь, что auto - это про автовывод, а var - это про мутабельность.

                В общем, я понял, о чём речь. Суть в том, что var не заменяет имя типа, а просто сообщает компилятору, что дальше будет имя переменной, как в scala/go/etc.
                var <variable name> (: <type name>)
                Тогда да, auto /= var. В плюсах просто нет ключевого слова для ввода имён, хотя иногда эту функцию выполняет auto:
                auto f(int x) -> type { /* ... */ }
                Ответить
    • > теперь надо писать += 1 и -= 1
      это тоже выпилили
      надо писать i = i + 1
      Ответить
      • >> ++ и -- посчитали небезопасными
        >> теперь надо писать += 1 и -= 1
        > это тоже выпилили
        Мда. Хотел в комментариях написать, что += можно спутать с =+, а создатели языка уже подумали и запретили. В следующий раз запретят весь Swift, чтобы не осталось ни одной потенциально небезопасной конструкции.
        Ответить
      • Пруф?
        Ответить
    • UPD: это пример кода в свифте 2.3.
      В 3 свифте stride выглядит чуть лучше - stride(from: subviews.count - 2, through: 0, by: -1) , но всё равно мне не особо нравится.
      Лучше уж буду писать for i in (0 ... subviews.count - 2).reverse(), когда шаг 1
      Ответить
    • Каких только извращений не напридумывают лишь бы как в бейсике не писать:
      For counter = start To end [Step step]
      Ответить
      • Каких только извращений не напридумывают, лишь бы на Бейсике не писать.
        Ответить
    • Я кое-что вспомнил из другого языка:
      http://php.net/manual/ru/language.generators.overview.php

      В Свифте stride создаёт компактный генератор или тупо массив, поглощающий память, как range в PHP?
      Ответить

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