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

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

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

Первое, чем отличаются эти циклы друг от друга, - это гибкость
в определении числа итераций: выполняется ли цикл указанное
количество раз или проверяет необходимость завершения на
каждом шаге.
Кроме того, эти варианты отличаются расположением проверки
завершения. Вы можете поместить проверку в начало, середину
или конец цикла. Эта характеристика определяет, будет ли цикл
выполняться хоть раз. Если условие цикла проверяется в начале,
то его тело не обязательно будет выполняться. Если цикл про-
веряется в конце, то его тело выполняется минимум один раз.
Если же проверка находится в середине, то часть цикла,
предшествующая ей, выполняется не менее раза, а код, следующий
за проверкой, не обязательно будет выполняться.
Гибкость и расположение проверки условия определяют тип цикла,
выбираемый в качестве управляющей структуры. В табл. 16-1
показаны разновидности циклов в нескольких языках
программирования и характеризуются их гибкость и расположение
проверки.
Табл. 16-1. Типы циклов
Язык
Тип цикла
Гибкость
Место проверки
Visual
Basic
For-Next
Нет
Начало

While-Wend
Да
Начало

Do-Loop-
While
Да
Начало или конец

For-Each
Нет
Начало
С, C++,
С#, Java
for
Да
Начало

while
Да
Начало

do-while
Да
Конец

foreach1
Нет
Начало
Когда использовать цикл while
Новички иногда считают, что условие цикла while проверяется
постоянно и цикл завершается в тот момент, когда это условие
становится ложным, независимо от того, какой оператор в это
время выполняется (Curtis et al, 1986). Хотя цикл while и не
столь гибок, он все же является гибким вариантом цикла. Если
вы заранее не знаете, сколько итераций должен выполнить цикл,
используйте while. Вопреки тому что думают новички, проверка
выхода из цикла выполняется только раз за итерацию, и главным
вопросом в отношении циклов while является выбор места этой
проверки - в начале или конце цикла.
1 Реализован только в С#. На момент написания книги планируется
в других языках, включая Java.
ГЛАВА 16 Циклы 361
Цикл с проверкой в начале
В качестве цикла с проверкой в начале вы можете использовать
цикл while в языках C++, С#, Java, Visual Basic и многих
других. Вы также можете эмулировать цикл while в других
языках.
Цикл с проверкой в конце
Время от времени вам требуется гибкий цикл, который должен
выполняться хотя бы раз. В этом случае можно применить while с
проверкой условия в конце цикла. Вы можете использовать
варианты do-while в C++, С# и Java, Do-Loop-While BVisual Basic
или эмулировать циклы с проверкой в конце в других языках
Когда использовать цикл с выходом
В цикле с выходом условие выхода содержится внутри тела цикла,
а не в его начале или конце. Циклы с выходом реализованы
исключительно в Visual Basic, но вы можете эмулировать их,
используя структурированные конструкции while и break в C++, С
и Java или операторы goto в других языках.
Нормальные циклы с выходом
Цикл с выходом обычно состоит из начала цикла, тела цикла
(включая условие выхода) и конца цикла:
Пример обычного цикла с выходом (Visual Basic)
Do
|-Операторы.
If ( some exit condition ) Then Exit Do г- Еще операторы.
Loop
Обычно цикл с выходом нужен, когда проверка условия в начале
или конце цикла требует кодирования полутора циклов. Вот
пример на C++, в котором нужен цикл с выходом, но он не
используется:
Пример дублированного кода, который подвержен ошибкам при
сопровождении (C++)
// Вычисляем счет и рейтинги, score = 0;
- Эти строки появляются здесь...
*->TGetNextRating( &ratinglncrement );
Lrating = rating + ratinglncrement; while ( ( score <
targetScore ) && ( ratinglncrement != 0 ) ) {
GetNextScore( &scoreIncrement ); score = score +
scorelncrement;
362 ЧАСТЬ IV Операторы
С
.и повторяются здесь.
GetNextRating( &ratinglncrement ); rating = rating +
ratinglncrement;
Первые две строки в начале примера повторяются в последних
двух строках цикла while. При модификации вы легко можете
забыть о поддержании двух параллельных наборов строк. Другой
программист, изменяющий код, возможно, и не догадается, что
эти строки должны сохраняться одинаковыми. В любом случае
результатом будут ошибки, возникшие из-за неполной
модификации. Вот как можно переписать код более ясно:
Пример цикла с выходом, более легкого в сопровождении (C++)
// Вычисляем счет и рейтинги. Этот код использует бесконечный
цикл // и оператор break для имитации цикла с выходом, score =
0; while ( true ) {
GetNextRating( &ratinglncrement ); rating = rating +
ratinglncrement;
- Это условие выхода из цикла (и теперь оно может быть
упрощено с помощью теорем ДеМоргана, описанных в разделе
19.1).
-> if ( ! ( ( score < targetScore ) && ( ratinglncrement != 0
) ) ) { break;
}
GetNextScore( &scoreIncrement ); score = score +
scorelncrement;
}
Вот как тот же код можно написать на Visual Basic:
Пример цикла с выходом (Visual Basic)
' Вычисляем счет и рейтинги, score = 0 Do
GetNextRating( ratinglncrement ) rating = rating +
Предыдущая << 1 .. 176 177 178 179 180 181 < 182 > 183 184 185 186 187 188 .. 426 >> Следующая