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

    +115

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    var model = Service.GetPlanGatheringIndicators(periodId).ToList();
    ViewData["PeriodName"] = Service.GetPeriods().Where(p => p.Id == periodId).Select(p => p.TextAlias).FirstOrDefault();
    var leafEls = model.Where(x => x.HasChildren == false);
    var leafEl = (leafEls.Count() > 0) ? leafEls.First() : null;
    ViewData["PlanActivated"] = ((leafEl != null) && (leafEl.PlanActivate == true)
    		                             && (leafEl.PredictActivate == true)
    		                             && (leafEl.FactActivate == true));

    Вот в таком чудесном виде и лежит, ожидая рефактора и форматирования.

    Запостил: fr0mrus, 22 Февраля 2011

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

    • хорошее спагетти
      Ответить
    • удивительно как человек (ну или кто он там), использующий лямбды может сравнивать с true
      Ответить
      • использование лямд уже давно не является признаком наличия интеллекта

        тем более C# движется к званию лучшего средства для ликвидации ума, скоро даже пхп потеснит
        Ответить
        • трудно найти компромисс между возможностями языка и писать на нем глупости. Шарп с версии 2 начинает поощрять стрельбу по ногам
          Ответить
          • Да потому что всё ориентируются на сишников, которым если без стрельбы по ногам - значит не Ъ.
            А компромисс уже в 83 нашли, Ада называется. И по ноге хрен стрельнешь (хотя тоже можно, если сказать "это ружьё, которое стреляет именно по ногам, да я хочу именно такой ружьё, теперь я из него стреляю, и именно по ноге."), и возможностей больше, чем в С++.
            Ответить
            • вот я ща изучаю Руби, так вот что могу сказать: такой стрельбы по ногам я еще не видел. Если даже для чисел можно арифметические операции ПЕРЕОПРЕДЕЛИТЬ... То есть буквально парой строчек можно любую до этого работавшую как часы прогу сделать неработающей. Мало того - причину хрен выловишь, если вдруг, например, 2*2==5
              Ответить
              • В Аде тоже можно. Даже если оба аргумента - стандартные типы. Правда, это только внутри модуля работать будет, если хочешь использовать операцию из другого подключённого модуля - так и напиши.
                Ответить
                • я думаю, более корректным решением языка было бы запрещение перегружать методы и операторы встроенных типов (таких, как числа или строки), а также стандартных функций, поскольку стандартная реализация должна быть корректна по определению, и нет причин переопределять это поведение.
                  Я понимаю, что разумное переопределение могло бы существовать, например, для дополнительной обработки ошибок, но для этого должны существовать другие способы это делать.
                  В данном случае (обработка ошибок), по-моему, определенно годится аспектно-ориентированный подход
                  Ответить
                • К слову, в С++ запрещено переопределение операторов для стандартных типов. А в Аде можно?
                  Тогда для языка Ада Ваши слова не подходят:
                  >И по ноге хрен стрельнешь
                  Ответить
                  • Я говорю, это будет работать только в пределах одного модуля. Так что по ноге стрельнуть надо постараться. На самом деле время между получением компилирующегося и работающего кода в Аде сокращено до предела.
                    Ответить
    • Не вижу никакого спагетти, можно немного переписать, убрав лишние переменные
      ViewData["PeriodName"] = Service.GetPeriods().Where(p => p.Id == periodId).Select(p => p.TextAlias).FirstOrDefault();
      var leafEl = Service.GetPlanGatheringIndicators(periodId).ToList().Where(x => !x.HasChildren).FirstOrDefault();
      ViewData["PlanActivated"] = ((leafEl != null) && leafEl.PlanActivate  && leafEl.PredictActivate  && leafEl.FactActivate);
      Ответить
    • я понял, # это стилизованное изображение переплетающихся макаронин (кубизм?)
      Ответить

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