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

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

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

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

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

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

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 207 208 209 210 211 212 < 213 > 214 215 216 217 218 219 .. 426 >> Следующая

короткозамкнутое вычисление не гарантируется (Java)
if ( ( denominator != О ) & ( ( item / denominator ) >
MIN_VALUE ) ) ...
Разные языки используют разные способы вычисления, и
случается, что разработчики языка чересчур свободно обращаются
с правилами вычисления выражений, поэтому обратитесь к
руководству по вашей версии языка, чтобы выяснить, как в нем
выполняются эти операции. Еще лучше (поскольку читатель может
не обладать вашей сообразительностью) использовать вложенные
условия, проясняющие ваши намерения, и не зависеть от порядка
обработки выражений и короткозамкнутых вычислений.
Упорядочение числовых выражений в соответствии со значениями
на числовой прямой
Организуйте числовые условия так, чтобы они соответствовали
порядку точек на числовой прямой. В общем случае
структурируйте выражения так, чтобы сравнения выглядели
следующим образом:
MIN_ELEMENTS <= i and i <= MAX_ELEMENTS i < MIN_ELEMENTS or
MAX_ELEMENTS < i
Идея в том, чтобы расположить элементы по порядку слева
направо, от наименьших к наибольшим. В первой строке MIN
ELEMENTS и MAXELEMENTS - это две граничные точки, и поэтому
они расположены по краям выражения. Подразумевается, что
переменная i должна находиться между ними, и поэтому она
расположена в середине. Во втором примере вы проверяете,
находится ли i вне диапазона, поэтому i расположена по краям
условия, a MIN ELEMENTS и MAX ELEMENTS - посредине. Этот
подход позволяет легко создать визуальное представление срав-
нения (рис. 19-1):
434 ЧАСТЬ IV Операторы
MIN_ELEMENTS <= i and i <= MAX_ELEMENTS MIN_ELEMENTS
Допустимые значения для \ MAX_ELEMENTS "-Ч -imттшттттттф-

i < MIN_ELEMENTS or MAX_ELEMENTS < i
MIN_ELEMENTS



MAX_ELEMENTS
Допустимые значения для i
Рис, 19-1. Примеры упорядочения логических условий в
соответствии с числовой прямой
Если вы сравниваете значение i только с MINJZLEMENTS, то
расположение i зависит от того, каким должно быть i в случае
успешной проверки условия. Если предполагается, что i меньше,
то условие выглядит так:
while ( i < MIN.ELEMENTS ) ...
Но если i должно быть больше, вы получаете: while (
MIN.ELEMENTS < i ) ...
Этот подход более очевиден, чем такие условия, как:
( i > MIN.ELEMENTS ) and ( i < MAX_ELEMENTS )
которые не позволяют читателю визуализировать проверяемое
выражение.
Языки программирования используют 0 для нескольких целей. Это
числовое значение. Это нулевой терминатор в строке. Это пустой
указатель. Это значение первого элемента перечисления. Это
false в логических выражениях. А посему вам следует писать
такой код, чтобы конкретное назначение 0 было очевидно.
Неявно сравнивайте логические переменные Как указывалось
ранее, целесообразно писать логические выражения в виде:
while ( !done ) ...
Это неявное сравнение с 0 допустимо, потому что выполняется в
логическом выражении.
Сравнивайте числа с О Хотя в логических выражениях неявное
сравнение с О допустимо, числовые выражения следует сравнивать
явно. Для чисел пишите:
while ( balance != 0 ) ...
Общие принципы сравнения с О
а не:
while ( balance )
ГЛАВА 19 Общие вопросы управления
435
В языке С сравнивайте символы с нулевым терминатором ('\(У)
явно Символы, как и числа, не являются логическими
выражениями. Поэтому для символов следует писать:
while ( *charPtr != '\0* ) ... а не:
while ( *charPtr ) ...
Эта рекомендация расходится с широко распространенным
соглашением языка С по обработке символьных данных (так, как
показано во втором примере). Но первый способ усиливает идею,
что выражение имеет дело с символьными, а не с логическими
данными. Некоторые соглашения С не основываются на максими-
зации удобства чтения или сопровождения, и это - один из таких
примеров. К счастью, весь этот вопрос растворяется в лучах
заката, поскольку все больше кода пишется с использованием
строк C++ и STL.
Сравнивайте указатели с NULL Для указателей пишите: while (
bufferPtr != NULL ) ...
а не:
while ( bufferPtr ) ...
Как и в случае с символьными данными, эта рекомендация
расходится с устоявшимся соглашением языка С, но преимущество
в читабельности ее оправдывает.
Общие проблемы с логическими выражениями
Логические выражения содержат еще несколько ловушек,
специфичных для некоторых языков программирования:
В С-подобныхязыках, помещайте константы елевой стороны
сравнений
В С-подобных языках возникают некоторые специфические проблемы
с логическими выражениями. Если время от времени вы набираете
= вместо ==, подумайте об использовании соглашения по
размещению констант и литералов с левой стороны выражений,
например, так:
Пример размещения константы с левой стороны выражения на C++.
Это позволит компилятору обнаружить ошибку
if ( MIN.ELEMENTS = i ) ...
В этом выражении компилятор обязан объявить одиночный знак =
ошибкой, поскольку недопустимо присваивать какое-нибудь
значение константе. А в следующем выражении компилятор,
напротив, выдаст только предупреждение, и лишь в том случае,
Предыдущая << 1 .. 207 208 209 210 211 212 < 213 > 214 215 216 217 218 219 .. 426 >> Следующая