36 lines
2.7 KiB
Markdown
36 lines
2.7 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[Pasted image 20241112221124.png]]
|
||
|
||
> Увидев одинаковые структуры кода в нескольких местах, можно быть уверенным, что если их удастся объединить, то программа от этого только выиграет. Дублирование означает, что каждый раз, когда вы читаете такие копии, вам необходимо внимательно проверять — нет ли между ними какой-либо разницы. Если вам нужно изменить дублированный код, вы должны найти и исправить каждую копию.
|
||
|
||
|
||
### **Признаки**
|
||
- Два фрагмента кода выглядят почти одинаковыми.
|
||
|
||
### **Причины появления**
|
||
- В проекте работает несколько человек, и не знают, что коллега уже написал похожий код, который можно использовать вместо написания своего
|
||
- Косвенное дублирование - когда конкретные участки кода отличаются внешне, хотя и выполняют одну и ту же задачу. Такое дублирование бывает довольно сложно обнаружить и исправить
|
||
- Намеренно, в спешке, когда поджимают сроки
|
||
- Программист просто слишком ленив, чтобы избавить код от дублирования
|
||
|
||
![[Pasted image 20241112221307.png]]
|
||
|
||
### **Рефакторинги**
|
||
- [[Извлечение функции (Extract Function)]]
|
||
- [[Перемещение инструкций (Slide Statements)]]
|
||
- [[Подъем метода (Pull Up Method)]]
|
||
|
||
### **Результат**
|
||
- Объединение дублирующего кода позволяет улучшить структуру кода и уменьшить его объём
|
||
- Упрощение и удешевление поддержки кода в будущем
|
||
|
||
![[Pasted image 20241112221342.png]]
|
||
|
||
|
||
### **Не стоит трогать, если...**
|
||
- В очень редких случаях объединение двух одинаковых участков кода может сделать код менее очевидным и понятным.
|
||
|
||
### **Ссылки**
|
||
- [https://refactoring.guru/ru/smells/duplicate-code](https://refactoring.guru/ru/smells/duplicate-code)
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |