56 lines
3.5 KiB
Markdown
56 lines
3.5 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[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]] |