Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 4. Операции 105

Использование круглых скобок

Круглые скобки повышают старшинство операций, которые находятся внутри них. Это часто необходимо для получения желаемого результата. Например, рассмотрим следующее выражение:

а » b + 3

Это выражение сначала добавляет з к ь и затем сдвигает вправо а на полу­ченное в результате этого сложения число позиций. Данное выражение можно переписать, используя избыточные круглые скобки, например, так:

а » (Ь + 3)

Однако, если вы хотите сначала сдвинуть а право на ь позиций и затем до­бавить 3 к этому результату, вам нужно будет расставить скобки в выраже­ние следующим образом:

(а » Ь) +3

В дополнение к изменению нормального старшинства операций, круглые скобки иногда можно использовать просто для прояснения выражения. Для постороннего читателя вашего кода сложное выражение, возможно, будет трудно понять. Добавление избыточных, но что-то проясняющих круглых скобок в сложных выражениях, поможет избежать путаницы. Например, какое из следующих выражений легче для чтения?

a|4+c»b&7||b>a%3

(а I («4 + с) » Ь) & 7)) | | (Ь > (а % 3) )

С другой стороны, круглые скобки (избыточные или нет) не ухудшают эф­фективности вашей программы. Поэтому их добавление для уменьшения неоднозначности не воздействует негативно на вашу программу.

Глава 5

Управляющие операторы

Управляющие операторы используются в языках программирования для того, чтобы продвигать и разветвлять поток выполнения, основываясь на измене­ниях состояния программы. Операторы программного управления Java можно разделить на следующие категории: ветвление, повторение (итера­ция) и переход. Операторы ветвления выбирают различные пути работы программ, основываясь на результатах вычисления выражений или на со­стояниях переменных. Операторы повторения дают возможность выполнять несколько раз операторы программы (эти операторы формируют циклы). Операторы перехода позволяют выполнять программу непоследовательно: В этой главе рассматриваются все операторы управления Java.

Если вы знаете C/C++, то операторы управления вам знакомы. Операторы управления Java почти идентичны их C/C++ аналогам. Однако существует не­сколько различий, особенно в операторах continue и break.

Операторы выбора Java

Java поддерживает два оператора выбора if и switch. Эти операторы позво­ляют управлять потоком выполнения программы, основываясь на условиях, проверяемых только во время выполнения. Если ваш прошлый опыт в про­граммировании не включает C/C++, вы будете приятно удивлены мощью и гибкостью этих двух операторов.

Оператор if

Оператор if был представлен в главе 2. Здесь он рассматривается подроб­нее, if — это оператор условного перехода. Он направляет выполнение программы по двум разным маршрутам. Общая форма оператора if:

Глава 5, Управляющие операторы 107

if (condition) statement!; else statement^;

где statements— одиночный или составной (включенный в фигурные скоб­ки, т. е. в блок) оператор маршрута N (N — номер маршрута, для if он ра­вен 1 или 2); condition — любое выражение, которое возвращает значение типа boolean. Предложение else — необязательное.

Оператор if работает так: если condition имеет значение true, то выполня­ется stateznenti, Иначе — ВЫПОЛНЯСТСЯ statement^ (бСЛИ ОН Присутствует).

Оба оператора вместе не будут выполняться ни в коем случае. Например, рассмотрим следующий фрагмент:

int a, b;

// ...

if (а < Ь) а = 0;

else b = 0;

Здесь, если а меньше, чем ь, то а устанавливается в нуль, иначе — ь устанав­ливается в нуль. Обе переменные сразу в нуль никогда не устанавливаются.

Чаще всего для управления оператором if используется выражение, вклю­чающее операции отношений. Однако в этом нет технической необходимо­сти. Можно управлять оператором if, используя одиночную boolean пере­менную, как показано в следующем кодовом фрагменте:

boolean dataAvailable;

//....

if (dataAvailable)

ProcessData(); else

waitForMoreData(); '

Помните, что только один оператор может появляться сразу после if или else. Если нужно включить в ветви большее количество операторов, то сле­дует создать блок, как сделано, например, в следующем фрагменте:

int bytesAvailable;

//....

if (bytesAvailable > 0) {

ProcessData ();

bytesAvailable -= n;

} else

waitF.orMoreData () ;

Здесь будут выполняться оба оператора в блоке if, если bytesAvailable больше нуля.

108 Часть I. Язык Java

Некоторые программисты находят удобным включать фигурные скобки в каждую ветвь оператора if, даже когда там имеется только один оператор. Это облегчает последующее добавление других операторов в ветви if, и не нужно волноваться относительно пропуска фигурных скобок. Действитель­но, их пропуск при определении блока, когда они необходимы, — обычная причина ошибок. Например, рассмотрим следующий кодовый фрагмент:

int bytesAvailable;

// ...

if (bytesAvailable > 0) {

ProcessData();

bytesAvailable -= n;

} .

else

waitForMoreData() ;

bytesAvailable = n;

Кажется ясно, что, судя по уровню отступа, оператор bytesAvailable = п,-предназначался для выполнения внутри предложения else. Однако, как вы помните, пробелы незначимы для Java, и у компилятора нет никакого спо­соба распознать ваши намерения. Этот код будет скомпилирован без преду­преждений, но во время выполнения будет вести себя неправильно. Пред­шествующий пример исправляется так:

int bytesAvailable;

// . . .

if (bytesAvailable > 0) {

ProcessData();

bytesAvailable -= n;

) else {

waitForMoreData();

bytesAvailable = n;

}

Здесь всего-навсего вставлены пропущенные блочные скобки. Вложенные if

Вложенный if — это оператор if, который размещен внутри другого if- или else-оператора. Вложение if — обычный прием в программировании. Когда вы вкладываете if, нужно помнить, что оператор else всегда относится к самому близкому оператору if, который находится в том же блоке, что и else. Например:

if(i == 10} {

if (j < 20) а = b;

Соседние файлы в папке JavaLit