Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 349 350 351 352 353 354 < 355 > 356 357 358 359 360 361 .. 426 >> Следующая

перед выражениями, которые они охватывают:
Ш Листинг 31-26. Пример неуместного двойного отступа в блоке
begin-end (Java)
for ( int i = 0; i < MAX_LINES; i++ )
{
730 ЧАСТЬ VII Мастерство программирования
I- В выражениях после begin сделан лишний отступ.
ReadLine( i );
ProcessLine( i );
}
Еще один пример стиля, внешне привлекательного, но нарушающего
Основную теорему форматирования. Исследования показали, что с
точки зрения понимания программы, использующие одинарные и
двойные отступы, не отличаются друг от друга (Miaria et al.,
1983), но приведенный стиль неточно отображает логическую
структуру программы. ReadLineQ и ProcessLineQ показаны так,
будто они подчинены паре begin-end, что не соответствует
действительности.
Этот подход также преувеличивает сложность логической
структуры программы. Какая из структур, приведенных в
листингах 31-27 и 31-28, выглядит сложнее?
Листинг 31-27. Абстрактная структура 1

Листинг 31-28. Абстрактная структура 2

Обе являются абстрактными представлениями структуры цикла for.
Структура 1 выглядит сложней, хотя и представляет тот же код,
что и Структура 2. Если бы вам понадобилось создать 2 или 3
уровня вложенности операторов, то из-за двойных отступов вы
получили бы 4 или 6 уровней отступов. Такое форматирование вы-
глядело бы сложнее, чем на самом деле. Избавьтесь от этой
проблемы, эмулировав явные блоки или применив begin и end в
качестве границ блока, выравнивая begin и end так же, как и
выражения, которые они охватывают.
Другие соглашения
Хотя отступы в блоках являются главным вопросом форматирования
управляющих структур, вы также можете столкнуться с другими
проблемами, поэтому далее я привожу еще несколько советов.
Используйте пустые строки между абзацами Некоторые блоки не
разграничиваются с помощью пар begin-end. Логический блок -
группа подходящих друг к другу операторов - должны
рассматриваться так же, как абзацы в обычной книге. Отделяйте
их друг от друга с помощью пустых строк. Листинг 31-29
представляет пример абзацев, которые следует разделить:
ГЛАВА 31 Форматирование и стиль
731
Листинг 31-29. Пример кода, который следует сгруппировать и
разбить на абзацы (C++)
cursor.start = startingScanLine;
cursor.end = endingScanLine;
window.title = editWindow.title;
window.dimensions = editWindow.dimensions;
window.foregroundColor = userPreferences.foregroundColor;
cursor.blinkRate = editMode.blinkRate;
window.backgroundColor = userPreferences.backgroundColor;
SaveCursor( cursor );
SetCursor( cursor );
Этот код выглядит неплохо, но пустые строки позволят улуч-
цецвкрестнай ссыма ш
шить его с двух точек зрения. Во-первых, если у вас есть груп-
придерживаетесь
процесса про-
па операторов, не требующих выполнения в определенном
граммирования с
псевдокодом,
порядке, заманчиво объединить их именно так. Вам не надо ваш
К°Д автоматически разби-
усовершенствовать порядок выражений для помощи компь- &ается на
абзацы (ок. главу 9).
ютеру, но читатели-люди оценят дополнительные подсказки о том,
какие операторы выполнять в определенном порядке, а какие -
просто расположены рядом друг с другом. Дисциплина добавления
пустых строк в коде программы заставляет вас тщательней
обдумывать вопрос, какие операторы на самом деле подходят друг
другу. Исправленный фрагмент кода, представленный в листинге
31-30, показывает, как организовать данный набор операторов.
Листинг 31-30. Пример кода, который правильно сгруппирован и
разбит на абзацы (C++)
I- Эти строки настраивают текстовое окно.
window.dimensions = editWindow.dimensions; window.title =
editWindow.title;
window.backgroundColor = userPreferences.backgroundColor;
-window.foregroundColor = userPreferences.foregroundColor;
I- Эти строки устанавливают параметры курсора и должны быть
отделены от предыдущих строк.
*->(" cursor, start = startingScanLine; cursor.end =
endingScanLine; cursor.blinkRate = editMode.blinkRate;
SaveCursor( cursor );
_SetCursor( cursor );
Реорганизованный код подчеркивает выполнение двух разных
действий. В первом примере недостатки организации операторов,
отсутствие пустых строк, а также старый трюк с выравниванием
знаков равенства приводили к тому, что выражения выглядели
связанными сильнее, чем на самом деле.
Второе преимущество использования пустых строк, приводящее к
улучшению кода, заключается в появлении естественного
промежутка для добавления комментариев.
В листинге 31-30 комментарии над каждым блоком станут отличным
дополнением к улучшенному формату.
732 ЧАСТЬ VII Мастерство программирования
Форматируйте блоки из одного оператора единообразно Блоком из
одного оператора называется единственный оператор, следующий
за управляющей структурой, например, оператор, который следует
за проверкой условия if. В этом случае для корректной
компиляции пара begin и end необязательна, и вы можете выбрать
один из трех вариантов стиля, показанных в листинге 31-31:
Листинг 31-31. Пример вариантов стиля для блоков из одного
Предыдущая << 1 .. 349 350 351 352 353 354 < 355 > 356 357 358 359 360 361 .. 426 >> Следующая