連続した if 〜 then は、最初の条件が偽の場合、次の条件が評価されないので、比較演算の順序に依存する内容でも問題無く処理する事ができます。
a が 0 の時は、二つ目の条件式を評価せず処理Bへ向かうので、
ゼロ除算エラーにならない
if a <> 0 then if 120 / a > 50 then
処理A
else
処理B
endif
処理A を真、処理Bを偽とすれば、この条件分岐は x ∧ y を意味する事になります。
if x then if y then
処理A
else
処理B
endif
|
|
x ∨ y の場合は、ド・モルガンの法則より、
¬(x ∨ y ) = ¬x ∧ ¬y
この事から、次のようにすれば良い事が解ります。
x ∨ y = ¬(¬x ∧ ¬y )
x | y | ¬x | ¬y | ¬x ∧ ¬y | ¬(¬x ∧ ¬y ) |
0 | 0 | 1 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 0 | 1 |
例えば、c < 'A' ∨ c > 'Z' の場合、次のように記述する事ができます。
if !(c < 'A') then if !(c > 'Z') then
処理B
else
処理A
endif
結果の否定は処理A、処理Bの位置を逆転させる事で行います。
各条件は反転した状態で記述すると、否定の演算を除く事ができます(否定の演算をプログラム記述時に行ってしまう)。
c < 'A' ∨ c > 'Z' = ¬(c ≧ 'A' ∧ c ≦ 'Z')
if c >= 'A' then if c <= 'Z' then
処理B
else
処理A
endif
条件を否定している演算は、否定を可能な限り減らした方が、全体が見易くなります。また、効果はあまり大きくありませんが、演算量を減らすという点で、パフォーマンス上も有利になります。
次のように処理Bを省けば、条件が真の時だけ処理を行う形にする事ができます。
処理Aだけ行う場合.
# c が 'A' 〜 'Z' の範囲外の場合は真
if c >= 'A' then if c <= 'Z' then
else
処理A
endif