42 lines
1.5 KiB
Markdown
42 lines
1.5 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20250131092246.png]]
|
||
|
||
### **Проблема**
|
||
Циклы, которые решают одновременно разные задачи только потому, что они могут сделать это за один проход цикла
|
||
```javascript
|
||
let averageAge = 0;
|
||
let totalSalary = 0;
|
||
for (const p of people) {
|
||
averageAge += p.age;
|
||
totalSalary += p.salary;
|
||
}
|
||
averageAge = averageAge / people.length;
|
||
```
|
||
|
||
### **Решение**
|
||
Разделение цикла может облегчить его использование
|
||
```javascript
|
||
let totalSalary = 0;
|
||
for (const p of people) {
|
||
totalSalary += p.salary;
|
||
}
|
||
|
||
let averageAge = 0;
|
||
for (const p of people) {
|
||
averageAge += p.age;
|
||
}
|
||
averageAge = averageAge / people.length;
|
||
```
|
||
|
||
### **Причины рефакторинга**
|
||
Разделение цикла также может облегчить его использование. Цикл, который
|
||
вычисляет одно значение, может просто его вернуть. Циклы, которые решают
|
||
много задач, должны возвращать структуры или заполнять локальные переменные.
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Скопируйте цикл
|
||
2. Определите и устраните дублирующиеся побочные действия
|
||
|
||
### **Ссылки**
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |