Складання методів
Значна частина рефакторинга присвячується правильному складанню методів. У більшості випадків, коренем усіх зол є занадто довгі методи. Хитросплетіння коду всередині такого методу приховують логіку виконання і роблять метод вкрай складним для розуміння, а значить і для змін.
Рефакторинги цієї групи покликані зменшити складність всередині методу, прибрати дублювання коду і полегшити подальшу роботу з ним.
Проблема: У вас є фрагмент коду, який можна згрупувати.
Рішення: Виділіть цей фрагмент в новий метод (чи функцію) і викличте його замість старого коду.
Проблема: Варто використовувати у випадках, коли тіло методу очевидніше за сам метод.
Рішення: Замініть виклики методу його вмістом і видаліть сам метод.
Проблема: У вас є складний для розуміння вираз.
Рішення: Помістіть результат виразу або його частини в окремі змінні, що пояснюють суть виразу.
Проблема: У вас є локальна змінна, якій присвоюється результат простого виразу (і більше нічого).
Рішення: Замініть звернення до змінної цим виразом.
Проблема: Ви розміщуєте результат якогось виразу в локальній змінній, щоб використати її далі в коді.
Рішення: Виділіть цей вираз в окремий метод і повертайте результат з нього. Замініть використання вашої змінної викликом методу. Новий метод може бути використаний і в інших методах.
Проблема: У вас є локальна змінна, яка використовується для зберігання різноманітних значень всередині методу (не рахуючи змінних циклів).
Рішення: Використайте різні змінні для різних значень. Кожна змінна повинна відповідати тільки за одну певну річ.
Проблема: Параметру методу присвоюється якесь значення.
Рішення: Замість параметра скористайтеся новою локальною змінною.
Проблема: У вас є довгий метод, в якому локальні змінні так сильно переплетені, що це робить неможливим застосування відокремлення методу.
Рішення: Перетворіть метод в окремий клас так, щоб локальні змінні стали полями цього класу. Після цього можна без проблем розділити метод на частини.
Проблема: Ви хочете замінити існуючий алгоритм іншим?
Рішення: Замініть тіло методу, що реалізує старий алгоритм, новим алгоритмом.