1. C# / Говнокод #7085

    +109

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    if (File.Exists(local)) {
                        if (Connect()) {
                            if (ftpConnection.Exists(remote)) {
    //code
                            }
                        }
                    }

    Запостил: Irdis, 27 Июня 2011

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

    • Как же, по вашему, это должно выглядеть?
      Ответить
      • Очевидное первое предположение:
        if (File.Exists(local) && Connect() && ftpConnection.Exists(remote)) { ... }
        Ответить
        • Это не повод суда постить этот говнокод. Уныло.

          >Connect() && ftpConnection.Exists(remote)
          В C# условия в if'е в каком порядке выполняются?
          Если Connect() поднимает соединение в ftpConnection, то я бы не стал писать и надеяться, что условия выполнятся в правильном порядке.
          Ответить
          • как угодно, блин, выполняются
            сначала первое потом последние...
            а вот из-за таких неуверенных как вы приходиться любоваться
            }}}}}}}}} бесит же
            Ответить
          • Условие в ифе выполняется в порядке, установленном приоритетами операций, использованных в данном ифе.
            В данном случае выполнение будет осуществляться слева направо.
            Ответить
            • >В данном случае выполнение будет осуществляться слева направо.
              В том же си или с++ в старом стандарте это будет не так
              Ответить
              • а как? желательно с примерчиком.
                Ответить
              • Это неправда. Ленивость &&, || и ?: гарантирована языком.
                Ответить
              • Ваш пост расстраивает Sequence Points (а им поболе 10 лет уже, или речь об ооочень старом стандарте?).
                Ответить
            • Приоритет тут совершенно ни при чём. Приоритет заканчивается на этапе синтаксического разбора.

              А играет роль — ленивость операторов.
              Ответить
          • Плюсом, как я понимаю, вычисления ленивые (спасибо местным, что научили правильно выражаться).
            Ответить
            • Текущий говнокод (Current) не менее ленивый, чем во втором комменте
              Ответить
              • Зато чего стоят операторные скобки в курренте.
                Ответить
                • >(Current)
                  >Текущий говнокод
                  Написал, что-бы не подумал кто чего...
                  Ответить
    • Очень напоминает C1 в ЕГЭ по информатике (исправить ошибку) =)
      Ответить
      • Там обычно надо поправить ошибку в проверке на принадлежность точки к некоторому отсечённому куску графика.
        И что самое интересное, написанный тобой код на бумажке они сравнивают с неким "эталоном".
        Интересно мне посмотреть на этот эталон...

        P.S.: Да, я сдавал эту хуиту.
        Ответить
    • ИМХО загонять кучу логики в один оператор - тот ещё говнокод, особенно, когда потом приходится добавлять параметры в функции - условия IF'ов разразастаются в кучу строк. Many if vs compex condition в данном случае есть холивар. Помнится, когда появился LINQ все тоже увлеклись засовыванием безумной логики в один запрос. Ничего, первое же сопровождение эту привычку отбило: стали временные переменные создавать.

      Что мне здесь реально не нравится, это мутная функция Connect() и поле ftpConnection. Как бы не очевидно, куда Connect() и что ftpConnection != null, например. Короче тут явно нужен рефакторинг.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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