三項条件演算子

三項条件演算子は、論理式の結果に応じて式を評価します。


taiseiue | 2021-12-25

条件演算子(三項条件演算子)?:は、論理式を評価し、論理式の評価結果(trueまたはfalse)に応じて続くふたつの式のいずれかの結果を返します。まずは次の例を参照してください。

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

上記の例では、現在の気温が30℃以上の場合、todoに「エアコンを入れる」が代入されます。

この例のように、この条件演算子の構文は次のようになります。

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

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

AliceScript
a ? b : c ? d : e

条件演算子とIf文

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

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

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

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

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

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

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

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

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