Об'єднання умовних операторів
Проблема
У вас є декілька умовних операторів, що ведуть до однакового результату або дії.
Рішення
Об’єднайте всі умови в одному умовному операторі.
double disabilityAmount() {
if (seniority < 2) {
return 0;
}
if (monthsDisabled > 12) {
return 0;
}
if (isPartTime) {
return 0;
}
// Compute the disability amount.
// ...
}
double disabilityAmount() {
if (isNotEligibleForDisability()) {
return 0;
}
// Compute the disability amount.
// ...
}
double DisabilityAmount()
{
if (seniority < 2)
{
return 0;
}
if (monthsDisabled > 12)
{
return 0;
}
if (isPartTime)
{
return 0;
}
// Compute the disability amount.
// ...
}
double DisabilityAmount()
{
if (IsNotEligibleForDisability())
{
return 0;
}
// Compute the disability amount.
// ...
}
function disabilityAmount() {
if ($this->seniority < 2) {
return 0;
}
if ($this->monthsDisabled > 12) {
return 0;
}
if ($this->isPartTime) {
return 0;
}
// compute the disability amount
...
function disabilityAmount() {
if ($this->isNotEligibleForDisability()) {
return 0;
}
// compute the disability amount
...
def disabilityAmount():
if seniority < 2:
return 0
if monthsDisabled > 12:
return 0
if isPartTime:
return 0
# Compute the disability amount.
# ...
def disabilityAmount():
if isNotEligibleForDisability():
return 0
# Compute the disability amount.
# ...
disabilityAmount(): number {
if (seniority < 2) {
return 0;
}
if (monthsDisabled > 12) {
return 0;
}
if (isPartTime) {
return 0;
}
// Compute the disability amount.
// ...
}
disabilityAmount(): number {
if (isNotEligibleForDisability()) {
return 0;
}
// Compute the disability amount.
// ...
}
Причини рефакторингу
Код містить безліч операторів, що чергуються і виконують однакові дії. Причина розділення операторів неочевидна.
Головна мета об’єднання операторів — відокремити умову оператора в окремий метод, спростивши його розуміння.
Переваги
-
Прибирає дублювання управляючого коду. Об’єднання безлічі умовних операторів, що ведуть до однієї мети, допомагає показати, що насправді ви робите тільки одну складну перевірку, що веде до однієї спільної дії.
-
Об’єднавши усі оператори в одному, ви зможете виділити цю складну умову в новий метод з назвою, що відображає суть цього виразу.
Порядок рефакторингу
Перш ніж здійснювати рефакторинг, переконайтеся, що в умовах операторів немає «побічних ефектів», або, іншими словами, ці умови не модифікують щось, а тільки повертають значення. Побічні ефекти можуть бути і в коді, який виконується усередині самого оператора. Наприклад, за результатами умови, щось додається до змінної.
-
Об’єднайте декілька умов в одному за допомогою операторів
і
таабо
. Об’єднання операторів зазвичай робиться за таким правилом:-
Вкладені умови з’єднуються за допомогою оператора
і
. -
Умови, які йдуть одна за одною, з’єднуються за допомогою оператора
або
.
-
-
Відокремте метод від умови оператора і назвіть його так, щоб він відображав суть виразу, який перевірявся.