メインコンテンツまでスキップ

二項演算

演算子の優先順位

二項演算子の優先順位と結合順序は表のとおりです (一部抜粋).

演算子優先順位 (結合強度)結合順序
-<<, >>-, ??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 オブジェクトの + 演算子を取得し,12 を適用しています.IntRealNumber を継承しており,多くの演算子は Number に属します.

独自定義演算子

オブジェクトに演算子を新しく定義することができます (参考: 演算子の設定).

a = {
value = 6;
+ = this -> other -> this::value + other::value;
};

b = {
value = 7;
};

println(a + b); // 13