演算子と式

式は、AliceScriptにおけるもっとも重要かつ基本的な要素です。


taiseiue | 2021-12-25

AliceScriptにおいて、ほとんどのものは で記述されます。 AliceScriptでは式を、値を返すものすべてと定義します。 ここでは式を値があるものすべてと定義します。

AliceScriptにおける式のもっとも単純な形を次に示します。

AliceScript
1 + 1;

数学と同じですね。 この例では、1+1の計算を行っています。ここで、1は、明らかに1という値です。言い換えると11という値を表す式なのです。 このようにコード中に直接書かれた値のことを、リテラル と呼びます。

式の多くの使い道は、式の結果をどこかへ代入することです。 次の例をご覧ください。

AliceScript
var a = 1 + 1;

この例では、先ほどの計算結果を変数aに定義して代入しています。 この代入の後、変数aは、2になります。 このように何かの値に代入すると、代入文 となります。 AliceScriptで変数を定義したり代入する方法について詳しく知るには、変数を参照してください。

ここでの+は加算演算子という演算子です。 AliceScriptにはさまざまな演算子が存在し、それらは以下のグループに分類できます。

文と式の違い

AliceScriptには、 の異なるふたつのコード概念があります。それぞれの違いは次の通りです。

  • は必ずなんらかの有効な値を返します
  • は常にVoidを返します。文は0つ以上の有効な式から成り立ちます。

歴史的な事情から、文を式の中に含めること自体はできます。例えば、以下のコードは正常に機能します。

AliceScript
"ABC" + (var a = 2)

ただし、可読性を下げるため文を式の中に含めるべきではありません。

複合代入

多くの算術演算子は、複合代入をサポートします。算術演算子をopと置いた場合、次のふたつの式は同じ意味を持ちます。

AliceScript
x op= y;
AliceScript
x = x op y;

演算子の優先順位

すべての演算子には、優先順位があります。 たとえば、\(1 + 2 \times 3\)という式がある場合、\(+\)よりも\(\times\)の方が先に計算するようなものです。次の例では、乗算が加算よりも優先順位が高いため、先に乗算が行われます。

AliceScript
var a = 1 + 2 * 3;
print(7);

演算の順序を変更するには、かっこを使用します。

AliceScript
var a = (1 + 2) * 3;
print(9);

次の表は、演算子を優先順位の高い順に並べたものです。同じ行内の演算子の優先順位は同じです。

優先順位 演算子
14 ++--
13 **
12 */%
11 +-
10 <<>>
9 <><=>=
8 ==!=
7 &
6 ^
5 |
4 &&
3 ||
2 ??
1 =

デリゲートの組み合わせ

左辺と右辺の両方がデリゲート型の場合、左辺のデリゲートと右辺のデリゲートが結合された新しいデリゲートが返されます。次に例を示します。

AliceScript
var del1 = ()=>{
  print("Hello");
};
var del2 = ()=>{
  print("World");
};

var del = del1 + del2;
del.Invoke();
//出力:Hello
//    World

ラムダ演算子

ラムダ演算子(=>)は、ラムダ式中で、左側の引数指定部と右側の式本体をわけるために使用します。ラムダ式を参照してください。