続・C-Style の elseif 活用

if 〜 else if 〜 else 〜 end ifの構文は、

  • ifの条件が成立するなら、ifの下を実行し、else if 以下はキャンセル。
  • ifの条件が成立せず、else ifの条件が成立するならば、else ifの下を実行し、else以下はキャンセル。
  • else ifの条件も成立しないなら、elseの下を実行。

となるので、

とプログラムした場合、Aの値は以下のように1,2,4,8のどれかとなり、意図する値を取得できない。

センサ1〜4は、それぞれが独立して動くものであるので、それどれ独立したif文で状態を判断する必要があるので、正しくはこうなる。

これで変数Aは

  • どのセンサも反応がない場合は0
  • 1つのセンサが反応していれば1,2,4,8のどれか
  • 2つのセンサが反応していれば3,5,6,9,10,12のどれか
  • 3つのセンサが反応していれば7,11,13,14のどれか
  • 全センサが反応していれば15

となる。


変数Aの値をもとに実行する処理を切り替える場合、実際にはセンサの配置などで、ありえない組み合わせもあるので、それらはelseでひとまとめにして処理して、有効な組み合わせのみをif 〜 else if 〜 で判断する。

この時に変数Aを1から順番に判断する必要はなく、分かりやすい順番にまとめればよい。多くのelse ifがある場合、下になればなるほど何度も条件判断することになり、その分処理が遅くなるので、よくある組み合わせをなるべく先に判断する。