Ответ
Рефакторинг — это процесс улучшения внутренней структуры кода без изменения его внешнего поведения. Основные цели: повышение читаемости, упрощение поддержки, устранение дублирования и улучшение архитектуры.
Типичные случаи применения:
- Выделение повторяющегося кода в отдельные методы, классы или утилиты.
- Упрощение сложных методов (разделение на части, замена условных конструкций полиморфизмом).
- Улучшение именования переменных, функций и классов для ясности.
- Замена небезопасных паттернов (например, force unwrap в Swift на
guard letилиif let). - Внедрение протоколов/интерфейсов для уменьшения связанности.
Пример рефакторинга сетевого запроса в Swift:
До (проблемы: force unwrap, отсутствие обработки ошибок):
func fetchData() {
if let url = URL(string: "https://api.example.com/data") {
URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
print(String(data: data, encoding: .utf8)!)
}
}.resume()
}
}
После (использование Result, безопасные unwrap, обработка ошибок):
func fetchData(completion: @escaping (Result<String, Error>) -> Void) {
guard let url = URL(string: "https://api.example.com/data") else {
completion(.failure(URLError(.badURL)))
return
}
URLSession.shared.dataTask(with: url) { data, _, error in
if let error = error {
completion(.failure(error))
return
}
guard let data = data,
let string = String(data: data, encoding: .utf8) else {
completion(.failure(URLError(.cannotDecodeContentData)))
return
}
completion(.success(string))
}.resume()
}
Для поддержания качества кода также полезно использовать статические анализаторы (например, SwiftLint).