Довгий метод
Симптоми і ознаки
Метод містить занадто багато коду. Довжина методу більше десяти рядків повинна починати вас турбувати.
![](/images/refactoring/content/smells/long-method-01.png?id=ba3b4a6d8ef25a8f676543cee5e1e019)
Причини появи
В метод весь час щось додається, але нічого не виноситься. Оскільки писати код набагато простіше, ніж читати, цей запах довго залишається непоміченим — аж поки метод не перетвориться на справжнього монстра.
Варто пам’ятати, що людині ментально складніше створити новий метод, ніж дописати щось у вже існуючий: «Мені потрібно додати всього два рядки, не буду ж я створювати заради цього цілий метод».
Таким чином додається один рядок за іншим, внаслідок чого метод перетворюється на велику тарілку спагеті.
Лікування
Слід дотримуватися такого правила: якщо відчувається необхідність щось прокоментувати всередині методу, цей код краще виділити в новий метод. Навіть один рядок має сенс виділяти в метод, якщо він потребує роз’яснень. До того ж, якщо метод має гарну назву, то не потрібно буде дивитися в код заради розуміння, що ж він робить.
![](/images/refactoring/content/smells/long-method-02.png?id=274350a92b305ae79848ab40b3bdb0cb)
-
Для скорочення тіла методу досить застосувати відокремлення методу.
-
Якщо локальні змінні і параметри перешкоджають виділенню методу, можна застосувати заміну тимчасової змінної викликом методу, заміну параметрів об’єктом і передачу всього об’єкта.
-
Якщо і вони не допомогли, можна спробувати виділити весь метод в окремий об’єкт за допомогою заміни методу об’єктом методів.
-
Умовні оператори і цикли свідчать про можливість виділення коду в окремий метод. Для роботи з умовними виразами підійде декомпозиція умовних операторів. Для роботи з циклом — відокремлення методу.
Виграш
-
З усіх видів об’єктного коду найкраще виживають класи з короткими методами. Чим довше ваш метод або функція, тим важче буде її зрозуміти і підтримувати.
-
Крім того, в довгих методах найчастіше зустрічаються «поклади» дублювання коду.
![](/images/refactoring/content/smells/long-method-03.png?id=82ce2d388aa14bdae4e8f62b875f0259)
Швидкодія
Багато хто хвилюється, що збільшення числа методів може погано позначитися на швидкодії програми. В абсолютній більшості випадків це не є реальною проблемою, а тому — досить про це хвилюватися!
Маючи чистий і зрозумілий код, ви з більшою вірогідністю побачите класний варіант реструктуризації коду програми і збільшення реальної продуктивності.