АБОБА. Справочник по программированию на Java Методическое пособие
Скачать 242.41 Kb.
|
Замыкающие логические операцииJava предоставляет две интересные булевских операции, не встречающиеся во многих других языках программирования. Это вторые версии булевских операций AND и OR, получившие название замыкающих логических операций. Как видно из ранее приведенной таблицы, результат выполнения операции OR равен true, когда значение операнда A равно true, независимо от значения операнда B. Аналогично, результат выполнения операции AND равен false, когда значение операнда A равно false, независимо от значения операнда B. При использовании форм || и && этих операций вместо | и & программа Java не будет вычислять значение правого операнда, если результат выражения можно определить по значению одного левого операнда. Это свойство очень удобно в тех случаях, когда значение правого операнда зависит от значения левого. Например, следующий фрагмент кода демонстрирует преимущество применения замыкающей логической операций для выяснения допустимости операции деления перед вычислением ее результата: if (denom != 0 && num / denom > 10) Благодаря применению замыкающей формы операции AND (&&) исключается риск возникновения исключения времени выполнения в случае равенства знаменателя (denom) нулю. Если бы эта строка кода была записана с применением одинарного символа & операции AND, программа вычисляла бы обе части выражения, что приводило бы к исключению времени выполнения при равенстве значения denom нулю. Замыкающие формы операций AND и OR принято применять в тех случаях, когда требуется использование операций булевской логики, а односимвольные версии – исключительно для побитовых операций. Однако существуют исключения из этого правила. Например, рассмотрим следующий оператор: if(c==1 & e++ < 100) d = 100; В данном случае одиночный символ & гарантирует применение операции инкремента к значению e независимо от равенства 1 значения c. Операция присваиванияМы использовали операцию присваивания, начиная с главы 2. Теперь пора рассмотреть эту операцию формально. Символом операции присваивания служит одиночный знак равенства, =. В Java операция присваивания работает аналогично тому, как она работает во многих компьютерных языках. Она имеет следующую общую форму: переменная = выражение; В этом операторе тип переменной должен соответствовать типу выражения. Операция присваивания обладает одной интересной особенностью, с которой вы, возможно, еще не знакомы: она позволяет создавать цепочки присваиваний. Например, рассмотрим следующий фрагмент кода: int x, y, z; x = y = z = 100; В этом фрагменте кода единственный оператор устанавливает значения трех переменных x, y и z равными 100. Это обусловлено тем, что = – операция, которая использует значение правого выражения. Таким образом, значение выражения z=100 равно 100, которое затем присваивается переменной y, а затем – переменной x. Использование “цепочки присваивания” – удобный способ установки общего значения группы переменных. Операция ?Синтаксис Java содержит специальную тернарную операцию, которой можно заменять определенные типы операторов if-then-else. Это операция ?. Вначале она может казаться несколько непонятной, но со временем вы убедитесь в ее исключительной эффективности. Эта операция имеет следующую общую форму: выражение1 ? выражение2 : выражение3 Здесь выражение1 – любое выражение, приводящее к значению типа boolean. Если значение выражения1 – true, программа вычисляет значение выражения2. В противном случае программа вычисляет значение выражения3. Результат выполнения операции ? равен значению вычисленного выражения. И выражение2, и выражение3 должны возвращать значение одного и того же типа, которым не может быть тип void. Следующий пример программы демонстрирует применение операции ?. Эта программа служит для получения абсолютного значения переменной. // Демонстрация использования операции ?. class Ternary { public static void main(String args[]) { int i, k; i = 10; k = i < 0 ? -i : i; // получение абсолютного значения переменной i System.out.print("Абсолютное значение "); System.out.println(i + " равно " + k); i = -10; k = i < 0 ? -i : i; // получение абсолютного значения переменной i System.out.print("Абсолютное значение "); System.out.println(i + " равно " + k); } } Эта программа генерирует следующий вывод: Абсолютное значение 10 равно 10 Абсолютное значение -10 равно 10 |