Чистый код: создание, анализ и рефакторинг
Book information
Description
Титульный лист Выходные данные Содержание Посвящение Предисловие Введение Благодарности 1. Чистый код Да будет код Плохой код Расплата за хаос Грандиозная переработка Отношение Основной парадокс Искусство чистого кода? Что такое «чистый код»? Мы — авторы Правило бойскаута Предыстория и принципы Заключение Литература 2. Содержательные имена Имена должны передавать намерения программиста Избегайте дезинформации Используйте осмысленные различия Используйте удобопроизносимые имена Выбирайте имена, удобные для поиска Избегайте схем кодирования имен Венгерская запись Префиксы членов классов Интерфейсы и реализации Избегайте мысленных преобразований Имена классов Имена методов Избегайте остроумия Выберите одно слово для каждой концепции Воздержитесь от каламбуров Используйте имена из пространства решения Используйте имена из пространства задачи Добавьте содержательный контекст Не добавляйте избыточный контекст Несколько слов напоследок 3. Функции Компактность! Блоки и отступы Правило одной операции Секции в функциях Один уровень абстракции на функцию Чтение кода сверху вниз: правило понижения Команды switch Используйте содержательные имена Аргументы функций Стандартные унарные формы Аргументы-флаги Бинарные функции Тернарные функции Объекты как аргументы Списки аргументов Глаголы и ключевые слова Избавьтесь от побочных эффектов Выходные аргументы Разделение команд и запросов Используйте исключения вместо возвращения кодов ошибок Изолируйте блоки try/catch Обработка ошибок как одна операция Магнит зависимостей Error.java Не повторяйтесь3 Структурное программирование Как научиться писать такие функции? Завершение Литература 4. Комментарии Комментарии не компенсируют плохого кода Объясните свои намерения в коде Хорошие комментарии Юридические комментарии Информативные комментарии Представление намерений Прояснение Предупреждения о последствиях Комментарии TODO Усиление Комментарии Javadoc в общедоступных API Плохие комментарии Бормотание Избыточные комментарии Недостоверные комментарии Обязательные комментарии Журнальные комментарии Шум Опасный шум Не используйте комментарии там, где можно использовать функцию или переменную Позиционные маркеры Комментарии за закрывающей фигурной скобкой Ссылки на авторов Закомментированный код Комментарии HTML Нелокальная информация Слишком много информации Неочевидные комментарии Заголовки функций Заголовки Javadoc во внутреннем коде Пример Литература 5. Форматирование Цель форматирования Вертикальное форматирование Газетная метафора Вертикальное разделение концепций Вертикальное сжатие Вертикальные расстояния Вертикальное упорядочение Горизонтальное форматирование Горизонтальное разделение и сжатие Горизонтальное выравнивание Отступы Вырожденные области видимости Правила форматирования в группах Правила форматирования от дядюшки Боба 6. Объекты и структуры данных Абстракция данных Антисимметрия данных/объектов Закон Деметры Крушение поезда Гибриды Скрытие структуры Объекты передачи данных Активные записи Заключение Литература 7. Обработка ошибок Используйте исключения вместо кодов ошибок Начните с написания команды try-catch-finally Используйте непроверяемые исключения Передавайте контекст с исключениями Определяйте классы исключений в контексте потребностей вызывающей стороны Определите нормальный путь выполнения Не возвращайте null Не передавайте null Заключение Литература 8. Границы Использование стороннего кода Исследование и анализ границ Изучение log4j Учебные тесты: выгоднее, чем бесплатно Использование несуществующего кода Чистые границы Литература 9. Модульные тесты Три закона TTD О чистоте тестов Тесты как средство обеспечения изменений Чистые тесты Предметно-ориентированный язык тестирования Двойной стандарт Одна проверка на тест Одна концепция на тест F. I.R. S.T. Заключение Литература 10. Классы Строение класса Инкапсуляция Классы должны быть компактными! Принцип единой ответственности (SRP) Связность Поддержание связности приводит к уменьшению классов Структурирование с учетом изменений Изоляция изменений Литература 11. Системы Как бы вы строили город? Отделение конструирования системы от ее использования Отделение main Фабрики Внедрение зависимостей Масштабирование Поперечные области ответственности Посредники АОП-инфраструктуры на «чистом» Java Аспекты AspectJ Испытание системной архитектуры Оптимизация принятия решений Применяйте стандарты разумно, когда они приносят очевидную пользу Системам необходимы предметноориентированные языки Заключение Литература 12. Формирование архитектуры Четыре правила Правило № 1: выполнение всех тестов Правила № 2–4: переработка кода Отсутствие дублирования Выразительность Минимум классов и методов Заключение Литература 13. Многопоточность Зачем нужна многопоточность? Мифы и неверные представления Трудности Защита от ошибок многопоточности Принцип единой ответственности Следствие: ограничивайте область видимости данных Следствие: используйте копии данных Следствие: потоки должны быть как можно более независимы Знайте свою библиотеку Потоково-безопасные коллекции Знайте модели выполнения Модель «производители-потребители» Модель «читатели-писатели» Модель «обедающих философов» Остерегайтесь зависимостей между синхронизированными методами Синхронизированные секции должны иметь минимальный размер О трудности корректного завершения Тестирование многопоточного кода Рассматривайте непериодические сбои как признаки возможных проблем многопоточности Начните с отладки основного кода, не связанного с многопоточностью Реализуйте переключение конфигураций многопоточного кода Обеспечьте логическую изоляцию конфигураций многопоточного кода Протестируйте программу с количеством потоков, превышающим количество процессоров Протестируйте программу на разных платформах Применяйте инструментовку кода для повышения вероятности сбоев Ручная инструментовка Автоматизированная инструментовка Заключение Литература 14. Последовательное очищение Реализация Args Как я это сделал? Args: черновик На этом я остановился О постепенном усовершенствовании Аргументы String Заключение 15. Внутреннее строение JUnit Инфраструктура JUnit Заключение 16. Переработка SerialDate Прежде всего — заставить работать …Потом очистить код Заключение Литература 17. Запахи и эвристические правила Комментарии C1: Неуместная информация C2: Устаревший комментарий C3: Избыточный комментарий C4: Плохо написанный комментарий C5: Закомментированный код Рабочая среда E1: Построение состоит из нескольких этапов E2: Тестирование состоит из нескольких этапов Функции F1: Слишком много аргументов F2: Выходные аргументы F3: Флаги в аргументах F4: Мертвые функции Разное G1: Несколько языков в одном исходном файле G2: Очевидное поведение не реализовано G3: Некорректное граничное поведение G4: Отключенные средства безопасности G5: Дублирование G6: Код на неверном уровне абстракции G7: Базовые классы, зависящие от производных G8: Слишком много информации G9: Мертвый код G10: Вертикальное разделение G11: Непоследовательность G12: Балласт G13: Искусственные привязки G14: Функциональная зависть G15: Аргументы-селекторы G16: Непонятные намерения G17: Неверное размещение G18: Неуместные статические методы G19: Используйте пояснительные переменные G20: Имена функций должны описывать выполняемую операцию G21: Понимание алгоритма G22: Преобразование логических зависимостей в физические G23: Используйте полиморфизм вместо if/Else или switch/Case G24: Соблюдайте стандартные конвенции G25: Заменяйте «волшебные числа» именованными константами G26: Будьте точны G27: Структура важнее конвенций G28: Инкапсулируйте условные конструкции G29: Избегайте отрицательных условий G30: Функции должны выполнять одну операцию G31: Скрытые временн*ые привязки G32: Структура кода должна быть обоснована G33: Инкапсулируйте граничные условия G34: Функции должны быть написаны на одном уровне абстракции G35: Храните конфигурационные данные на высоких уровнях G36: Избегайте транзитивных обращений Java J1: Используйте обобщенные директивы импорта J2: Не наследуйте от констант J3: Константы против перечислений Имена N1: Используйте содержательные имена N2: Выбирайте имена на подходящем уровне абстракции N3: По возможности используйте стандартную номенклатуру N4: Недвусмысленные имена N5: Используйте длинные имена для длинных областей видимости N6: Избегайте кодирования N7: Имена должны описывать побочные эффекты Тесты T1: Нехватка тестов T2: Используйте средства анализа покрытия кода T3: Не пропускайте тривиальные тесты T4: Отключенный тест как вопрос T5: Тестируйте граничные условия T6: Тщательно тестируйте код рядом с ошибками T7: Закономерности сбоев часто несут полезную информацию T8: Закономерности покрытия кода часто несут полезную информацию T9: Тесты должны работать быстро Заключение Литература Приложение А. Многопоточность II Пример приложения «клиент/сервер» Сервер Реализация многопоточности Анализ серверного кода Заключение Возможные пути выполнения Количество путей Копаем глубже Заключение Знайте свои библиотеки Executor Framework Неблокирующие решения Потоково-небезопасные классы Зависимости между методами могут нарушить работу многопоточного кода Перенесение сбоев Клиентская блокировка Серверная блокировка Повышение производительности Вычисление производительности в однопоточной модели Вычисление производительности в многопоточной модели Взаимная блокировка Взаимное исключение Блокировка с ожиданием Отсутствие вытеснения Циклическое ожидание Нарушение взаимного исключения Нарушение блокировки с ожиданием Нарушение отсутствия вытеснения Нарушение циклического ожидания Тестирование многопоточного кода Средства тестирования многопоточного кода Заключение Полные примеры кода Однопоточная реализация архитектуры «клиент/сервер» Архитектура «клиент/сервер» с использованием потоков Приложение Б. org.jfree.date.SerialDate Приложение В. Перекрестные ссылки Эпилог Алфавитный указатель
Similar books
Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique
2025 · PDF
Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная
2022 · PDF
Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание
2021 · PDF
Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.) =: Archaeological Cultures of Siberia in the context of Cross-cultural contacts in Eurasia: dedicated to the 300th anniversary of the first scientific archaeological excavations in Siberia (1722) : материалы Международной археологической конференции молодых исследователей "Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.)" (Новосибирск, 21-25 ноября 2022 г.)
2022 · PDF
Трешниковские чтения - 2023. Современная географическая картина мира и технологии географического образования =: Treshnikov readings - 2023. Modern geographical global picture and technology of geographic education : материалы Всероссийской научно-практической конференции с международным участием, посвящённой памяти знаменитого российского океанолога, исследователя Арктики и Антарктики, академика Алексея Фёдоровича Трёшникова и 60-летию Ульяновского областного отделения Всероссийской общественной организации "Русское гаографическое общество" (13 апреля 2023)
2023 · PDF
Управление объектами интеллектуальной собственности. Искусство изобретать: учебник для обучающихся по направлениям подготовки 23.00.00 , направлениям подготовки 23.03.01 "Технология транспортных процессов", уровень образования-"бакалавриат", 23.03.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования-"бакалавриат", 23.04.01 "Технология транспортных процессов", уровень образования- "магистратура", 23.04.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования- "магистратура"
2022 · PDF
Философия. Учебно-методический комплекс дисциплины по направлениям подготовки: 51.03.03 (071800.62) «Социально-культурная деятельность», профили подготовки: «Социально-культурные технологии в индустрии досуга», «Менеджмент социально-культурной деятельности», «Менеджмент детско-юношеского досуга», «Постановка и продюсирование культурно-досуговых программ», «Социально-культурная анимация и рекреация»; 38.03.02 (080200.62) «Менеджмент», профили подготовки: «Управление человеческими ресурсами», «Управление малым бизнесом», квалификации (степень) выпускника – «бакалавр»
2014 · PDF
Проектирование устройств приема и обработки сигналов: учебно-методическое пособие по курсу "Устройства приема и обработки сигналов" для студентов всех форм обучения специальностей: 210400.62 Радиотехника. Бакалавр Б.3.10. Основы цифровой обработки сигналов; 210700.62 Системы мобильной связи. Бакалавр Б.3.19. Радиоприемные устройства систем мобильной связи; 210601.65 Радиоэлектронные системы и комплексы. Специалист С.3.18. Устройства приема и обработки сигналов; 090302.65 Защита информации в системах связи и управления. Специалист С.3.30. Устройства приема и обработки сигналов
2015 · PDF