---
title: "Дублирование кода"
type: "code-smell"
slug: "duplicate-code"
url: "http://localhost:3000/ru/smells/duplicate-code.md"
category: "Замусориватели"
description: "Два фрагмента кода выглядят почти одинаковыми."
---
# Дублирование кода

> Два фрагмента кода выглядят почти одинаковыми.

## Signs and Symptoms

Два фрагмента кода выглядят почти одинаковыми.

## Reasons for the Problem

В большинстве случаев дублирование возникает тогда, когда в проекте работает несколько человек, причём над разными его частями. Они работают над похожими задачами, но не знают, что коллега уже написал похожий код, который можно использовать вместо написания своего.

Встречается и косвенное дублирование, когда конкретные участки кода отличаются внешне, хотя и выполняют одну и ту же задачу. Такое дублирование бывает довольно сложно обнаружить и исправить.

В отдельных случаях дублирование создаётся намеренно. Зачастую, в спешке, когда поджимают сроки сдачи проекта. Начинающий программист видит в уже написанном коде фрагмент, выглядящий «почти так, как нужно» и не может устоять перед соблазном просто скопировать код куда-то в другое место (и так десяток раз).

А в самых запущенных случаях программист просто слишком ленив, чтобы избавить код от дублирования.

## Payoff

* Объединение дублирующего кода позволяет улучшить структуру кода и уменьшить его объём.
* Это, в свою очередь, ведёт к упрощению и удешевлению поддержки кода в будущем.
## Relations

**Treated by**

- [Извлечение метода](/ru/extract-method.md)
- [Подъём поля](/ru/pull-up-field.md)
- [Подъём тела конструктора](/ru/pull-up-constructor-body.md)
- [Создание шаблонного метода](/ru/form-template-method.md)
- [Замена алгоритма](/ru/substitute-algorithm.md)
- [Извлечение суперкласса](/ru/extract-superclass.md)
- [Извлечение класса](/ru/extract-class.md)
- [Объединение условных операторов](/ru/consolidate-conditional-expression.md)
- [Объединение дублирующихся фрагментов в условных операторах](/ru/consolidate-duplicate-conditional-fragments.md)

