二項演算
演算子の優先順位
二項演算子の優先順位と結合順序は表のとおりです (一部抜粋).
| 演算子 | 優先順位 (結合強度) | 結合順序 |
|---|---|---|
-<<, >>-, ?? | 1 | 左から右 |
||, !| | 2 | 左から右 |
^^, !^ | 3 | 左から右 |
&&, !& | 4 | 左から右 |
|, ~| | 5 | 左から右 |
^, ~^ | 6 | 左から右 |
&, ~& | 7 | 左から右 |
==, != | 8 | 左から右 |
<, <=, >, >=, <=> | 9 | 左から右 |
<<, >>, >>>. .:, :., -<>, <>-, >+, <+, ++, -- | 10 | 左から右 |
+, - | 11 | 左から右 |
*, /, \\, % | 12 | 左から右 |
** | 13 | 右から左 |
優先順位の変更
precedence マクロにより,演算子とその優先順位・結合順序を自由に変更できます.
#precedence * 10
println(1 + 2 * 3 + 4 * 5); // (((1 + 2) * (3 + 4)) * 5)
#precedence - -1
println(1 - 2 - 3); // (1 - (2 - 3))
単項演算子
-- 2; // -2
!0; // 1
演算子オブジェクト
演算子も通常のオブジェクト (関数) です.
Number:: + 1 2 // 3
上の式では Number オブジェクトの + 演算子を取得し,1 と 2 を適用しています.Int と Real は Number を継承しており,多くの演算子は Number に属します.
独自定義演算子
オブジェクトに演算子を新しく定義することができます (参考: 演算子の設定).
a = {
value = 6;
+ = this -> other -> this::value + other::value;
};
b = {
value = 7;
};
println(a + b); // 13