Совершенный код. Мастер-класс - Макконнелл С.
ISBN: 5-469-00822-3
Скачать (прямая ссылка):


ГЛАВА 14 Организация последовательного кода
343
первым и последним своим упоминанием. Иначе говоря, вам
придется просмотреть и осмыслить каждую строку кода в этом
фрагменте, чтобы выяснить, как вычисляется marketingData. И,
разумеется, этот пример гораздо проще, чем код, встречающийся
в реальных системах. Вот тот же код, но лучше организованный:
Пример хорошего, последовательного кода, который читается
сверху вниз (C++)
MarketingData marketingData; marketingData.ComputeQuarterly();
marketingData.ComputeAnnual(); marketingData.Print();
SalesData salesData; salesData.ComputeQuarterly();
salesData.ComputeAnnual(); salesData.Print();
TravelData travelData; travelData.ComputeQuarterly();
travelData.ComputeAnnual(); travelData.Print();
Этот код лучше по нескольким причинам. Упоминания каждой
переменной располагаются вместе - они "локализованы". Число
строк кода, в которых объекты являются "живыми", невелико. И,
возможно, самое важное: код теперь выглядит так, что его можно
разбить на отдельные методы для данных по маркетингу, продажам
и поездкам. Первый фрагмент не содержал подсказки, что эта
декомпозиция возможна.
Группировка взаимосвязанных выражений
Размещайте взаимосвязанные выражения вместе. Они могут быть
связаны, так как работают с одними и теми же данными,
выполняют схожие задачи или зависят от порядка выполнения друг
друга.
Есть простой способ убедиться, что взаимосвязанные выражения
хорошо сгруппированы. Распечатайте текст вашего метода и
обведите рамкой взаимосвязанные выражения. Если они хорошо
упорядочены, вы получите картинку, похожую на рис. 14-1, где
рамки не перекрываются.
Перекрестная ссылка Если вы придерживаетесь Процесса Про-
граммирования с Псевдокодом, ваш щ бэдет автоматически груп-
пироваться в блоки взаимосшш+* ных выражений (см. главу 9).
Перекрестная сшяка Более формальное определение "живых"
переменных см. в подразделе "Измерение времени жизни
переменной" раздела 1D.4.
344 ЧАСТЬ IV Операторы
Рис. 14-1. Если код хорошо организован в группы, то рамки
вокруг взаимосвязанных разделов не перекрываются; они могут
быть вложенными
Перекрестная гшгм 06 обье- Если выРажения 1140X0 организованы, вы
получите картинку,
дикении операций над перемен- похожую на рис. 14-2, где рамки
перекрываются. Если выяснится,
иыт см. раздел 10.4. что перекрытие происходит,
реорганизуйте ваш код, чтобы
взаимосвязанные выражения были лучше сгруппированы.
Рис. 14-2. Если код организован неудачно, то рамки вокруг
связанных разделов пересекаются
После того, как вы сгруппируете взаимосвязанные выражения,
может выясниться, что они сильно связаны между собой, а к
предшествующему и последующему коду не имеют значимого
отношения. В этом случае, возможно, следует выделить эти
выражения в отдельный метод.
1 Контрольный список: организация
http://cc2e.com/i472 последовательного кода
? Способствует ли код выявлению зависимостей
между
выражениями?
? Способствуют ли имена методов выявлению зависимостей?
? Способствуют ли параметры методов выявлению зависимостей?
? Описывают ли комментарии такие зависимости, которые иначе не
будут явными?
? Используются ли вспомогательные переменные для проверки
последовательных действий в критических частях кода?
? Возможно ли прочтение кода сверху вниз?
? Сгруппированы ли вместе взаимосвязанные выражения?
? Перенесены ли относительно независимые группы выражений в
отдельные методы?
ГЛАВА 14 Организация последовательного кода 345
Ключевые моменты
¦ Главный принцип организации последовательного кода -
упорядочение зависимостей.
¦ Зависимости должны быть сделаны явными с помощью хороших
имен методов, списков параметров, комментариев и - если
последовательность кода достаточно критична - с помощью
вспомогательных переменных.
¦ Если порядковые зависимости в коде отсутствуют, старайтесь
размещать взаимосвязанные выражения как можно ближе друг к
другу.
ГЛАВА 15
Vr flHRMklA ППАПЯТАПк!
# IVrBrlla#l 1 JJrD!
http://cc2e.com/1538
Содержание
¦ 15.1. Операторы if
¦ 15.2. Операторы case
Связанные темы
¦ Укрощение глубокой вложенности: раздел 19 4
¦ Общие вопросы управления: глава 19
¦ Код с операторами цикла: глава 16
¦ Последовательный код: глава 14
¦ Отношения между типами данных и управляющими структурами:
раздел 10.7
Условный оператор управляет выполнением других операторов. Их
выполнение "обусловливают" такие операторы, как if, else, case
и switch. Хотя операторы цикла, например while и for, по
смыслу тоже можно отнести к условным, обычно их рассматривают
отдельно. Операторы while и for мы обсудим в главе 16.
15.1. Операторы if
В зависимости от выбранного языка программирования вы можете
использовать несколько видов ^-операторов. Простейшие из них -
if или if-then. Оператор if- then-else немного сложнее, а
наибольшую сложность представляют последовательности if-then-
else-if.
Простые операторы if-then
Следуйте этим правилам при написании if-выражений.


