日別アーカイブ: 2016-08-18

三項演算子の威力

マニアが好む演算子

C、java、JavaScriptには三項演算子があります。

条件式 ? 式1 : 式2

三項演算子のなかで上のような演算子は条件演算子とも呼ばれ、コンパクトなソースコード、小さな機械コードの実現に貢献します。条件式の値がtrueだった場合に式1を評価した結果を返し、falseだった場合に式2を評価した結果を返します。

var answer = (age >=60) ? 1000 : 1500;

たとえば、映画館の入場料を60歳以上ならば、1000円、そうでない場合は1500円というときに使うことができます。変数answerにはageという年齢を反映した値が設定されます。

利用例と実行結果

『日曜日と土曜日は7時に、それ以外は6時に起きます』と表示する例を4つ示します。実行結果はどれも同じです。

<html>
《三項演算子の威力, 2016-08-18》<BR>
<script type="text/javascript" charset="Shift_JIS">
const week = ["日", "月", "火", "水", "木", "金", "土"];
var wake;

document.write("<BR>課題-1<BR>");
for(var i=0; i<7; ++i){
  switch(i){
  case 0: wake = 7;
          break;
  case 1: wake = 6;
          break;
  case 2: wake = 6;
          break;
  case 3: wake = 6;
          break;
  case 4: wake = 6;
          break;
  case 5: wake = 6;
          break;
  case 6: wake = 7;
          break;
  }
  document.write(week[i]+"曜日は"+wake+"時に起きます。<BR>");
}

document.write("<BR>課題-2<BR>");
for(var i=0; i<7; ++i){
  switch(i){
  case 6:
  case 0: wake = 7;
          break;
  case 1:
  case 2:
  case 3:
  case 4:
  case 5: wake = 6;
          break;
  }
  document.write(week[i]+"曜日は"+wake+"時に起きます。<BR>");
}

document.write("<BR>課題-3<BR>");
for(var i=0; i<7; ++i){
  wake = (i % 6) ? 6: 7;
  document.write(week[i]+"曜日は"+wake+"時に起きます。<BR>");
}

document.write("<BR>課題-4<BR>");
const wakeup = [7, 6, 6, 6, 6, 6, 7];
for(var i=0; i<7; ++i){
  wake = wakeup[i];
  document.write(week[i]+"曜日は"+wake+"時に起きます。<BR>");
}
</script>
</html>

《実行結果》

課題-1
日曜日は7時に起きます。
月曜日は6時に起きます。
火曜日は6時に起きます。
水曜日は6時に起きます。
木曜日は6時に起きます。
金曜日は6時に起きます。
土曜日は7時に起きます。

課題-2
日曜日は7時に起きます。
月曜日は6時に起きます。
火曜日は6時に起きます。
水曜日は6時に起きます。
木曜日は6時に起きます。
金曜日は6時に起きます。
土曜日は7時に起きます。

課題-3
日曜日は7時に起きます。
月曜日は6時に起きます。
火曜日は6時に起きます。
水曜日は6時に起きます。
木曜日は6時に起きます。
金曜日は6時に起きます。
土曜日は7時に起きます。

課題-4
日曜日は7時に起きます。
月曜日は6時に起きます。
火曜日は6時に起きます。
水曜日は6時に起きます。
木曜日は6時に起きます。
金曜日は6時に起きます。
土曜日は7時に起きます。

利用上の総合評価

それぞれの観点から4つの課題を4段階に評価しました。

課題番号 ソースコード行数 機械コードサイズ 拡張性 総合点
1 × × 5
2 7
3 10
4 10

利用する際の決め手

夏休み自由研究では、ソースコード行数を小さくするために、三項演算子を多用しています。三項演算子は見た目が良いのですが、拡張性に乏しいです。拡張性については、課題-4,1,2に軍配が上がります。

それでも、if文による判別よりはコンパクトなプログラミングになり、また他人によるプログラムコードの解析が難しくなるという理由で人気の高い演算子と言えます。