提供: AliceScript Wiki
2021年11月11日 (木) 14:13時点におけるMaster (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

式は、AliceScriptにおけるもっとも重要かつ基本的な要素です。AliceScriptにおいて、ほとんどのものは式で記述されます。ここでは式を値があるものすべてと定義します。

変数に定数を代入するもっとも単純な例を次に示します。

a = 1;

以上の例は、変数a1を代入します。1は、明らかに1という値です。言い換えると1は1という値を表す式なのです。 この代入の後、aの値は1であることが期待されます。そのためb = a;と書いたときもまたb = 1;と同じ動作をします。

ここでの=は代入演算子と呼ばれる演算子です。これは一つあるいは二つあるいは複数の値の操作に用いられます。 AliceScriptには多数の演算子が用意されています。これらの演算子の多くは標準でAliceScriptに組み込まれていて、変数や値を使用して基本的な操作を実行できます。演算子には次のものがあります。

代入演算子

代入演算子は、AliceScriptでおそらく最も頻繁に使用されるであろう演算子です。これは指定された変数に値を代入します。次の例を参照してください。 

var a = 1;

この例はaという名前の変数に1を代入するということを意味しています。また、varキーワードは省略したり、変数の型名を使うこともできます。

算術演算子

次の演算子は、数値型の変数を使用して算術演算を実行します。

インクリメント演算子

単項インクリメント演算子++は変数を一つずつインクリメントします。インクリメントとは、その値に1を加算することを指します。インクリメント演算子には後置インクリメント演算子x++と前置インクリメント演算子++xがあります。

後置インクリメント演算子

次の例に示すように、x++の結果はxのインクリメント前の値です。

var x = 1;
print(x);   //出力:1
print(x++); //出力:1
print(x++); //出力:2
前置インクリメント演算子

次の例に示すように、++xの結果はxのインクリメント後の値です。

var x = 1;
print(x);   //出力:1
print(++x); //出力:2
print(++x); //出力:3
デクリメント演算子

単項デクリメント演算子は変数を一つずつデクリメントします。デクリメントとは、その値から1を減算することを指します。デクリメント演算子には後置デクリメント演算子x++と前置デクリメント演算子++xがあります。

後置デクリメント演算子

次の例に示すように、x++の結果はxのデクリメント前の値です。

var x = 3;
print(x);   //出力:3
print(x++); //出力:3
print(x++); //出力:2
前置デクリメント演算子

次の例に示すように、++xの結果はxのデクリメント後の値です。

var x = 3;
print(x);   //出力:3
print(++x); //出力:2
print(++x); //出力:1
単項プラス演算子と単項マイナス演算子

単項プラス演算子+ではその値が返されます。単項マイナス演算子-ではその値の否定が返されます。 次の例を参照してください。

print(1);  //出力:1
print(-1); //出力:-1
加算演算子

加算演算子+はその値の和を返します。

print(1+1);//出力:2
減算演算子

減算演算子-はその値の差を返します。

print(2-1);//出力:1
乗算演算子

乗算演算子*はその値の積を返します。

print(2*4);//出力:8
除算演算子

除算演算子/はその値の商を返します。

print(4/2);//出力:2
べき乗演算子

べき乗演算子**は一つ目の値を二つ目の値乗した結果を返します。

print(2**2);//出力:4
複合代入

二項演算子をopと置いた場合、

x op= y;

この式は次の式と同じです。

x = x op y;

ただし、xが評価されるのは一度のみです。次の例を参照してください。

var a = 1;
a += 2;
print(a);//出力:3

a -= 1;
print(a);//出力:2

・比較演算子

・論理演算子

+および+=演算子

・文字列の連結

左辺または両方の変数が文字列型の場合、+演算子によってその変数の文字列(あるいは文字列表現)が連結されます

 print("Hello,"+"World.");

・配列の連結または追加

左辺の変数が配列型の場合、+=演算子によって配列が連結されるか、あるいは末尾に項目が追加されます

・イベントの組み合わせ

左辺がイベントオブジェクトかつ右辺がデリゲート型の場合、+=演算子によってイベントが呼び出されるとすでに登録されているデリゲートを呼び出してから右辺のデリゲートを呼び出すようにイベントオブジェクトに追加します。

・加算代入演算子としての+=

次のような式があるとします

 x+=y

上記の式は、次の式と同じです。

 x=x+y

ただし、xが評価されるのは一度だけです。

?:演算子

?:演算子(三項条件演算子)は、論理式を評価し、論理式の評価結果(TrueまたはFalse)に応じて続く二つの式のいずれかの結果を返します。

まずは次の例を参照してください。

 string todo = 現在の気温 > 30.0 ? "エアコンを入れる" : "エアコンを切る";  print("todo={0}",todo);  //出力例  //現在の気温が20℃の場合 : todo=エアコンを切る  //現在の気温が32℃の場合 : todo=エアコンを入れる

上記の例では、現在の気温が30℃以上の場合、todoに「エアコンを入れる」が代入されます。 この例のように、この条件演算子の構文は次のようになります。

 条件 ? 結果A : 結果B

条件式は、論理式でTrueまたはFalseのどちらかと評価される必要があります。条件がTrueと評価された場合は、結果Aの式が評価され、条件がFalseと評価された場合は、結果Bの式が評価され、それらの結果が演算の結果として返されます。結果Aと結果Bの両方が評価されることはありません。

AliceScriptRC1時点で、条件演算子に複数の条件演算が含まれる処理は実行できません。つまり、次の式は正しく評価することができません。

 a ? b : c ? d : e

条件演算子とIf文

条件演算子を使用すると、いままでIf文を使用して行ってきたことの一部を簡潔な形で書き直すことができます。If文と条件演算子を状況に応じて使い分けると、よりコードが読みやすくなります。次の例を参照してください。

 if(今日の天気 == 晴れ)     {

   todo = "公園に行き";

  }  else   {

   todo = "家にい";

  }  print("今日は、{0}ます。",todo);  //出力例  //今日の天気が晴れの場合 : 今日は、公園に行きます。  //今日の天気が曇りの場合 : 今日は、家にいます。

上記の例は、現在の天気が晴れであれば、todoに「公園に行き」が代入され、「今日は、公園に行きます。」が表示されます。 それ以外の場合では、todoに「家にい」が代入され、「今日は、家にいます。」が表示されます。

このコードを条件演算子を用いた書き方にすると次の例のようになります。

 (今日の天気 == 晴れ) ? todo = "公園に行き" : todo = "家にい";  print("今日は、{0}ます。",todo);

これはただ単にIf文を条件演算子に書き換えただけで、あまりよい使用方法とは言えません。条件演算子の値を返すという特性を使用すれば、次の例のように書き換えることもできます。

 todo = (今日の天気 == 晴れ) ? "公園に行き" : "家にい";  print("今日は、{0}ます。",todo);

上記の例のように左辺に対して条件演算の結果を代入したほうが、より簡潔かつ分かりやすくなります。条件演算子をまだよく理解していない人のためにコメントを書いておくとより良いでしょう。

条件演算子は行数を短くするよりも、他の人がコードを読んだときに簡単に理解できるようになることを期待して導入されました。基本的には、If文を使用し、条件演算子はそれを使用することで簡潔にわかりやすくなる場合のみ使用するべきです。