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

    +71

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    public class ... {
    
    public Double toDoubleValue(String s){
    	Double value;
    	if (s!=""){
    		value = Double.valueOf(s);
    		return value;
    	}
    	else {
    		value = 0.00;
    		return value;
    	}
            ....
            toDoubleValue(row.getColumnValue(col.getId()).toString());
    }

    1. На null не проверяется
    2. Можно было тоже самое написать короче, не объявляя дополнительный метод, с помощью ?:

    Запостил: -EZ-, 02 Мая 2012

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

    • Забыл закрыть объявление метода...
      Ответить
    • Если метод часто используется - то он всяко лучше, чем тернарный оператор.
      Ответить
      • Метод часто используется ? Лучше : Хуже;
        Ответить
      • С чего бы это?
        Ответить
        • 1) Меньше копипаста в духе row.getColumnValue(col.getId()).toString () != "" ? Double.valueOf(row.getColumnValue(col.ge tId()).toString()) : 0.0.
          2) Легче исправлять баги - к примеру проверку на null, если она действительно понадобится, нужно будет добавлять только в одно место а не в каждый тернарный оператор.

          P.S. естественно если метод вызывался 1 раз - то тернарка лучше
          Ответить
    • Вообще, конечно надо было так:
      return s!="" ? Double.valueOf(s) : 0.0;
      Всё предельно ясно и без лишних переменных
      P.S. А row.getColumnValue() что возвращает?
      Ответить
      • Да, кто ж его знает, что там в БД (код не мой). Поэтому и нужны проверки.
        Ответить
    • s != ""

      меня одного такая проверка смущает?
      Ответить
      • Да, в теории может быть сюрприз :)
        Ответить
        • а почему в теории? я не особо знаком с драйверами бд, но где гарантия, что для пустых строк возвращается именно литерал "", а не новый instance строки, вроде new String(bytearray)?

          s.intern() != "" точно будет работать всегда, но очень быстро придет ООМ, при частых выборках разных данных
          Ответить
          • s.intern() ... пул интернированных строк вроде же не чистится никогда?
            Ответить
            • поэтому я и написал, что ООМ очень быстро придет при частых выборках. вообще строки не стоит сравнивать на != если нет 100% уверенности, что они интерированы
              Ответить
          • Ну, на jdbc это всё-же не похоже, скорее, на какую-то обёртку над ним. А там может быть всё, что угодно.
            Ответить
    • а еще может на запятой споткнуться, если локаль левая
      Ответить
      • +1
        Ответить
      • Еще одна причина все-таки запилить метод вместо тернарки в куче мест.
        Ответить
        • ежу понятно, что повторяющийся код надо оформлять в метод
          Ответить
    • А что equals уже отменили? Просто выходные были и я много спал...
      Ответить

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