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

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

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

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

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

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

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 185 186 187 188 189 190 < 191 > 192 193 194 195 196 197 .. 426 >> Следующая

Вход в цикл
? Выполняется ли вход в цикл сверху?
? Расположен ли код инициализации непосредственно перед
циклом?
? Если необходим бесконечный или событийный цикл,
конструируется ли он явно, или сделан такой ляп, как for / =
1 to 9999?
? В цикле for в C++, С или Java резервируется ли заголовок
цикла только для управляющего кода?
Тело цикла
? Использует ли цикл скобки {и } или их эквиваленты для
обрамления тела цикла и предотвращения проблем, связанных с
неправильной модификацией?
? Содержит ли тело цикла хоть что-то? Не пустое ли оно?
? Сгруппированы ли служебные операции в начале или конце
цикла?
? Выполняет ли цикл одну и только одну функцию, как это делает
хорошо спроектированный метод?
? Достаточно ли цикл короткий, чтобы его можно было сразу
увидеть целиком?
? Не превышает ли вложенность цикла трех уровней?
ГЛАВА 16 Циклы 381
? Вынесено ли содержимое длинного цикла в отдельный метод?
? Если цикл достаточно длинный, написан ли он особенно ясно?
Индексы цикла
? Если это цикл for, не выполняются ли манипуляции с индексом
цикла внутри самого цикла?
? Используется ли для сохранения важных значений индекса цикла
вне этого цикла специальная переменная, а не сам индекс
цикла?
? Является ли индекс цикла порядковым или перечислимым типом,
но не типом с плавающей запятой?
? Имеет ли индекс цикла смысловое имя?
? Не содержит ли цикл пересечения индексов?
Завершение цикла
? Завершается ли цикл при всех возможных условиях?
? Использует ли цикл счетчики безопасности, если они приняты
на уровне стандарта?
? Очевидно ли условие завершения цикла?
? Если используются операторы break или continue, корректны
ли они?
Ключевые моменты
¦ Циклы сложны для понимания. Сохраняя их простыми, вы
помогаете читателям вашего кода.
¦ К способам упрощения циклов относятся: избегание
экзотических видов циклов, минимизация вложенности, создание
очевидных входов и выходов цикла и хранение служебного кода
в одном месте.
¦ Индексы цикла часто употребляются неправильно. Называйте их
понятно и используйте только с одной целью.
¦ Аккуратно продумайте весь цикл, чтобы убедиться, что он
работает правильно во всех случаях и завершается при любых
возможных обстоятельствах.
ГЛАВА 17
Нестандартные
у 1 I|jr€lt0jIMIw v I |JrуIV I jfpDI
Содержание
http://cc2e.com/1778 e луг
¦ 17.1. Множественные возвраты из метода
¦ 17.2. Рекурсия
¦ 17.3. Оператор goto
Ш 17.4. Перспективы нестандартных управляющих структур
Связанные темы
¦ Общие вопросы управления: глава 19
¦ Последовательный код: глава 14
¦ Код с условными операторами: глава 15
¦ Код с циклами: глава 16
¦ Обработка исключений: раздел 8.4
Несколько управляющих структур существует в сумрачной зоне
между передовым краем технологии и полной дискредитацией и
несостоятельностью, и часто в одно и то же время! Эти
конструкции доступны не во всех языках, но там, где они есть,
они могут быть полезны при аккуратном применении.
17.1. Множественные возвраты из метода
Большинство языков поддерживает некоторые способы возврата
управления после частичного выполнения метода. Операторы
return и exit - управляющие структуры, которые позволяют
программе при желании завершить работу метода. В результате
функция завершается через нормальный канал выхода, возвращая
управление вызывающему методу. Слово return здесь используется
как общий термин, обозначающий return в C++ и Java, Exit Sub и
Exit Function в Visual Basic и аналогичные конструкции. Далее
перечислены некоторые принципы использования оператора return.
ГЛАВА 17 Нестандартные управляющие структуры 383
Используйте return, если это повышает читабельность В неко-
торых методах при получении ответа хочется сразу вернуть
управление вызывающей стороне. Если метод определен так, что
обнаружение ошибки не требует никакой дополнительной очистки
ресурсов, то отсутствие немедленного возврата означает
необходимость писать лишний код.
Вот хороший пример ситуации, когда возврат из нескольких
частей метода имеет смысл:
Пример правильного множественного возврата из метода (C++)
Этот метод возвращает перечислимый тип Comparison.
>Comparison Compare( int valuel, int value2 ) { if ( valuel <
value2 ) {
return Comparison_LessThan;
}
else if ( valuel > value2 ) { return Comparison_GreaterThan;
}
return Comparison_Equal;
}
Другие примеры не настолько однозначны, что будет
проиллюстрировано ниже.
Упрощайте сложную обработку ошибок с помощью сторожевых опера-
торов (досрочных return или exit) Если программа вынуждена
проверять большое количество ошибочных ситуаций перед
выполнением номинальных действий, это может привести к коду
очень большой вложенности и замаскировать номинальный вариант.
Вот пример такого кода:
Код, скрывающий номинальный вариант (Visual Basic)
If file.validName() Then If file.0pen() Then
If encryptionKey.valid() Then
If file.Decrypt( encryptionKey ) Then
Здесь код номинального варианта.
1 Много кода.
End If End If End If End If
Предыдущая << 1 .. 185 186 187 188 189 190 < 191 > 192 193 194 195 196 197 .. 426 >> Следующая