Відокре́млення ме́тоду (англ. Extract Method) - прийом рефакторингу, що дозволяє розбити код на дрібніші та зрозуміліші частини, прибрати дублювання коду і полегшити подальшу роботу з ним.
Проблема
Є фрагмент коду (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 [ 19 лютого 2015 у Wayback Machine.]
- Відокремлення методу [ 14 грудня 2014 у Wayback Machine.]
- Extract Method [ 2 грудня 2014 у Wayback Machine.]
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Vidokre mlennya me todu angl Extract Method prijom refaktoringu sho dozvolyaye rozbiti kod na dribnishi ta zrozumilishi chastini pribrati dublyuvannya kodu i polegshiti podalshu robotu z nim ProblemaYe fragment kodu C yakij mozhna zgrupuvati void PrintOwing List lt Order gt 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 RishennyaPerenesti ci fragmenti v novi metodi chi funkciyi i viklikati zamist starogo kodu void PrintOwing double outstanding GetOutstanding PrintDetails outstanding void PrintDetails double outstanding Console WriteLine name name Console WriteLine amount outstanding double GetOutstanding List lt Order gt orders orders Elements double outstanding 0 0 foreach Order order in orders outstanding order GetAmount return outstanding Prichini refaktoringuChim bilshe kodu v metodi tim skladnishe rozibratisya v tomu sho vin robit Ce osnovna problema yaku virishuye danij refaktoring Vidokremlennya metodu ne lishe vbivaye bezlich ale j ye odnim z etapiv bezlichi inshih refaktoringiv PerevagiPokrashuye chitabelnist kodu Pribiraye dublyuvannya kodu Inodi kod vinesenij v metod mozhna znajti i v inshih miscyah programi U takomu razi ye sens zaminiti znajdeni dilyanki kodu viklikom novogo metodu Izolyuye nezalezhni chastini kodu zmenshuyuchi imovirnist pomilok napriklad z vini perepriznachennya ne tiyeyi zminnoyi Poryadok refaktoringuStvoriti novij metod Pidibrati nazvu yaka vidobrazhaye sut togo sho robitime cej metod Skopiyuvati fragment kodu sho cikavit v novij metod Vidaliti cej fragment iz starogo miscya i zaminiti viklikom novogo metodu Znajti usi zminni yaki vikoristovuvalisya v comu fragmenti kodu Yaksho voni buli ogolosheni vseredini cogo fragmentu i ne vikoristovuyutsya poza nim zalishiti yih bez zmin voni stanut lokalnimi zminnimi novogo metodu Yaksho zminni ogolosheni pered dilyankoyu kodu to yih slid peredati v parametri novogo metodu shob vikoristati znachennya yaki v nih znahodilisya ranishe Inodi vid takih zminnih prostishe pozbavitisya za dopomogoyu Yaksho lokalna zminna yakos zminyuyetsya u dilyanci kodu ce mozhe oznachati sho yiyi zminene znachennya znadobitsya dali v osnovnomu metodi yaksho ce dijsno tak to znachennya ciyeyi zminnoyi slid povernuti v osnovnij metod Anti refaktoringVbudovuvannya metoduShozhi refaktoringiPeremishennya metoduDopomagaye inshim refaktoringamZamina parametriv ob yektom Stvorennya shablonnogo metodu Parametrizaciya metoduBoretsya z zapahomDublyuvannya kodu Dovgij metod Zazdrisni funkciyi Operatori switch Lancyuzhok viklikiv Komentari Klas danihDiv takozhRozsheplennya zminnoyiPosilannyaExtract Method 19 lyutogo 2015 u Wayback Machine Vidokremlennya metodu 14 grudnya 2014 u Wayback Machine Extract Method 2 grudnya 2014 u Wayback Machine Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi