Приоритеты и ассоциативность операций
Очередность выполнения операций в выражении определяется их приоритетами и ассоциативностью, но она может быть изменена с помощью скобок. Приоритет определяет порядок вычисления операций в выражении: операции с более высоким приоритетом вычисляются раньше. Например, приоритет у операций умножения и деления выше, чем у сложения и вычитания. Ассоциативность определяет порядок вычислений, если в выражении используются операции с одинаковыми приоритетами. Операции с ассоциативностью слева вычисляются обычным образом, слева направо. Но из двух операций, имеющих ассоциативность справа, первой вычисляется стоящая справа. Например:
$a ** $b ** $c # ассоциативность справа, т.е. $a**($b**$c) $a * $b / $c # ассоциативность слева, т.е. ($a * $b) / $c $a && $b && $c # ассоциативность слева, т.е. ($a && $b) && $c $a = $b = $c # ассоциативность справа, т.е. $a = ($b = $c) $a | $b ^ $c # ассоциативность слева, т.е. ($a | $b) ^ $c
В таблице 3.2 приводится полный список операций, перечисленных в порядке убывания приоритетов, с указанием их ассоциативности. В этой таблице даны все операции языка Perl, в том числе и не рассмотренные в этой лекции. Многие из них будут изучены в следующих лекциях.
Слева | 24 | термы и операции над списками (справа налево) |
Слева | 24 | -> (вызов метода, разыменование) |
Не ассоциативные | 22 | ++ -- (автоинкремент, автодекремент) |
Справа | 21 | ** (возведение в степень) |
Справа | 20 | ! ~ \ + - (логическое НЕ, побитовое отрицание, операция ссылки, унарный плюс, унарный минус) |
Слева | 19 | =~ !~ (привязка к шаблону: совпадение, несовпадение) |
Слева | 18 | * / % х (умножение, деление, деление по модулю, повторение строки) |
Слева | 17 | + - . (сложение, вычитание, конкатенация строк) |
Слева | 16 | << >> (побитовый сдвиг влево или вправо) |
Не ассоциативные | 15 | именованные унарные операции и операции над файлами |
Не ассоциативные | 14 | < > <= >= lt gt le ge (меньше, больше, меньше или равно, больше или равно и их строковые эквиваленты) |
Не ассоциативные | 13 | == != <=> eq ne cmp (равно, не равно, сравнение и их строковые эквиваленты) |
Слева | 12 | & (побитовое И) |
Слева | 11 | | ^ (побитовое ИЛИ, побитовое исключающее ИЛИ) |
Слева | 10 | && (логическое И) |
Слева | 9 | || (логическое ИЛИ) |
Не ассоциативные | 8 | .. ... (не включающие или включающие граничные значения диапазоны) |
Справа | 7 | ?: (операция выбора или условная операция) |
Справа | 6 | = += -= *= и т. д. (присваивание и присваивание с вычислением) |
Слева | 5 | , => (запятая и запятая-стрелка) |
Не ассоциативные | 4 | операции над списками (слева направо) |
Справа | 3 | not (логическое НЕ) |
Слева | 2 | and (логическое И) |
Слева | 1 | or xor (логическое ИЛИ, логическое исключающее ИЛИ) |
В Perl имеется большое количество операций, в том числе и весьма экзотических. Поэтому, если возникает сомнение в порядке их вычислений, то всегда можно использовать скобки для управления очередностью вычислений в выражении.
Понимание изложенного в этой лекции материала о скалярных операциях совершенно необходимо для разработки программ на Perl, хотя запоминать все приведенные здесь операции совершенно излишне. Операции и выражения являются основой для освоения материала о синтаксических правилах языка Perl, о которых пойдет речь в следующей лекции.
В Perl имеется большое количество операций, в том числе и весьма экзотических. Поэтому, если возникает сомнение в порядке их вычислений, то всегда можно использовать скобки для управления очередностью вычислений в выражении.
Понимание изложенного в этой лекции материала о скалярных операциях совершенно необходимо для разработки программ на Perl, хотя запоминать все приведенные здесь операции совершенно излишне. Операции и выражения являются основой для освоения материала о синтаксических правилах языка Perl, о которых пойдет речь в следующей лекции.
© 2003-2007 INTUIT.ru. Все права защищены. |