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

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

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

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

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

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

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

}
Преимущество цикла for в языке C++ по сравнению с другими
языками состоит в его большей гибкости по отношению к
информации, которую он может использовать для инициализации и
завершения. Недостатком такой гибкости является возможность
помещения в заголовок цикла выражений, не имеющих ничего об-
щего с управлением циклом.
Зарезервируйте заголовок цикла for для выражений, управляющих
циклом: выполняющих инициализацию, завершение и движение к
завершению. В приведенном примере выражение
inputFile.GetRecordQ в теле цикла продвигает цикл в сторону
завершения, а выражения recordCount - нет; это вспомогательные
выражения, не управляющие циклом. Размещение recordCount в
заголовке цикла, a inputFile.Get- RecordO - вне его создает
путаницу и фальшивое впечатление, что recordCount управляет
циклом.
Если в данном случае вы хотите использовать цикл for, а не
while, поместите управляющие выражения в заголовок, а все
остальные из него уберите. Вот правильный способ использования
заголовка цикла:
Пример логичного, хоть и нетрадиционного использования
заголовка цикла for (C++)
recordCount = 0;
for ( inputFile.MoveToStart(); !inputFile.EndOfFile();
inputFile.GetRecord() ) { recordCount++;
}
Все содержимое заголовка цикла в этом примере относится к
управлению циклом. Выражение inputFileMoveToStartO
инициализирует цикл, выражение HnputFile- FndOfFileQ проверяет
его завершение, a inputFile.GetRecordQ продвигает цикл в
сторону завершения. Выражения, относящиеся к recordCount, не
продвигают цикл в сторону завершения напрямую и поэтому вполне
уместно не включены в заголовок цикла. Возможно, цикл while
все же больше подходит для этой работы, но этот код по крайней
мере логично использует заголовок цикла. Для галочки покажем,
как будет выглядеть этот код при использовании цикла while:
Пример соответствующего использования цикла while (C++)
// Чтение всех записей из файла. inputFile.MoveToStart();
recordCount = 0;
while ( !inputFile.EndOfFile() ) { inputFile.GetRecord();
recordCount++;
368 ЧАСТЬ IV Операторы
Обработка середины цикла
Следующие подразделы описывают обработку середины цикла:
Используйте {и} для обрамления выражений в цикле Всегда
используйте скобки. Они ничего не стоят в плане скорости или
размера во время выполнения, но повышают читабельность и
предотвращают ошибки при изменении кода. Это хорошая практика
защитного программирования.
Избегайте пустых циклов В C++ и Java возможно создание пустого
цикла, все действия которого закодированы в той же строке, что
и проверка выхода из цикла. Вот пример:
Пример пустого цикла (C++)
while ( ( inputChar = dataFile.GetChar() ) != CharType_Eof ) {
}
Здесь тело цикла пустое, потому что само выражение while
делает две вещи: выполняет циклические действия (inputChar =
dataFile.GetChar0) и проверяет, завершить ли работу цикла
(inputChar != CharTypeEof). Цикл будет яснее, если его пе-
рекодировать так, чтобы его работа была более очевидной
читателю:
Пример пустого цикла, преобразованного в полноценный цикл
(C++)
do {
inputChar = dataFile.GetChar();
} while ( inputChar != CharType_Eof );
Новый код занимает три полных строки по сравнению с одной
строкой и точкой с запятой. Но это допустимо, так как он и
выполняет работу для трех строк, а не для одной.
Располагайте служебные операции либо в начале, либо в конце
цикла
Служебные операции цикла - это выражения вроде i = i + 1 или
/++, чье основное назначение не выполнять работу в цикле, а
управлять циклом. В этом примере показаны служебные действия,
выполняемые в конце цикла:
Пример служебных выражений, расположенных в конце цикла (C++)
nameCount = 0; totalLength = 0;
while ( !inputFile.EndOfFile() ) {
// Выполняем работу цикла inputFile " inputString; names[
nameCount ] = inputString;
// Готовимся к следующей итерации цикла - служебные
действия. Вот служебные операторы.
nameCount++;
totalLength = totalLength + inputString.length();
}
ГЛАВА 16 Циклы 369
Как правило, переменные, которые вы инициализируете перед
циклом, и есть те переменные, которыми вы манипулируете в
служебной части цикла.
Заставьте каждый цикл выполнять только одну Щщщш есыяка 00
ояти- функцию Простой факт, что цикл может использоваться
мшцйи см, гтт 25 * Ш, для выполнения двух дел одновременно, -
недостаточное
оправдание для их совмещения. Циклы должны быть подобны
методам в том плане, что каждый должен делать только одно дело
и делать его хорошо. Если использование двух циклов, когда
хватит и одного, кажется неэффективным, напишите код в виде
двух циклов, прокомментируйте, что их можно объединить для
эффективности, и дождитесь, пока тесты оценки
производительности покажут проблему в этом месте. Только после
этого объединяйте два цикла в один.
Завершение цикла
Следующие подразделы описывают обработку конца цикла.
Убедитесь, что выполнение цикла закончилось Это основной
принцип. Мысленно моделируйте выполнение цикла до тех пор,
Предыдущая << 1 .. 179 180 181 182 183 184 < 185 > 186 187 188 189 190 191 .. 426 >> Следующая