式
式は、AliceScriptにおけるもっとも重要かつ基本的な要素です。
AliceScriptにおいて、ほとんどのものは式で記述されます。ここでは式を値があるものすべてと定義します。
変数に定数を代入するもっとも単純な例を次に示します。
以上の例は、変数a
を定義し、そこに1
を代入します。1
は、明らかに1
という値です。言い換えると1
は1
という値を表す式なのです。 この代入の後、当然a
の値は1
であることが期待されます。そのためvar b = a;
と書いたときもまたb = 1;
と同じ動作をします。
ここでの=
は代入演算子と呼ばれる演算子です。これはひとつあるいはふたつあるいは複数の値の操作に用いられます。 AliceScriptには多数の演算子が用意されています。これらの演算子の多くは標準でAliceScriptに組み込まれていて、変数や値を使用して基本的な操作を実行できます。演算子には様々な種類があります。
代入演算子
代入演算子は、AliceScriptでおそらく最も頻繁に使用されるであろう演算子です。これは指定された変数に値を代入します。次の例を参照してください。
この例はa
という名前の変数に1
を代入するということを意味しています。この式が正しく評価されるには、すでにa
という名前の変数が定義されていることが必要です。なぜなら、この式は変数a
を見つけて、それに代入するという式だからです。
変数を定義するには、var
キーワードとともに変数に代入します。次に例を示します。
算術演算子
次の演算子は、数値型の変数を使用して算術演算を実行します。
インクリメント演算子
単項インクリメント演算子++
は変数をひとつずつインクリメントします。インクリメントとは、その値に1を加算することを指します。
後置インクリメント演算子
次の例に示すように、x++
の結果はx
のインクリメント前の値です。
デクリメント演算子
単項デクリメント演算子--
は変数をひとつずつデクリメントします。デクリメントとは、その値に1を加算することを指します。
後置インクリメント演算子
次の例に示すように、x--
の結果はx
のデクリメント前の値です。
単項プラス演算子と単項マイナス演算子
単項プラス演算子+
ではその値が返されます。単項マイナス演算子-
ではその値の否定が返されます。 次の例を参照してください。
加算演算子
加算演算子+
は、その値と他の値の和を返します。
減算演算子
減算演算子-
は、その値と他の値の差を返します。
乗算演算子
乗算演算子*
は、その値と他の値の積を返します。
除算演算子
除算演算子/
は、その値と他の値の商を返します。
べき乗演算子
べき乗演算子**
は、その値を他の値のべき乗した値を返します。
複合代入
多くの算術演算子は、複合代入をサポートします。算術演算子をop
と置いた場合、次のふたつの式は等価です。
文字列連結
一方または両方の値が文字列型の場合、+演算子によってその値の文字列表現が連結されます。次に例を示します。
配列の連結または追加
左辺の変数が配列型の場合、右辺が配列型ならその配列が連結され、それ以外の型なら左辺の配列に右辺の項目が追加されます。次に例を示します。
デリゲートの組み合わせ
左辺と右辺の両方がデリゲート型の場合、左辺のデリゲートと右辺のデリゲートが結合された新しいデリゲートが返されます。次に例を示します。
var del1 = ()=>{
print("Hello");
};
var del2 = ()=>{
print("World");
};
var del = del1 + del2;
del.Invoke();
//出力:Hello
// World
ラムダ演算子
ラムダ演算子=>は、ラムダ式の定義時に、左側の引数指定部と右側の式本体を分ける機能を持ち、それ以外の機能はありません。詳細については、ラムダ式を参照してください。
等値演算子
等値演算子は左右の値が等しいかどうかを判断し、それに応じた値を返します。
等値演算子
等値演算子==
または===
は左右の値が等しい場合はtrue
を返し、それ以外の場合はfalse
を返します。次に例を示します。
非等値演算子
非等値演算子!=
または!==
は左右の値が異なる場合はtrue
を返し、それ以外の場合はfalse
を返します。この演算子は等値演算子の論理反転と捉えることができます。次に例を示します。
比較演算子
関係演算子とも呼ばれていて、その値の比較に使用されます。これらの演算子は数値型のみに使用することができます。
小なり演算子
小なり演算子<
は、左側の値が右側の値より小さい場合はtrue
を、それ以外の場合はfalse
を返します。次に例を示します。
大なり演算子
大なり演算子>
は、左側の値が右側の値より大きい場合はtrue
を、それ以外の場合はfalse
を返します。次に例を示します。
以下演算子
以下演算子<
は、左側の値が右側の値以下である場合はtrue
を、それ以外の場合はfalse
を返します。次に例を示します。
以上演算子
以上演算子>
は、左側の値が右側の値以上である場合はtrue
を、それ以外の場合はfalse
を返します。次に例を示します。
論理演算子
次の演算子は、ブール型の値について論理演算を行います。
論理否定演算子
論理否定演算子!
は、単項の接頭辞でその値の論理否定が計算されます。次に例を示します。
論理積演算子
論理積(論理AND)演算子&
または&&
は、左右の値の両方がtrue
と評価された場合のみtrue
を返し、それ以外の場合false
を返します。&
演算子と&&
演算子との唯一の違いは後者は左辺がfalseと評価された場合右辺の評価は行われないことです。次に例を示します。
論理和演算子
論理和(論理OR)演算子|
または||
は、左右の値の少なくとも一方がtrue
と評価された場合にtrue
を返し、それ以外の場合にfalse
を返します。|
演算子と||
演算子との唯一の違いは後者は左辺がtrueと評価された場合右辺の評価は行われないことです。次に例を示します。
排他的論理和演算子
排他的論理和(論理XOR)演算子^
は、左右の値が異なると評価された場合(すなわち、片方がtrue
と評価されたならばもう片方がfalse
と評価される場合)にtrue
を返し、それ以外の場合はfalseを返します。次に例を示します。
Null合体演算子
Null合体演算子は、左の値がnull
でない場合その値を返し、それ以外の場合は右の値が評価され返されます。次に例を示します。
var v = "ABC";
print(v??"Hello,World");//出力:ABC
v = null;
print(v??"Hello,World");//出力:Hello,World
型一致演算子
型一致演算子is
は、左辺の値の型が右辺の値の表す型と一致するか、右辺の値の型と一致する場合はtrue
を、それ以外の場合はfalse
を返します。次に例を示します。
型変換演算子
型変換演算子as
は、左辺の値を右辺の表す型に変換します。右辺はtype
型である必要があり、型変換に失敗した場合はnull
を返します。次に例を示します。
number num = 12345;
print(num.type);//出力:NUMBER
var str = (num as string);
print(str.type);//出力:STRING
条件演算子
条件演算子(三項条件演算子)?:
は、論理式を評価し、論理式の評価結果(true
またはfalse
)に応じて続く二つの式のいずれかの結果を返します。まずは次の例を参照してください。
var todo = 現在の気温 > 30.0 ? "エアコンを入れる" : "エアコンを切る";
print("todo={0}",todo);
//出力例
//現在の気温が20℃の場合 : todo=エアコンを切る
//現在の気温が32℃の場合 : todo=エアコンを入れる
上記の例では、現在の気温が30℃以上の場合、todoに「エアコンを入れる」が代入されます。
この例のように、この条件演算子の構文は次のようになります。
条件式は、論理式でtrue
またはfalse
のどちらかと評価される必要があります。条件がtrue
と評価された場合は、結果Aの式が評価され、条件がfalse
と評価された場合は、結果Bの式が評価され、それらの結果が演算の結果として返されます。結果Aと結果Bの両方が評価されることはありません。
AliceScriptRC1時点で、条件演算子に複数の条件演算が含まれる処理は実行できません。つまり、次の式は正しく評価することができません。
条件演算子とIf文
条件演算子を使用すると、いままでIf文を使用して行ってきたことの一部を簡潔な形で書き直すことができます。If文と条件演算子を状況に応じて使い分けると、よりコードが読みやすくなります。次の例を参照してください。
if(今日の天気 == 晴れ)
{
todo = "公園に行き";
}
else
{
todo = "家にい";
}
print("今日は、{0}ます。",todo);
//出力例
//今日の天気が晴れの場合 : 今日は、公園に行きます。
//今日の天気が曇りの場合 : 今日は、家にいます。
上記の例は、現在の天気が晴れであれば、todoに「公園に行き」が代入され、「今日は、公園に行きます。」が表示されます。 それ以外の場合では、todoに「家にい」が代入され、「今日は、家にいます。」が表示されます。
このコードを条件演算子を用いた書き方にすると次の例のようになります。
これはただ単にIf文を条件演算子に書き換えただけで、あまりよい使用方法とは言えません。条件演算子の値を返すという特性を使用すれば、次の例のように書き換えることもできます。
上記の例のように左辺に対して条件演算の結果を代入したほうが、より簡潔かつ分かりやすくなります。条件演算子をまだよく理解していない人のためにコメントを書いておくとより良いでしょう。
条件演算子は行数を短くするよりも、他の人がコードを読んだときに簡単に理解できるようになることを期待して導入されました。基本的には、If文を使用し、条件演算子はそれを使用することで簡潔にわかりやすくなる場合のみ使用するべきです。