Содержание

  • ***
  • ***
  • ***
  • Предисловие
  • Введение
  • ***
  • Благодарности
  • Глава 1. Чистый код
  • ***
  • Да будет код
  • Расплата за хаос
  • Правило бойскаута
  • Предыстория и принципы
  • Заключение
  • Литература
  • Глава 2. Содержательные имена
  • ***
  • Имена должны передавать намерения программиста
  • Избегайте дезинформации
  • Используйте осмысленные различия
  • Используйте удобопроизносимые имена
  • Выбирайте имена, удобные для поиска
  • Избегайте схем кодирования имен
  • Избегайте мысленных преобразований
  • Имена классов
  • Имена методов
  • Избегайте остроумия
  • Выберите одно слово для каждой концепции
  • Воздержитесь от каламбуров
  • Используйте имена из пространства решения
  • Используйте имена из пространства задачи
  • Добавьте содержательный контекст
  • Не добавляйте избыточный контекст
  • Несколько слов напоследок
  • Глава 3. Функции
  • ***
  • Компактность!
  • Правило одной операции
  • Один уровень абстракции на функцию
  • Команды switch
  • Используйте содержательные имена
  • Аргументы функций
  • Избавьтесь от побочных эффектов
  • Разделение команд и запросов
  • Используйте исключения вместо возвращения кодов ошибок
  • Не повторяйтесь
  • Структурное программирование
  • Как научиться писать такие функции?
  • Завершение
  • Литература
  • Глава 4. Комментарии
  • ***
  • Комментарии не компенсируют плохого кода
  • Объясните свои намерения в коде
  • Хорошие комментарии
  • Плохие комментарии
  • Литература
  • Глава 5. Форматирование
  • ***
  • Цель форматирования
  • Горизонтальное форматирование
  • Глава 6. Объекты и структуры данных
  • ***
  • Абстракция данных
  • Антисимметрия данных/объектов
  • Закон Деметры
  • Заключение
  • Литература
  • Глава 7. Обработка ошибок
  • ***
  • Используйте исключения вместо кодов ошибок
  • Начните с написания команды  try-catch-finally
  • Используйте непроверяемые исключения
  • Передавайте контекст с исключениями
  • Определяйте классы исключений в контексте потребностей вызывающей стороны
  • Определите нормальный путь выполнения
  • Не возвращайте null
  • Не передавайте null
  • Заключение
  • Литература
  • Глава 8. Границы
  • ***
  • Использование стороннего кода
  • Исследование и анализ границ
  • Чистые границы
  • Литература
  • Глава 9. Модульные тесты
  • ***
  • Три закона TTD
  • О чистоте тестов
  • Чистые тесты
  • Одна проверка на тест
  • F.I.R.S.T.
  • Заключение
  • Литература
  • Глава 10. Классы
  • ***
  • Строение класса
  • Структурирование с учетом изменений
  • Литература
  • Глава 11. Системы
  • ***
  • Как бы вы строили город?
  • Отделение конструирования системы от ее использования
  • Отделение main
  • Масштабирование
  • Посредники
  • АОП-инфраструктуры на «чистом» Java
  • Аспекты AspectJ
  • Испытание системной архитектуры
  • Оптимизация принятия решений
  • Применяйте стандарты разумно,  когда они приносят очевидную пользу
  • Заключение
  • Литература
  • Глава 12. Формирование архитектуры
  • Четыре правила
  • Выразительность
  • Минимум классов и методов
  • Заключение
  • Литература
  • Глава 13. Многопоточность
  • ***
  • Зачем нужна многопоточность?
  • Трудности
  • Защита от ошибок многопоточности
  • Знайте свою библиотеку
  • Знайте модели выполнения
  • Остерегайтесь зависимостей между синхронизированными методами
  • Синхронизированные секции должны иметь минимальный размер
  • О трудности корректного завершения
  • Тестирование многопоточного кода
  • Заключение
  • Литература
  • Глава 14. Последовательное очищение
  • ***
  • Реализация Args
  • Как я это сделал?
  • Args: черновик
  • Аргументы String
  • Заключение
  • Глава 15. Внутреннее строение JUnit
  • ***
  • Инфраструктура JUnit
  • Заключение
  • Глава 16. Переработка SerialDate
  • ***
  • Прежде всего — заставить работать
  • …Потом очистить код
  • Заключение
  • Литература
  • Глава 17. Запахи и эвристические правила
  • ***
  • Комментарии
  • Рабочая среда
  • Функции
  • Разное
  • Java
  • Имена
  • Тесты
  • Заключение
  • Литература
  • Приложение А. Многопоточность II
  • ***
  • Пример приложения «клиент/сервер»
  • Знайте свои библиотеки
  • Зависимости между методами могут нарушить работу многопоточного кода
  • Повышение производительности
  • Взаимная блокировка
  • Тестирование многопоточного кода
  • Средства тестирования многопоточного кода
  • Полные примеры кода
  • Приложение Б. org.jfree.date.SerialDate
  • Приложение B. Перекрестные ссылки
  • Эпилог