Вложенные операторы IF-ELSE могут усложнить их из-за различных путей выполнения и результатов функции Анкет Потеря производительности и введение ошибок из -за недопонимания могут быть результатом.
Рефакторинг ” заменить вложенные условные с помощью охраны ” из книги Мартина Фаулера ” Рефакторинг – Улучшение дизайна существующего кода (2 -е издание) “Может помочь в этих ситуациях.
A охраняемая пункт Проверяет условие и возвращает из функции, если условие верно, потенциально делает некоторые вычисления и возвращая результат. Это облегчает рассуждение о функции, рано заканчивая один путь выполнения.
Вот примерная функция (от заменить вложенные условные с помощью охраны , Мартин Фаулер) перед рефакторией:
function getPayAmount() {
let result;
if (isDead)
result = deadAmount();
else {
if (isSeparated)
result = separatedAmount();
else {
if (isRetired)
result = retiredAmount();
else
result = normalPayAmount();
}
}
return result;
}
В этом примере три вложенных оператора IF-ELSE проверяют различные условия (например, isseparated ) и обновить переменную результат Анкет Переменная возвращается в конце функции.
Цель состоит в том, чтобы реорганировать функцию в следующую версию:
function getPayAmount() {
if (isDead) return deadAmount();
if (isSeparated) return separatedAmount();
if (isRetired) return retiredAmount();
return normalPayAmount();
}
Рефакторированная функция использует охраняющие положения вместо вложенных операторов IF-ELSE. Переменная результат больше не требуется и был удален. Рефакторированный код легче понять, поскольку существует меньше состояния (без переменной), и каждый путь выполнения возвращается рано.
Как оригинальная функция может быть рефакторирована шаг за шагом?
Вы можете упростить исходный код, применив два рефакторирования к каждому условию:
- Встроенный возврат Преобразует задание переменной в оператор возврата. Такое преобразование возможно, когда следующее оператор после назначения в потоке управления возвращает переменную.
- Преобразовать IF-ELSE в охрану изменяет оператор IF-ELSE с возврат
Заявления внутри, чтобы охранять пункты, удаляя отступление вокруг блока.
Вы можете выполнить эти шаги вручную или с автоматизацией. P42 JavaScript Assistant для VS -кода является инструментом рефакторинга, который поддерживает обе операции. P42 указывает возможности улучшения с Blue Squiggly подчеркивается. При автоматизации рефакторинга код может быть улучшен за считанные секунды Анкет После окончательного шага форматирования функция была переработана в упрощенной версии.
Вот как рефакторирование кода выглядит в коде VS с P42:
Рефакторинг необходим для поддержания здоровой кодовой базы, и многие небольшие улучшения имеют большое значение. Внедряя охранники, вы часто можете упростить вложенные операторы IF-ELSE и сделать свою кодовую базу немного лучше.
Счастливого рефакторинга!
Оригинал: “https://dev.to/p42/javascript-refactoring-in-action-replace-nested-if-else-with-guards-41nl”