これの記事はシンプルなif節を減らすことについての記事です。
例えば、次のようなプログラムがあるとします。条件ABCの真偽に応じて01を返すプログラムです。
if A
if B
if C
return 1;
else
return 0;
end
else
if C
return 0;
else
return 1;
end
end
else
if B
if C
return 1;
else
return 0;
end
else
if C
return 1;
else
return 0;
end
end
end
このプログラムは一見読みにくく、また余分な動作があります。if節を減らすことで速度と可読性の向上が見込めます。単純な真偽を表に表します。ABCが条件、Rが返り値です。1は値の1の他に真の意味も持ちます。0は値の0の他に偽の意味も持ちます。
A | B | C | R |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
例えば~AB~C=1、AB~C=1です。~は否定の意味です。ここからB~C=1と短縮でき、以下の様にプログラムを変えることができます。
if B
if C
if A
return 0;
else
return 0;
end
else
return 1;
end
else
if C
if A
return 1;
else
return 0;
end
else
if A
return 1;
else
return 0;
end
end
end
判定が減った分、文量も処理量も減りました。
そんなこんなで真偽を最適化した場合、次のような式ができます。
1 = ~A~BC + B~C + A~C
この式に従った場合、以下の様にプログラムを変えることができます。
if C
if ~A
if ~B
return 1;
end
end
else
if A
return 1;
end
if B
return 1;
end
end
return 0;
最初の書き方が愚直すぎるのもありますが随分と簡略化できました。
真理値の短縮には多くのアプリ、ライブラリもあるのでコードを簡略化したい際にはググって使うのが良いと思います。