続・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がある場合、下になればなるほど何度も条件判断することになり、その分処理が遅くなるので、よくある組み合わせをなるべく先に判断する。