Java:
Рефакторинг
Як:
Давайте візьмемо простий клас Java, який кричить про рефакторинг через свою погану організацію та відсутність ясності.
public class Calculator {
public int calc(int op1, int op2, String operation) {
if (operation.equals("add")) {
return op1 + op2;
} else if (operation.equals("subtract")) {
return op1 - op2;
} // Інші операції...
}
}
Після рефакторингу у нас є:
public class Calculator {
public int add(int operand1, int operand2) {
return operand1 + operand2;
}
public int subtract(int operand1, int operand2) {
return operand1 - operand2;
}
// Інші операції...
}
Завдяки рефакторингу ми покращили назви методів та параметрів для зрозумілості та усунули потребу в умовній гілці в одному методі. Кожна операція тепер ясно вказує на своє призначення.
Поглиблено:
Рефакторинг має свої корені у спільноті Smalltalk, з її акцентом на зрозумілість коду та об’єктно-орієнтоване проектування, але він насправді набрав обертів у світі Java наприкінці 90-х та на початку 00-х років, особливо після публікації фундаментальної книги Мартіна Фаулера “Рефакторинг: Поліпшення дизайну існуючого коду”.
Існують альтернативи рефакторингу, як-от переписування коду з нуля. Однак, рефакторинг часто віддається перевага, оскільки він передбачає поступові зміни, які не порушують функціональність додатка.
Деталі реалізації під час рефакторингу в Java (або будь-якій іншій мові програмування) ґрунтуються на розумінні “поганих запахів” коду — індикаторів глибших проблем у коді. До таких “поганих запахів” належать довгі методи, великі класи, дубльований код та надмірне використання примітивів. Застосовуючи шаблони рефакторингу, такі як Витягнути метод, Перемістити метод або Замінити тимчасову змінну запитом, розробники можуть систематично вирішувати ці проблеми, одночасно забезпечуючи функціональність коду в будь-який час.
Автоматизовані інструменти, як-от підтримка рефакторингу в IntelliJ IDEA або плагіни для Eclipse, можуть допомогти в процесі, автоматизуючи рефакторинги, такі як перейменування змінних, методів і класів, виділення методів або змінних, та переміщення методів або класів до різних пакетів або просторів назв.
Дивіться також:
- “Рефакторинг: Поліпшення дизайну існуючого коду” Мартіна Фаулера: https://martinfowler.com/books/refactoring.html
- Техніки рефакторингу на Refactoring.Guru: https://refactoring.guru/refactoring/techniques
- Автоматизований рефакторинг в Eclipse: https://www.eclipse.org/eclipse/news/4.18/jdt.php
- Можливості рефакторингу в IntelliJ IDEA: https://www.jetbrains.com/idea/features/refactoring.html
Кожен з цих ресурсів надає або основу для розуміння принципів рефакторингу, або інструменти, які можна використовувати для втілення цих принципів на практиці.