Длинный метод
Симптомы и признаки
Метод содержит слишком большое число строк кода. Длина метода более десяти строк должна начинать вас беспокоить.
Причины появления
В метод всё время что-то добавляется, но ничего не выносится. Так как писать код намного проще, чем читать, этот запах долго остаётся незамеченным — до тех пор пока метод не превратится в настоящего монстра.
Стоит помнить, что человеку зачастую ментально сложнее создать новый метод, чем дописать что-то в уже существующий: «Как же, мне нужно добавить всего две строки, не буду же я создавать для этого целый метод».
Таким образом, добавляется одна строка за другой, а в результате метод превращается в большую тарелку спагетти.
Лечение
Следует придерживаться такого правила: если ощущается необходимость что-то прокомментировать внутри метода, этот код лучше выделить в новый метод. Даже одну строку имеет смысл выделить в метод, если она нуждается в разъяснениях. К тому же, если у метода хорошее название, то не нужно будет смотреть в его код, чтобы понять, что он делает.
-
Для сокращения тела метода достаточно применить извлечение метода.
-
Если локальные переменные и параметры препятствуют выделению метода, можно применить замену временной переменной вызовом метода, замену параметров объектом и передачу всего объекта.
-
Если предыдущие способы не помогли, можно попробовать выделить весь метод в отдельный объект с помощью замены метода объектом методов.
-
Условные операторы и циклы свидетельствуют о возможности выделения кода в отдельный метод. Для работы с условными выражениями подходит декомпозиция условных операторов. Для работы с циклом — извлечение метода.
Выигрыш
-
Из всех видов объектного кода дольше всего выживают классы с короткими методами. Чем длиннее ваш метод или функция, тем труднее будет её понять и поддерживать.
-
Кроме того, в длинных методах зачастую можно обнаружить «залежи» дублирования кода.
Производительность
Многие волнуются, что увеличение числа методов может плохо сказаться на производительности. В абсолютном большинстве случаев, это не является реальной проблемой, так что просто перестаньте об этом думать.
Имея чистый и понятный код, вы с большей вероятностью натолкнётесь на отличный способ реструктуризировать код программы и увеличить реальную производительность, если такая надобность вообще будет.