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

    +147

    1. 1
    2. 2
    3. 3
    static int getSign(final int num) {
        return (num < 0) ? -1 : (num > 0) ? 1 : 0;
      }

    лисапед, бо есть Math.signum()

    Запостил: Lure Of Chaos, 14 Мая 2011

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

    • Тернистый уже раза 2 появлялся.
      Ответить
    • Math.signum() не перегружен для int
      Ответить
      • intы нормально расширяются до floatов же
        Ответить
        • Но возвращаемое значение обратно не сужается же!

          Таким образом когда нужно реализовывать сортировку с кастомным компаратором, то приходится делать

          int compare(int i, int j) {
              return (int) Math.signum(x[i] - x[j]);
          }

          vs
          int compare(int i, int j) {
              return x[i] < x[j] ? -1 : x[i] > x[j] ? 1 : 0;
          }


          Оба варианта выглядят не ахти, к тому же в первом варианте произойдут чудеса при переполнении. А всё потому, что не сделали нормальный Math.compare() для примитивных типов и .compareTo() для boxed объектов.

          По теме: использовать
          Math.<double>signum()
          , когда аргументы имеют тип int - это как-то из пушки по воробьям. Более того, привыкнув так делать вы начнёте делать то же самое с long (то бишь с int64), а там и до <s>беды</s> потери точности недалеко.
          Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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