1. Java / Говнокод #4159

    +95

    1. 1
    2. 2
    3. 3
    4. 4
    result = result == 0 ? tempResult
                            : (tempResult == 0 ? result
                            : (result == tempResult ? result : result
                            * tempResult));

    Запостил: utinger, 02 Сентября 2010

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

    • без 100 грамм не разберешься
      Ответить
    • 100 грамм внутри. моя твоя не понимай
      Ответить
    • 9 граммов в сердце....
      Ответить
    • Если одно из них ноль, то вернуть другое.
      Если они равны, то вернуть любое.
      Если не равны, то вернуть произведение.
      А для чего такая функция?
      Ответить
    • твоюмать....
      Ответить
    • Это часть compare метода для сортировки таблицы по столбцам. Сначала сортируем по первому столбцу, потом по второму и тд. tempResult
      это результат сравнения двух ячеек по i-му столбцу а result это общий результат. Если по какому то столбцу уже было возвращено 1 то оно не меняется. задумка в этом
      Ответить
      • Так надо bool тогда использовать.
        В итоге получим: result = result || tempResult;
        Если не ошибся в расчетах.
        Ответить
        • Угу. До умножения тут тогда дело не доходит.
          Ответить
          • Тем более что умножение используется в булевском контексте, т.е. логическое "И".
            Ответить
            • Так нам же тут интересно три значения -1, 0, 1
              Ответить
              • Тогда
                if (result < 0 || tempResult < 0) result = -1;
                else result |= tempResult;
                (Читаемость тут тоже под вопросом)
                Ответить
    • вот такие вот деятели невольно формируют мнение, что тернарные операторы - зло
      Ответить
      • Просто здесь уже тер-тер-тернарный оператор. А это действительно зло.
        Ответить
    • Более полная версия:

      result = compareFields(c1, c2, field);
      
      for (int nextField = field + 1; nextField <= END_TIME; nextField++) {
                  if (result != 0) {
                      return result;
                  } else {
                      tempResult = compareFields(c1, c2, nextField);
                      result = result == 0 ? tempResult
                              : (tempResult == 0 ? result
                              : (result == tempResult ? result : result
                              * tempResult));
                  }
      }


      Оказывается это все можно вообще упроситить
      for (int nextField = field + 1; nextField <= END_TIME; nextField++) {
                  if (result != 0) {
                      return result;
                  } else {
                  	result = compareFields(c1, c2, fieldFromBegin);
                  }
      }


      Другими словами
      result  = tempResult;

      Ответить

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