Відокре́млення ме́тоду () - прийом рефакторингу, що дозволяє розбити код на дрібніші та зрозуміліші частини, прибрати дублювання коду і полегшити подальшу роботу з ним.

Проблема Є фрагмент коду (C#), який можна згрупувати. void PrintOwing() { List<Order> orders = orders.Elements; double outstanding = 0.0; // print owings foreach (Order order in orders)

outstanding += order.GetAmount();

// print details Console.WriteLine("name: " + name); Console.WriteLine("amount: " + outstanding); }

Рішення Перенести ці фрагменти в нові методи (чи функції) і викликати замість старого коду. void PrintOwing() { double outstanding = GetOutstanding(); PrintDetails(outstanding); } void PrintDetails(double outstanding) { Console.WriteLine("name: " + name); Console.WriteLine("amount: " + outstanding); } double GetOutstanding() { List<Order> orders = orders.Elements; double outstanding = 0.0;

foreach (Order order in orders)

outstanding += order.GetAmount();

return outstanding; }

Причини рефакторингу Чим більше коду в методі, тим складніше розібратися в тому, що він робить. Це основна проблема, яку вирішує даний рефакторинг. Відокремлення методу не лише вбиває безліч запахів в коді, але й є одним з етапів безлічі інших рефакторингів. Переваги Покращує читабельність коду. Прибирає дублювання коду. Іноді код, винесений в метод, можна знайти і в інших місцях програми. У такому разі є сенс замінити знайдені ділянки коду викликом нового методу. Ізолює незалежні частини коду, зменшуючи імовірність помилок. (наприклад, з вини перепризначення не тієї змінної). Порядок рефакторингу Створити новий метод. Підібрати назву яка відображає суть того, що робитиме цей метод. Скопіювати фрагмент коду, що цікавить, в новий метод. Видалити цей фрагмент із старого місця і замінити викликом нового методу. Знайти усі змінні, які використовувалися в цьому фрагменті коду. Якщо вони були оголошені всередині цього фрагменту і не використовуються поза ним, залишити їх без змін — вони стануть локальними змінними нового методу. Якщо змінні оголошені перед ділянкою коду, то їх слід передати в параметри нового методу, щоб використати значення, які в них знаходилися раніше. Іноді від таких змінних простіше позбавитися за допомогою заміни змінних викликом методу. Якщо локальна змінна якось змінюється у ділянці коду, це може означати, що її змінене значення знадобиться далі в основному методі, якщо це дійсно так, то значення цієї змінної слід повернути в основний метод.

Анти-рефакторинг Вбудовування методу

Схожі рефакторинги Переміщення методу

Допомагає іншим рефакторингам Заміна параметрів об'єктом Створення шаблонного методу Параметризація методу

Бореться з запахом Дублювання коду Довгий метод Заздрісні функції Оператори switch Ланцюжок викликів Коментарі Клас даних Див. також Розщеплення змінної

Посилання Extract Method Відокремлення методу Extract Method