26.1.4.10 判断の複合化

ifの形式で選択実行を指定した場合,選択されたそれぞれの部分でさらに選択実行を指定することも可能です.月の値から日数を求める例で考えてみましょう.

月の日数はよく知られているように,1月から順に

31,28,31,30,31,30,31,31,30,31,30,31

です.これをもとにして,

1→31,4→30,10→31

という応答をすればよいことになります. この方法 としてはいろいろなものが考えられますが,ひとつひとつ判定してゆくのが最も単純でしょう.ここで月の値(1〜12)は パラメータmに入っているものとし,日数を パラメータdに求めるものとします.

if(m==1) d=31;
else if(m==2) d=28;
else if(m==3) d=31;
else
  ...
else if(m==12) d=31;
else d=0;

最後にd=0としているのは,月の値が不当なものであったことを意味するつもりです.

この例では,最初のif形式の二つの選択実行のうち2番目すなわちelse以降が,再び(第2の)if形式となっていて,さらにそのelse部分が第3のif形式に,というぐあいに続いてゆきます.つまり,これは判断が複合化されている例となります.

ひとつひとつ判定してゆくのはあまりスマートではありませんね.少し頭を使ってみましょう.月の中で31日あるのは,1,3,5,7,8,10,12の各月です.これを 7以下の奇数と8以上の偶数 と考えると,ひとつの条件式で表現することができます.

(m <= 7)&&(m%2 == 1)||(m >= 8)&&(m%2 == 0)

というぐあいです.これは条件を複合化した例ですが,判断の複合化でも対処することができます.