Какой из этих двух фрагментов кода лучше

#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 полезную семантическую ценность.