П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 175057 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 72048 раз(а).

Учебник HTML.
Просмотров 72106 раз(а).

Руководство по PHP5.
Просмотров 42727 раз(а).

Хостинг через призму DNS.
Просмотров 49221 раз(а).

Подборка текстов стандартных документов.
Просмотров 43145 раз(а).

Учебник PHP - Самоучитель
Просмотров 49487 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 49749 раз(а).

Внешние атаки...
Просмотров 40275 раз(а).

Учебник PHP.
Просмотров 35309 раз(а).

SSI в примерах.
Просмотров 26581 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 2: Скалярные данные.
2.2 Скалярные операции
2.2.3 Приоритет и ассоциативность операций

Разным операциям присваивается разный приоритет Это позволяет избежать неоднозначности такого рода, когда две операции пытаются манипулировать тремя операндами. Например, что выполнять в первую очередь в выражении 2+3*4 — сложение или умножение? Если сначала выполнить сложение, мы получим 5*4, или 20. Если же сначала выполнить умножение (как нас учили на уроках математики), то мы получим 2+12, или 14. К счастью, в Perl выбран стандартный математический вариант, т.е. умножение выполняется первым. Поэтому мы говорим, что умножение имеет более высокий приоритет, чем сложение.

Порядок выполнения операций, определяемый приоритетом, можно изменить с помощью круглых скобок. Выражение, заключенное в скобки, вычисляется в первую очередь, и лишь затем выполняется операция, стоящая за скобками (так, как нас учили на уроках математики). Следовательно, если бы нам захотелось выполнить сложение до умножения, необходимо было бы записать (2+3) *4, что дало бы в результате 20. Если вы хотите напомнить, что умножение выполняется перед сложением, можете добавить "декоративные", функционально бесполезные круглые скобки: 2+ (3*4).

При выполнении операций сложения и умножения* очередность их выполнения определяется достаточно просто, но, скажем, при конкатенации строк в сочетании с возведением в степень могут возникнуть проблемы. Единственно верный путь разрешить их — обратиться к официальной, не предполагающей никаких исключений, таблице приоритетов Perl-операций. (Это табл. 2.3. Отметим, что некоторые из операций нами еще не описаны; более того, они могут так и не появиться на страницах этой книги. Пусть, однако, этот факт не отпугнет вас.) Операции, аналогичные операциям С, имеют тот же приоритет, что и в этом языке.

Таблица 2.3. Ассоциативность и приоритет операций: от высокого к низкому

Ассоциативность Операция
Слева Операции над списками (справа налево)
Слева -> (вызов метода, разыменование)
Неассоциативные ++ -- (автоинкремент, автодекремент)
Справа ** (возведение в степень)
Справа ! ~ \ + - (логическое отрицание, побитовое отрицание, операция ссылки, унарное сложение, унарное вычитание)
Слева =~ !~ (совпадает, не совпадает)
Слева * / % х (умножение, деление, деление с остатком, повторение строки)
Слева + - . (сложение, вычитание, конкатенация строк)
Неассоциативные Именованные унарные операции (например, chomp)
Слева & (побитовое И)
Слева | А(побитовое ИЛИ, побитовое исключающее ИЛИ)
Слева && (логическое И)
Слева || (логическое ИЛИ)
Неассоциативные . . ... (не включающие или включающие граничные значения диапазоны)
Справа ?: (операция выбора, if-then-else)
Справа = += -= *= и т.д. (присваивание и присваивание с вычислением)
Слева , ,> (запятая и запятая-стрелка)
Неассоциативные Операции над списками (слева направо)
Справа not (логическое НЕ)
Слева and (логическое И)
Слева or xor (логическое ИЛИ, логическое исключающее ИЛИ)

* Вы хорошо помните алгебру? Если нет, то в повсеместном использовании круглых скобок ничего предосудительного нет.

В этой таблице каждая операция имеет более высокий приоритет, чем перечисленные за ней, и более низкий приоритет, чем перечисленные перед ней.

Операции одного уровня приоритетов разрешаются в соответствии с правилами ассоциативности. Как и приоритет, ассоциативность определяет порядок выполнения операций, если две операции с одинаковым приоритетом пытаются манипулировать тремя операндами:

2 ** 3 ** 4 # 2 ** (3 ** 4) , или 2 ** 81, или около 2.41е24

72/12/3     # (72 / 12) / 3, или 6/3, или 2 

30 / 6 * 3  # (30/6) *3, или 15

В первом случае операция ** имеет ассоциативность справа, поэтому круглые скобки подразумеваются справа. Операции * и / имеют ассоциативность слева, поэтому круглые скобки подразумеваются слева.

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru