Перейти к основному содержимому

Чистый код и лучшие практики программирования

Книга «Clean Code» Роберта Мартина описывает принципы и практики написания читаемого и поддерживаемого кода.

1. Общие правила​

  • Говорящие имена: Выбирайте имена, раскрывающие намерение. Избегайте temp или a1.
  • Функции должны быть компактными: Делайте одну вещь и делайте её хорошо (Single Responsibility).
  • Аргументы функций: В идеале 0–2; избегайте более 3.
  • DRY (Don't Repeat Yourself): Избегайте дублирования логики.
  • KISS (Keep It Simple, Stupid): Не усложняйте без необходимости.
  • YAGNI (You Ain't Gonna Need It): Не пишите код для функций, которые могут понадобиться в будущем.

2. Комментарии​

  • Используйте комментарии только тогда, когда невозможно выразить мысль через код.
  • Избегайте «шумовых» комментариев вроде // increment i.
  • Используйте TODO умеренно.

3. Обработка ошибок​

  • Используйте исключения вместо кодов ошибок.
  • По возможности не возвращайте null (используйте паттерн Null Object или выбрасывайте исключения).
  • Оборачивайте сторонние API, чтобы изолировать их от основной логики.

4. Принципы SOLID (краткий обзор)​

  • S: Single Responsibility (принцип единственной ответственности)
  • O: Open/Closed (принцип открытости/закрытости)
  • L: Liskov Substitution (принцип подстановки Лисков)
  • I: Interface Segregation (принцип разделения интерфейсов)
  • D: Dependency Inversion (принцип инверсии зависимостей) Подробное руководство по SOLID

5. Другие лучшие практики​

  • Early Return: Вместо глубокой вложенности if-else используйте ранний возврат.
  • Композиция вместо наследования: Предпочитайте создание объектов из других объектов вместо глубоких цепочек наследования.
  • Правило бойскаута: Всегда оставляйте код чище, чем он был до вас.

6. Рефакторинг legacy кода (монолит)​

  • Стратегия:
    1. Напишите тесты для существующей функциональности (убедитесь в отсутствии регрессий).
    2. Выявите и выделите зоны ответственности в отдельные классы (SRP).
    3. Ослабьте связанность компонентов с помощью Dependency Injection.
    4. Проводите рефакторинг пошагово, запуская тесты на каждом этапе.
    5. Применяйте паттерны проектирования — Strategy, Factory или Service-объекты — для упрощения логики. Подробное руководство по паттернам проектирования