Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 の学習 > シンタックスと言語の基礎 > 演算子について > 演算子の優先順位と結合性について | |||
ステートメントで複数の演算子を使用する場合、他の演算子に優先される演算子があります。演算子の優先順位と結合性により、演算子を処理する順序が決まります。ActionScript には、どの演算子が他の演算子よりも先に実行されるかを指定する優先順位があります。このセクションの最後に、この優先順位を示した表が記載されています。
算術プログラミングまたは基本的なプログラミングに慣れている開発者にとって、コンパイラが乗算 (*) 演算子を加算 (+) 演算子より先に処理するのは自然なことですが、コンパイラは、どの演算子を最初に処理するかについて明示的な指示を必要とします。このような指示を、総称して "演算子の優先順位" と呼びます。
次の例では、算演算子および加算演算子を操作し、演算子の優先順位について確認できます。
var mySum:Number; mySum = 2 + 4 * 3; trace(mySum); // 14
このステートメントの出力は 14 ですが、これは乗算の優先順位が高いためです。そのため、4 * 3 が最初に評価され、その結果が 2 に追加されます。
式をカッコで囲むと、結果を制御できます。ActionScript では、カッコ (()) を使用して変更できる、演算子のデフォルトの優先順位が定義されています。加算部分がカッコで囲まれていれば、加算が最初に実行されます。
var mySum:Number; mySum = (2 + 4) * 3; trace(mySum); // 18
このステートメントの出力は 18 になります。
演算子に同じ優先順位を設定することもできます。この場合、結合性により、演算子の実行順序が決まります。結合性は左から右、または右から左のいずれかです。
再び乗算演算子について考えてみます。乗算演算子には左から右の結合性があるので、次の 2 つのステートメントは同じになります。
var mySum:Number; var myOtherSum:Number; mySum = 2 * 4 * 3; myOtherSum = (2 * 4) * 3; trace(mySum); // 24 trace(myOtherSum); // 24
同じ優先順位の複数の演算子が同じ式にある状況があります。このような状況では、コンパイラは "結合性" のルールを使用して、最初に処理する演算子を決定します。代入演算子を除くすべてのバイナリ演算子は "左結合" となります。つまり、左にある演算子が右にある演算子よりも先に処理されます。代入演算子と条件 (?:) 演算子は "右結合" となります。つまり、右にある演算子が左にある演算子よりも先に処理されます。代入演算子の詳細については、代入演算子の使用を参照してください。条件 (?) 演算子の詳細については、条件演算子についてを参照してください。
たとえば、"より小さい" (<) および "より大きい" (>) 演算子について考えてみます。これらの演算子の優先順位は同じです。両方の演算子を同じ式で使用すると、左の演算子が最初に処理されます。これは、両方の演算子が左結合であるためです。つまり、次の 2 つのステートメントでは同じ出力が得られます。
trace(3 > 2 < 1); // false trace((3 > 2) < 1); // false
"より大きい" (>) 演算子が最初に処理され、値は true となります。これは、オペランド 3 がオペランド 2 より大きいためです。次に、値 true がオペランド 1 と共に "より小さい" (<) 演算子に渡されます。"より小さい" (<) 演算子は、値 true を数値 1 に変換し、その数値を 2 番目のオペランド 1 と比較して、値 false を返します。これは、値 1 が 1 より小さくないためです。
ActionScript では、オペランドの優先順位を考慮してください。特に、複雑な条件を設定し、それらの条件の 1 つが何回 true になるかわかっている場合は、これが重要になります。たとえば、条件で i が 50 より大きくなる場合、最初に i<50 を記述する必要があります。そのため、この条件が最初にチェックされます。記述する 2 番目の条件は、それほど頻繁にチェックされる必要はありません。
次の表に、ActionScript 2.0 の演算子を優先順位の高いものから順に示します。表の各行には、同じ優先順位の演算子が含まれています。表内の演算子は、上位の列に含まれるものほど優先順位が高くなります。演算子と括弧の使用に関する詳細とガイドラインについては、ActionScript シンタックスのフォーマットを参照してください。
|
グループ |
演算子 |
|---|---|
|
プライマリ |
[] {x:y} () f(x) new x.y x[y]
|
|
後置 |
x++ x--
|
|
単項 |
++x --x + - ~ ! delete typeof void
|
|
乗算 |
* / %
|
|
加算 |
+ -
|
|
ビット単位シフト |
<< >> >>>
|
|
関係 |
< > <= >= instanceof
|
|
等しい |
== != === !==
|
|
ビット単位の論理積 (AND) |
&
|
|
ビット単位の排他的論理和 (XOR) |
^
|
|
ビット単位の論理和 (OR) |
|
|
|
論理積 (AND) |
&&
|
|
論理和 (OR) |
||
|
|
三項演算 |
?:
|
|
代入 |
= *= /= %= += -= <<= >>= >>>= &= ^= |=
|
|
カンマ |
,
|
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000726.html