#рефакторинг #методы_рефакторинга ![[Pasted image 20250207084707.png]] ### **Проблема** У вас есть несколько условных операторов, ведущих к одинаковому результату или действию. ```typescript disabilityAmount(): number { if (seniority < 2) { return 0; } if (monthsDisabled > 12) { return 0; } if (isPartTime) { return 0; } // Compute the disability amount. // ... } ``` ### **Решение** Объедините все условия в одном условном операторе. ```typescript disabilityAmount(): number { if (isNotEligibleForDisability()) { return 0; } // Compute the disability amount. // ... } ``` ### **Причины рефакторинга** Код содержит множество чередующихся операторов, которые выполняют одинаковые действия. Причина разделения операторов неочевидна. Главная цель объединения операторов — извлечь условие оператора в отдельный метод, упростив его понимание. ### **Достоинства** - Убирает дублирование управляющего кода. Объединение множества условных операторов, ведущих к одной цели, помогает показать, что на самом деле вы делаете только одну сложную проверку, ведущую к одному общему действию. - Объединив все операторы в одном, вы позволяете выделить это сложное условие в новый метод с названием, отражающим суть этого выражения. ### **Порядок рефакторинга** Перед тем как осуществлять рефакторинг, убедитесь, что в условиях операторов нет «побочных эффектов», или, другими словами, они не модифицируют что-то, а только возвращают значения. Побочные эффекты могут быть и в коде, который выполняется внутри самого оператора. Например, по результатам условия, что-то добавляется к переменной. 1. Объедините множество условий в одном с помощью операторов и и или. Объединение операторов обычно следует такому правилу: 1. Вложенные условия соединяются с помощью оператора и. 2. Условия, следующие друг за другом, соединяются с помощью оператора или. 2. [[Извлечение функции (Extract Function)|Извлеките метод]] из условия оператора и назовите его так, чтобы он отражал суть проверяемого выражения. ### **Борется с запахом** - [[Дублируемый код]] ### **Ссылки** - https://refactoring.guru/ru/consolidate-conditional-expression - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]