#java
#java
Вопрос:
//first
if(num % 2 == 0 ) {
isEven = true;
}
//second
isEven = (num %2 == 0);
Что лучше всего сделать, и является ли первый случай случаем запаха кода?
Комментарии:
1. Никогда не переходите, когда назначения будет достаточно.
2. Никогда не переходите, когда будет достаточно /читаемого, поддерживаемого / присваивания. Просто добавляю это туда, потому что люди иногда доводят «жесткие правила» до крайности 🙂
3. Вы можете исключить круглые скобки —
isEven = num%2==0;
Ответ №1:
Они не делают одно и то же — если num
нечетно, первый оставляет isEven
свое предыдущее значение, второй устанавливает его false
равным .
Я бы:
- Попробуйте инициализировать переменную в момент объявления, а не изменять ее впоследствии.
- Обычно используйте вторую форму предпочтительнее первой.
Когда тело if
блока просто устанавливает переменную, и значение может быть выражено как некоторая простая модификация условия if
блока, и вы всегда хотите установить какое-то значение, я бы просто использовал простое присвоение.
То же самое касается return
операторов — я бы предпочел:
return (num % 2 == 0); // Or (num amp; 1 == 0)
чем
if (num % 2 == 0) {
return true;
} else {
return false;
}
Ответ №2:
Не зная ничего об окружающем контексте, эти две версии на самом деле отличаются по своей семантике.
Первая версия изменит только значение isEven
, если num
это четное число. Последняя версия всегда будет обновлять значение isEven
. Поэтому я бы определенно предпочел последнее, поскольку оно обеспечивает isEven
полезную семантическую ценность.