Опрос

Что такое, по вашему мнению, «демократия»?













Логические операторы

15.01.2010 11:44 Администратор
Печать PDF
Рейтинг пользователей: / 1
ХудшийЛучший 

Иногда возникает желание сравнить более двух переменных, после чего выполнить то или иное действие. Например: float $result = 2.9; float $worldRecord = 2.87; float $firstPlace = 2.9; float $personalBest = 2.8; if( $result == $firstPlace && $result > $worldRecord ) print "Winner and beat world record"; // "Стал победителем и побыл мировой рекордif( $result< $firstplace && $result >$personalBest ) print "Lost race but beat personal best"; // "Проиграл гонку, но установил новый личный рекордПользуясь логическими операторами, вы можете комбинировать несколько операций сравнения и выполнять определенные действия. Полный список логических операторов представлен в табл. 3.4. При использовании оператора или (| |) результат является истинным, если а или Ь имеет истинное значение; в противном случае результат является ложным. Это продемонстрировано на примере: int $a = 10; int $b = 12; rf( $a > 31| $b > 5) // true или true = true print "yes"; // Будет выведено на экран if ( $а = 51| $Ь = 12) //false или true = true print "yes"; // Будет выведено на экран if( $a == 3 || $b == 2 ) // false или false = false print "yes"; // He будет выведено на экран При использовании оператора и (&&) результат является истинным лишь тогда, когда а и Ъ имеют истинное значение; в противном случае результат является ложным. int $a = 10; int $b = 12; if( $a == 10 && $b == 12 ) // true и true = true print "yes"; // Будет выведено на экран if( $a == 10 && $b == 2 ) // true и false = false print "yes"; // He будет выведено на экран if( $a == 3 && $b == 2 ) // false и false = false print "yes"; // He будет выведено на экран Оператор не (!) инвертирует результат сравнения. Если результат был истинным, он становится ложным, и наоборот. Проанализируйте следующий код: int $a = 10; int $b = 12; // Сравнение дает истинный результат, однако "не" (!) // "переворачивает" значение, и оно становится ложным if( !($а == 10 && $Ь == 12) ) print "no"; // Не будет выведено никогда // Сравнение дает ложный результат, однако "не" (!) // "переворачивает" значение, и оно становится истинным if( !($a > 10) ) print "a is not greater than 10"; // Будет выведено на экран // "а не больше 10Два следующих оператора эквивалентны, int $а = 0; if( $а == 0 ) print "a is false"; // "а ложно// Оператор "не" 0) "переворачивает" логически значение $а // Результатом инверсии 0 становится 1, т. е. истина if( !$а ) print "a is false"; Приоритет операторов Понимать степень приоритета конкретного оператора очень важно. Незнание порядка, в котором происходит вычисление значения выражения, может приводить к непонятным ошибкам. Код кажется правильным и работает просто замечательно, однако конечный результат оказывается неверным. Часто причина заключается в неверном истолковании порядка, в котором производится вычисление операторов. Рассмотрим следующий пример кода, int $а = 10 + 2 * 5; Из математики вы знаете, что операция умножения должна выполняться раньше' операции сложения, поэтому результат равен 20. Если бы умножение не имело приоритета относительно сложения, то результат составил бы 60. Приоритет оператора определяет то, выполняется ли он до или после другого оператора, т. е. от приоритета зависит порядок вычисления выражения. Хотя большинству пользователей хорошо известно старшинство арифметических операторов, это не относится к другим конструкциям языка MEL. Какой приоритет имеют следующие операторы, иначе говоря, каков порядок их вычисления? Sheight > 2 | ] $width == 1 Не зная приоритетов, вы, скорее всего, стали бы вычислять эти операторы слева направо в порядке их появления. Пользуясь скобками для группировки, запишем в итоге: (<($height >2) || $width) == 1) Это может не привести к желаемому результату. В действительности, оператор > имеет более высокий приоритет, поэтому он вычисляется первым. Следом идет оператор равенства ==, за которым следует оператор или 11, что означает следующую группировку операторов; (C$height > 2) || ($width == 1)) Полный перечень операторов и их приоритетов приведен в табл. 3.5. Первыми перечислены операторы с самым высоким приоритетом, далее - менее приоритетные операторы. Там, где в одном предложении встречаются операторы с равным приоритетом, они группируются слева направо в порядке их появления. Например, сложение и вычитание имеют одинаковый приоритет и потому в следующем коде выполняются слева направо. int $а = 2 - 3 + 4; // Результат 3 Не исключено, что в некоторых ситуациях вам придется подменять приоритет оператора, принятый по умолчанию. Для этого служит оператор группировки (). Как и в математике, он имеет наиболее высокий приоритет и, таким образом, доминирует над приоритетом любого другого оператора. В ранее приведенном коде оператор группировки может, к примеру, использоваться для того, чтобы обеспечить выполнение сложения прежде, чем вычитания. int $а = 2 - (3 + 4); // Результат -5 Сомневаясь относительно приоритета оператора, всегда используйте оператор группировки, чтобы явно указать желаемый порядок вычисления выражения. Кроме того, оператор группировки поможет вам четко передать свои намерения тем, кто будет читать ваш код. Оператор группировки можно использовать для обеспечения полного вычисления выражения до его передачи команде. Следующие операторы приводят к синтаксической ошибке, int $a = 2; int $b = 1; print $a + $b; // Error: print $a + $b; // // Error: Line 4.10: Syntax error // // Ошибка: Строка 4.10: Синтаксическая ошибка // Причина ошибки заключается в том, что последний оператор фактически вычисляется так: (print $а) + $Ь; Maya пытается прибавить к переменной $Ь результат выполнения команды print. Очевидно, что такой исход не предполагался. Чтобы явным образом выразить свои намерения, воспользуйтесь оператором группировки. print ($а + $Ь);

Добавить комментарий


Защитный код
Обновить

Поиск

В закладку

 
 

Авторизация



Погода