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

    +73

    1. 1
    progress = progress != null ? progress + "%" : progress;

    Да, давно я не смеялся...

    Запостил: raorn, 11 Августа 2010

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

    • Дали дураку тернарную операцию...
      Ответить
    • progress враппер что ли/
      Ответить
    • String -> String? тогда и правда гк.
      а так от progress = progress != null ? progress + "%" : null; не особо легче. ну или progress=String.format("%s%%",progress);

      а вообще выражения вида param=func(param); однозначно зло
      Ответить
      • > а вообще выражения вида param=func(param); однозначно зло
        index = next( index ); // Зло ? Готов не согласиться.
        Ответить
        • в этом случае не так все плохо, потому что индекс индексом и остается, его семантика не изменяется. но даже здесь лучше так:
          void next() {this.index++;} c последующим next()

          а если семантика меняется, то лучше
          result=work(data);

          конкретно, в сабже, progress справа был просто количеством, к примеру "50", а стал "50%" - стрингом для отображения.
          вы же не будете спорить, что, допустим, 1 != 1 руб
          Ответить
          • Было сказано "однозначно зло". Я показал, что не всё так однозначно.
            void next() {this.index++;} - ничем не лучше. Потому что теряем старое значение.
            И нельзя написать other = next( index );
            Кто сказал, что progress это кол-во ?
            Я конечно не спец в java, но насколько мне известно, типизация данных в нем статическая.
            Стало быть, если progress был целым, то строкой он никогда не станет.
            Ответить
            • он был сторокой. И судя по % -- в нем хранили число. В строке. Это -- мегаговнокод.


              Кстати, в джаве есть типизация и статическая и динамическая. Джава насквозь типизированная)
              Ответить
            • > Было сказано "однозначно зло" - держа в уме тот контекст, что меняется смысл переменной.
              index = next( index ); // здесь смысл не меняется, но присутствует избыточность
              other = next( index ); // здесь все в порядке, потому что присваиваем другой пер.

              > Стало быть, если progress был целым
              то сабж не скомпилится. стало быть, он был строкой с числовым значением
              не знаю уж, почему он не число, может Object значение из контрола получили и скастовали getValue().toString()
              теперь глянем
              на ситуевину после сабжа: в progress у нас стринг, и вот надо нам для расчета получить число. делаем Integer.parseInt(progress) и сваливаемся в NumberFormatException, потому что мы позабыли о знаке процента.

              вывод: если вам нужно число, заведите себе числовую переменную, ну скажем double progress. как понадобится строка с процентом - заводите строковую, String progressView.
              иначе, через строчек 10 у вас возникнет вопрос: а в каком формате у меня тут progress - с процентом или без? добавлять еще или нет? если вопроса не возникнет, получите баг.
              поэтому - param=func(param); однозначно зло
              Ответить
              • МУТАБЕЛЬНЫЕ ПЕТУШКИ МЕРЯЮТСЯ ПЕРЕМЕННЫМИ
                Ответить
                • Вот я не читал ветку, а жирный шрифт тут раз! -- и привлек внимание. Такой ахуй словил.
                  Ответить
                  • Чем меньше человек из себя представляет, тем громче он орет.
                    Ответить
                    • Я про то, что на первый взгляд ржачная фраза.

                      ЗЫ: Закралось подозрение после чтений: може дениска-то наш вебкиллов агент?
                      Ответить
        • процедурный подход детектед)
          Ответить
      • AtomicReference<Object> foo = new AtomicReference<Object>( null );
        ...
        bar = foo.getAndSet( bar );
        Ответить

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