- •Введение
- •Стиль
- •Имена
- •Выражения
- •Стилевое единство и идиомы
- •Макрофункции
- •Загадочные числа
- •Комментарии
- •Стоит ли так беспокоиться?
- •Дополнительная литература
- •Алгоритмы и структуры данных
- •Поиск
- •Сортировка
- •Библиотеки
- •Быстрая сортировка на языке Java
- •"О большое"
- •Динамически расширяемые массивы
- •Списки
- •Деревья
- •Хэш-таблицы
- •Заключение
- •Дополнительная литература
- •Проектирование и реализация
- •Алгоритм цепей Маркова
- •Варианты структуры данных
- •Создание структуры данных в языке С
- •Генерация вывода
- •Java
- •AWK и PERL
- •Производительность
- •Уроки
- •Дополнительная литература
- •Интерфейсы
- •Значения, разделенные запятой
- •Прототип библиотеки
- •Библиотека для распространения
- •Реализация на C++
- •Принципы интерфейса
- •Управление ресурсами
- •Abort, Retry, Fail?
- •Пользовательские интерфейсы
- •Дополнительная литература
- •Отладка
- •Отладчики
- •Хорошие подсказки, простые ошибки
- •Трудные ошибки, нет зацепок
- •Последняя надежда
- •Невоспроизводимые ошибки
- •Средства отладки
- •Чужие ошибки
- •Заключение
- •Дополнительная литература
- •Тестирование
- •Тестируйте при написании кода
- •Систематическое тестирование
- •Автоматизация тестирования
- •Тестовые оснастки
- •Стрессовое тестирование
- •Полезные советы
- •Кто осуществляет тестирование?
- •Тестирование программы markov
- •Заключение
- •Дополнительная литература
- •Производительность
- •Узкое место
- •Замеры времени и профилирование
- •Стратегии ускорения
- •Настройка кода
- •Эффективное использование памяти
- •Предварительная оценка
- •Заключение
- •Дополнительная литература
- •Переносимость
- •Язык
- •Заголовочные файлы и библиотеки
- •Организация программы
- •Изоляция
- •Обмен данными
- •Порядок байтов
- •Переносимость и внесение усовершенствований
- •Интернационализация
- •Заключение
- •Дополнительная литература
- •Нотация
- •Форматирование данных
- •Регулярные выражения
- •Программируемые инструменты
- •Интерпретаторы, компиляторы и виртуальные машины
- •Программы, которые пишут программы
- •Использование макросов для генерации кода
- •Компиляция "на лету"
- •Дополнительная литература
- •Эпилог
- •Приложение: свод правил
- •Стиль
- •Интерфейсы
- •Отладка
- •Тестирование
- •Производительность
- •Переносимость
? line_number = line_number + 2; 7 }
Стоит ли так беспокоиться?
В этой главе мы поговорили об основных составляющих хорошего стиля программирования: информативных именах, ясности в выражениях, прозрачной логике, читабельности кода и комментариев, а также обсудили важность использования соглашений и идиоматических блоков для достижения всего вышеперечисленного.
Однако стоит ли так беспокоиться о стиле? Кому какая разница, как программа выглядит изнутри, если она работает? Не слишком ли много времени придется тратить на ее "причесывание"? Не слишком ли расплывчаты рекомендуемые правила?
Ответ на эти вопросы состоит в следующем: хорошо и красиво написанный код проще читать и воспринимать; в нем, без сомнения, содержится меньше ошибок, и он почти наверняка будет короче, чем код, бездумно скомпонованный и оставленный без улучшений. Когда программа пишется в спешке, когда и так трудно успеть к установленным срокам, кажется вполне естественным не обращать внимания на стиль, оставив заботы о нем на потом. Однако подобное решение может оказаться весьма накладным. Некоторые примеры из этой главы уже дали вам представление о том, что может случиться, если пренебрегать хорошим стилем. Небрежно оформленный код — плохой код, и не только потому, что выглядит он некрасиво и читать его трудно; как правило, в таком коде содержатся и ошибки.
Основная мысль состоит в том, что хороший стиль должен просто войти в привычку. Если вы будете задумываться о стиле при написании кода, если вы будете выкраивать время для того, чтобы проверять и улучшать его стиль, вы выработаете у себя очень полезную привычку. После того как все это вы будете проделывать автоматически, ваше подсознание позаботится о многих деталях, и даже код, который вы будете писать в спешке, станет гораздо лучше.
Дополнительная литература
Как мы уже заявляли в начале главы, писать хороший код и просто хорошо писать по-английски — достаточно схожие понятия. "Элементы стиля" В. Странка и Э. Б.
Уайта (W. Strunk, E. В. White. The Elements of Style. Allyn & Bacon) — самый хороший из небольших учебников письменного английского.
Эта глава во многом взята из книги Брайана Кернигана и П. Дж. Пла-угера
"Элементы стиля программирования" (Brian Kernighan, P. J. Plau-ger. The Elements of Programming Style. McGraw-Hill, 1978). "Создание надежного кода" Стива Магьюира (Steve Maguire. Writing Solid Code. Microsoft Press, 1993) — идеальный источник советов по программированию. Кроме того, интересное обсуждение стиля имеется в книгах Мак-Коннелла "Все о коде" (Steve McConnell. Code Complete. Microsoft Press, 1993) и Питера ван дер Линдена "Профессиональное программирование на С:
Секреты С" (Peter van der Linden. Expert С Programming: Deep С Secrets. Prentice Hall, 1994).