---
title: "Длинный метод"
type: "code-smell"
slug: "long-method"
url: "http://localhost:3000/ru/smells/long-method.md"
category: "Раздувальщики"
description: "Метод содержит слишком большое число строк кода. Длина метода более десяти строк должна начинать вас беспокоить."
---
# Длинный метод

> Метод содержит слишком большое число строк кода. Длина метода более десяти строк должна начинать вас беспокоить.

## Signs and Symptoms

Метод содержит слишком большое число строк кода. Длина метода более десяти строк должна начинать вас беспокоить.

## Reasons for the Problem

В метод всё время что-то добавляется, но ничего не выносится. Так как писать код намного проще, чем читать, этот запах долго остаётся незамеченным — до тех пор пока метод не превратится в настоящего монстра.

Стоит помнить, что человеку зачастую ментально сложнее создать новый метод, чем дописать что-то в уже существующий: «Как же, мне нужно добавить всего две строки, не буду же я создавать для этого целый метод».

Таким образом, добавляется одна строка за другой, а в результате метод превращается в большую тарелку спагетти.

## Payoff

* Из всех видов объектного кода дольше всего выживают классы с короткими методами. Чем длиннее ваш метод или функция, тем труднее будет её понять и поддерживать.
* Кроме того, в длинных методах зачастую можно обнаружить «залежи» дублирования кода.

## Performance

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

Имея чистый и понятный код, вы с большей вероятностью натолкнётесь на отличный способ реструктуризировать код программы и увеличить реальную производительность, если такая надобность вообще будет.
## Relations

**Treated by**

- [Извлечение метода](/ru/extract-method.md)
- [Замена переменной вызовом метода](/ru/replace-temp-with-query.md)
- [Замена параметров объектом](/ru/introduce-parameter-object.md)
- [Передача всего объекта](/ru/preserve-whole-object.md)
- [Замена метода объектом методов](/ru/replace-method-with-method-object.md)
- [Разбиение условного оператора](/ru/decompose-conditional.md)

