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

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

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

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

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

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

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

ошибки потери единицы. Если цикл содержит какие-то специальные
случаи, выполнение которых отличается от первой или последней
итерации, проверьте их тоже. Если цикл производит сложные
вычисления, достаньте свой калькулятор и проверьте их вручную.
Готовность выполнять такой вид проверки - ключевое различие
между квалифицированными и неквалифицированными
программистами. Первые проделывают мысленное моделирование и
вычисления вручную, потому что знают, что эти меры помогут им
найти ошибки.
Вторые имеют склонность к случайному экспериментированию, пока
не найдут правдоподобную комбинацию. Если цикл не работает
так, как предполагалось, неумелый программист меняет знак < на
<=. Если и это не помогает, он исправляет индекс цикла,
добавляя или вычитая 1. В конечном счете таким способом
программист может нащупать правильную комбинацию или просто
заменить изначальную ошибку более незаметной. Даже если этот
случайный процесс приведет к правильной программе, программист
не будет знать, почему она работает корректно.
Мысленное моделирование и ручные вычисления могут дать
несколько преимуществ. Умственная тренировка приводит к
меньшему количеству ошибок при первоначальном кодировании,
более быстрому обнаружению проблем при отладке и в целом более
полному пониманию программы. Умственные упражнения означают,
что вы знаете, как работает код, а не просто предполагаете
это.
Использование переменных цикла
Далее описаны некоторые принципы применения переменных цикла.
Псрадшетд* ссылка Об тт о- Используйте порядковые или
перечислимые типы для
юнии переменных цикла см. границ массивов и циклов Обычно
счетчики циклов
шщшдея "Ймшшт иняак- должны быть целыми значениями. Числа с
плавающей за-
соа циклов" раздела 112, пятой плохо инкрементируются.
Например, вы можете при
бавить 1,0 к 26 742 897,0 и получить 26 742 897,0 вместо 26
742 898,0. Если это число используется как индекс цикла, вы
получите бесконечный цикл.

ГЛАВА 16 Циклы 375
Используйте смысловые имена переменных, чтобы сделать вло-
женные циклы читабельными Массивы часто индексируются с по-
мощью тех же переменных, что используются как индексы цикла.
Если у вас одномерный массив, то вы еще сможете выйти сухим их
воды, применяя /, j или k для его индексации. Но если у
массива два и более измерений, вам следует задавать значимые
имена для индексов, чтобы прояснить свои действия. Смысловые
имена индексов массивов одновременно уточняют и назначение
цикла, и элемент массива, к которому вы планируете обратиться.
Вот пример кода, который не применяет этот принцип: в нем
использованы бессмысленные имена ij и k\
Ш Пример неправильных имен переменных цикла (Java)
for ( int i = 0; i < numPayCodes; i++ ) { for ( int j = 0; j <
12; j++ ) {
for ( int k = 0; k < numDivisions; k++ ) { sum = sum +
transaction[ j ][ i ][ k ];
}
}
Как вы думаете, что означают индексы в элементе transaction?.
Сообщают ли переменные ij и k что-либо о содержимом
transaction? Если вы знаете объявление transaction, можете ли
вы легко определить, указаны ли индексы в правильном порядке?
Вот тот же цикл с более читабельными именами переменных:
Пример хороших имен переменных цикла на Java
for ( int payCodeldx = 0; payCodeldx < numPayCodes;
payCodeIdx++ ) { for (int month = 0; month < 12; month++ ) {
for ( int divisionldx = 0; divisionldx < numDivisions;
divisionIdx++ ) { sum = sum + transaction[ month ][
payCodeldx ][ divisionldx ];
Как вы думаете, что означают индексы в элементе transaction на
этот раз? В этом случае ответ получить проще, потому что имена
переменных payCodeldx, month и divisionldx гораздо
красноречивее, чем /, j и k. Компьютер с одинаковой легкостью
прочитает обе версии цикла. Однако людям легче будет читать
вторую версию, чем первую, поэтому второй вариант лучше,
поскольку ваша основная аудитория состоит из людей, а не из
компьютеров.
Используйте смысловые имена во избежание пересечения индексов
Привычное использование переменных /, j и k приводит к
увеличению риска пересечения индексов - использованию одного и
того же имени индекса для разных целей. Взгляните:
376 ЧАСТЬ IV Операторы

Пример пересечения индексов (C++)
/ сначала используется здесь...
for ( i = 0; i < numPayCodes; i++ ) { // много кода
for ( j = 0; j < 12; j++ ) {
// много кода
...а теперь здесь
Применение i настолько привычно, что эта переменная
используется в одной вложенной структуре дважды. Второй цикл
for, управляемый /, конфликтует с первым - это и есть
пересечение индексов. Применение более значимых имен, чем /, j
и k, предотвратило бы проблему. Вообще, если тело цикла
содержит больше пары строк кода, или может вырасти, или входит
в группу вложенных циклов, избегайте переменных i,j и k.
Ограничивайте видимость переменных-индексов цикла самим циклом
Пересечение индексов цикла и другое применение индексов вне
самих циклов - настолько важная проблема, что разработчики
Предыдущая << 1 .. 182 183 184 185 186 187 < 188 > 189 190 191 192 193 194 .. 426 >> Следующая