Рефакторинг возврата true и false из ветвления


Исходный код

isRegKeyRequired = distKey == null ? false : distKey.equals("yes") ? true : false;

Что не так в исходном коде

Всегда нужно помнить, что логические операции сравнения уже сами по себе дают результат в виде true или false. Поэтому не следует устраивать ветвление только для того, чтобы явно указать, что результатом будет true или false — нужно использовать само логическое выражение без ветвления.

Примеры рефакторинга исходного кода

Чуть-чуть поменяв проверку distKey и убрав ненужное ветвление, получаем:

isRegKeyRequired = distKey != null && distKey.equals("yes");

Этот приём основан на свойстве оператора &&: правая часть не будет вычисляться, если левая часть ложная, потому что в целом результат логического И ложный, если хотя бы один операнд ложный, проверять второй операнд нет смысла.

Количество проверок можно ещё больше сократить:

isRegKeyRequired = "yes".equals(distKey);

Теперь проверкой наличия значения в distKey будет заниматься метод equals.