Исходный код
boolean is_admin;
// something
Boolean b=new Boolean( is_admin );
if( b.toString().length() == 4 ) {
// something...
}
Что не так в этом коде
В этом коде вместо непосредственной проверки значения переменной произведено два лишних преобразования.
Такие финты ушами наблюдаю более-менее регулярно. Подозреваю, что они происходят от незнания факта, что аргументом оператора if
является значение типа boolean
, и если у нас есть переменная типа boolean
, то мы можем передавать её в оператор if
непосредственно.
Чем плохи лишние преобразования? Тут сразу два ответа.
- Лишние преобразования расходуют память и процессорное время. Если такое преобразование выполняется однократно, то его влияние можно не учитывать, а если оно находится в цикле на миллион итераций — то лучше так не делать.
- Преобразование «зашифровывает» операцию, скрывает её смысл и цель. В результате прочтение кода становится более долгим и напряжённым: сначала надо расшифровать смысл, а потом держать в уме результат расшифровки, что тоже на самом деле требует усилий.
Хотя возможен также вариант, что все эти случаи относятся к индусскому коду, который оплачивается по строкам, то есть, чем больше строк — тем лучше.
Как надо было делать
boolean is_admin;
// something
if( is_admin ) {
// something...
}
Теория
- Ребусы в коде