Сочетательность операцийМы уже разобрались, в какой последовательности будут выполняться операции в выражениях, если приоритет операторов различен. Но как будут выполняться выражения, если содержащиеся в них операторы имеют одинаковый приоритет? Например, какое вычисление будет произведено первым в выражении а+b+с?Чтобы ответить на этот вопрос, необходимо знать такую характеристику операторов, как сочетательность (или ассоциативность). Сочетательность можно определить как направление, в котором выполняется операция. Наиболее часто для операторов ActionScript используется общее неявное правило сочетательности слева направо. Так, а+b+с будет вычислено как (а+b)+с. Операторов, для которых характерна сочетательность справа налево, не так много. К ним относятся все операторы присваивания, условный оператор «?:», логическое отрицание «!», префиксные инкремент «++х» и декремент «--х», унарный минус «-» и поразрядное отрицание «~», а также некоторые другие. Знание особенностей сочетательности операций позволяет не только избежать ошибок, но и порой упростить написание кода. Например, если одно и то же значение должно быть присвоено нескольким переменным, то можно использовать запись следующего вида: а=b=с="Привет"; trace(a); // Выводит: Привет Приведенный код работает — и связано это с тем, что оператор присваивания имеет сочетательность справа налево. То, что операции в выражении обладают одинаковой сочетательностью и приоритетом, совсем не означает, что не важна их последовательность. Это обусловлено тем, что в ActionScript активно используется автоматическое преобразование типов, а многие операторы являются перегруженными. В качестве примера приведем выражение, перестановка слагаемых в котором всякий раз приводит к новому результату: trace (""+1+2-0); // Выводит: 12 trace (1-0+2+""); // Выводит: 3 trace(-0+""+l+2); // Выводит: 012 Если вы твердо не знаете, как особенности сочетательности проявятся при вычислении некоторого сложного выражения, просто используйте для надежности несколько лишних пар круглых скобок. Статьи из раздела Action Script на эту тему: ![]() ![]() ![]() ![]() ![]() Вернуться в раздел: Action Script / 5. Операторы
|