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

    +963

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    private void SetStat(QALog stat, ArtIntLnkLog log)
        {
            stat.AllLinks += 1;
            if (log.Command == 5)
                stat.ErrLinks += 1;
            if (log.Command == 1)
                stat.SetLinks += 1;
            if (log.Command == 2)
                stat.ReSetLinks += 1;
        }

    Такое вот чудное обновление статистики, где константы, switch и инкрементация непонятно.

    Запостил: f5f3e9, 31 Августа 2011

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

    • плюс еще процедурное программирование
      Ответить
      • Я C# не знаю, но что-то мне подсказывает, что нет тут никакого процедурного программирования ибо
        private void SetStat

        Или си-шарпщики настолько суровые, что модификаторы уровня доступа к функции пишут вне зависимости от того, class-member ли это или просто библиотечная функция?
        Ответить
        • модификаторы доступа еще не показатель. А намекают два параметра, передаваемые в метод. Ибо, предполагаю, что эти аргументы нечасто меняются, а то и вовсе существуют в приложении в единственном экземпляре. Если так, то их надо вынести в поля. А таскание за собой глобальных объектов по всему стеку вызовов - тяжелое наследие именно процедурного стиля.

          впрочем, это все ИМХО, потому что проекта я в глаза не видел -- может, так и нужно
          Ответить
    • вообще надо было свойством сделать
      Ответить
    • Цэ шо, не инкрементация чтоли?

      stat.ReSetLinks += 1;


      Или Си-шарпщики настолько суровые, что инкрементацией только оператор ++ называют?
      c++
      Ответить
      • Может так?
        stat.AllLinks += 1;
        stat.ErrLinks += log.Command == 5 ? 1 : 0;
        stat.SetLinks += log.Command == 1 ? 1 : 0;
        stat.ReSetLinks += log.Command == 2 ? 1 : 0;
        Ответить
        • Думаю пока так сойдёт:
          private enum Commands : int { Unknown = -1, SetLink = 1, ResetLink = 2, Hz1 = 3, Hz2 = 4, Error = 5};

          private static void SetStat(QALog stat, ArtIntLnkLog log)
          {
          switch((Commands)log.Command)
          {
          case Commands.Error:
          stat.ErrLinks ++; break;
          case Commands.SetLink:
          stat.SetLinks ++; break;
          case Commands.ResetLink:
          stat.ReSetLinks ++; break;
          }
          stat.AllLinks++;
          }
          Ответить
          • Зачем приведение? log.Command должен быть типа Commands.
            И можно было бы *Links в виде массива оформить, чтобы stat.Links[log.Command]++;
            Тогда вообще switch не нужен.
            Ответить
            • Должна, но там много чего переписывать придётся, это только фрагмент...
              Ответить
    • Мне кажется, передача ID команды и switch по нему в объектно-ориентированном языке чревата потерей концепции.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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