Code review в Swift: что проверять и как давать обратную связь
Code review — это не просто формальная проверка кода перед мержем. Это один из самых эффективных инструментов для повышения качества кода, распространения знаний внутри команды и предотвращения багов. Для начинающих iOS/macOS разработчиков процесс ревью часто кажется пугающим: "А вдруг я пропущу критическую ошибку?" или "Как написать замечание, чтобы не обидеть коллегу?". В этой статье мы разберем, на что конкретно обращать внимание при проверке Swift-кода, и как давать обратную связь так, чтобы она была полезной и мотивирующей.
Что проверять в Swift-коде: чек-лист для ревьювера
Чтобы ревью было структурированным и эффективным, разделите проверку на несколько логических блоков. Начните с общего понимания задачи, затем переходите к деталям.
1. Архитектура и логика
Первый и самый важный пункт — решает ли код поставленную задачу? Не углубляйтесь в стиль, пока не убедитесь, что логика верна.
- Соответствие требованиям: Проверьте, что код делает именно то, что описано в задаче или тикете.
- Правильность алгоритмов: Нет ли логических ошибок? Например, не перепутаны ли условия в
ifилиguard. - Обработка граничных случаев: Что произойдет, если массив пуст, а сетевой запрос вернет
nil? Код должен быть устойчивым.
// ❌ Плохо: не учтен случай, когда массив пуст
func firstElement(_ array: [Int]) -> Int {
return array[0] // Crash!
}
// ✅ Хорошо: безопасное извлечение
func firstElement(_ array: [Int]) -> Int? {
return array.first
}
2. Безопасность типов и работа с Optional
Swift — язык с строгой типизацией, и его сильная сторона — безопасность. Убедитесь, что автор кода не злоупотребляет force unwrapping.
- Force unwrap (!): Допустим только в случаях, когда вы на 100% уверены, что значение не
nil(например,IBOutlet). - Использование Optional Binding:
if letилиguard let— стандартный и безопасный способ. - IUO (Implicitly Unwrapped Optional): Старайтесь избегать, используйте обычные Optional.
// ❌ Плохо: force unwrap без проверки
let url = URL(string: "https://example.com")!
// Если строка невалидна - приложение упадет
// ✅ Хорошо: безопасная инициализация
guard let url = URL(string: "https://example.com") else {
print("Invalid URL")
return
}
3. Наименование и читаемость кода
Код читается гораздо чаще, чем пишется. Хорошие имена переменных, функций и типов — залог поддерживаемости проекта.
- Соглашения Swift: Используйте
camelCaseдля переменных/функций иPascalCaseдля типов (struct, class, enum). - Очевидность имени: Имя должно описывать назначение.
v— плохо,userName— хорошо. - Булевы свойства: Должны начинаться с
is,has,can(например,isEnabled).
// ❌ Плохо
let a = fetchData()
// ✅ Хорошо
let userProfile = fetchCurrentUserProfile()
4. Производительность и управление памятью
Для iOS/macOS приложений критично избегать утечек памяти и лишних вычислений.
- Циклы сильных ссылок (Retain cycles): Проверьте замыкания (closures) — не захватывают ли они
selfбез[weak self]или[unowned self]. - Работа с потоками: Все обновления UI должны происходить на главном потоке. Проверьте, используются ли
DispatchQueue.main.async. - Избегание дорогих операций: Например, не вызывайте
reloadData()наUITableViewбез необходимости.
// ❌ Плохо: сильная ссылка на self в замыкании
class ViewController: UIViewController {
var handler: (() -> Void)?
func setupHandler() {
handler = {
self.view.backgroundColor = .red // Retain cycle!
}
}
}
// ✅ Хорошо: использование weak self
class ViewController: UIViewController {
var handler: (() -> Void)?
func setupHandler() {
handler = { [weak self] in
self?.view.backgroundColor = .red
}
}
}
Как давать обратную связь: искусство конструктивной критики
Даже самый правильный код может вызвать негатив, если обратная связь подана неверно. Помните: цель code review — улучшить код, а не унизить автора.
1. Начинайте с позитива
Если вы нашли что-то хорошее (элегантное решение, грамотное использование Swift-фич), обязательно отметьте это. Это создает доверительную атмосферу.
Пример: "Отличное использование
Resultтипа для обработки ошибок! Это делает код гораздо чище."
2. Комментируйте код, а не человека
Избегайте фраз вроде "Ты сделал ошибку" или "Это ужасно". Говорите о коде: "Здесь есть потенциальная проблема с retain cycle" или "Этот метод можно упростить".
3. Предлагайте, а не требуйте
Вместо "Исправь на guard let" напишите "Что думаешь насчет использования guard let здесь? Это сделает код более читаемым и уберет лишнюю вложенность".
4. Объясняйте "почему"
Простое "Исправь" не помогает новичку учиться. Объясните причину: "Если мы используем force unwrap, то приложение упадет в случае