#рефакторинг #запахи_кода ![[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]]