Исходный код
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
.