IF文を制する者はBASICを制す

PART 6 IF文を制するには・・・


IF文の基本動作から応用まで簡単に見てきましたが、ここまで書いたことをすべてまとめると下記のようになります。

(1) IF文では条件式の値が0か、0以外で判定している
(2) それを利用すれば簡略化や高速化が可能になる
(3) 1つのIF文で複数の条件式を用いて判定する場合それを分割すれば高速化可能になる
(4) 条件式が成立する確率を考慮することで高速化が可能になる
(5) 同じ条件でも判定方法は無数に存在する
(6) 無数の判定方法があっても何を重視するかで最適なものが決まってくる
(7) 最適化を行う鍵はその判定している行にあるとは限らない

 (1)〜(3)についてはPART1PART2で詳しく書いているのでそれを見れば分かるでしょう。
 (4)に関しては、IF文において高速化や最適化を行うにはIF文で判定している変数がプログラム内で取り得る値の範囲を把握しているのは当然として、どの程度の精度で判定する必要があるのかとか、どの程度の確率でその値になるのかというレベルまで把握しておく必要があります。あまり精度を求めないのであれば除算の代わりに乗算を使うことで高速化が可能になりますし、複数のIF文で判定しなくてはならない処理の場合は、PART4のANDやORの時と同じくその条件式が成立する確率を考慮すべきですからね。
 また、IF文を論理式などの別の式で置き換えや簡略化を行うことで高速化が可能な場合もIF文の数を減らしたからといって必ずしも速くなっているわけではないので注意が必要です。PART3で書いたようにIF文を論理式に置き換えた場合、たいてい遅くなってしまいますからね。 見た目の簡単さと実際の処理速度は相関性がないために「人間にとって簡略化=ポケコンにとって簡略化」になるとは限らないことに留意すべきです。そのためにはすべての命令や関数や演算子の処理速度を把握しておく必要がありますが、それは難しいので同じ処理内容のプログラムをいくつか作ってそれぞれの実行速度をストップウォッチで計測することで速いものを選択することで解決可能になります。ポケコンに楽をさせる(処理速度アップ)には人間の方が苦労する必要があるわけです。人間が楽をすればポケコンが苦労(処理速度ダウン)します。どっちを選ぶのかはユーザー次第ですが、人間が楽をした場合ポケコンを責めることはできません

 IF文を完全に制するためにはIF文のある行だけを考えるのではなくPART5で書いたようにプログラム全体を見て考える必要があるわけです。そのIF文を速くするために他所が遅くなったりすれば意味がないし、本当にIF文を使うべき別の式で置き換えをすべきかということもその行だけ見ていたら判断ができない場合があります。
 つまり、IF文を使用している行だけを見て高速化や省メモリ化を考えるのではなく他の部分を変えることによって判定が単純化可能な場合があったりIF文はSGNやFORなどの置き換えで高速化が可能な場合もあったり8方向判定やじゃんけんの判定のように一定のパターンがある場合はIF文自体が不要になる場合もあるわけです。それゆえ、IF文を制するにはBASICのあらゆる面において精通しておく必要があります。
 言い換えれば、IF文を制することがBASICを制するということになるわけです。


PART 1 IF〜THEN〜の動作の基本について
PART 2 条件式の簡略化(基本編)
PART 3 IF文は論理式よりも速い!?
PART 4 IF文の簡略化(応用編)
PART 5 IF文の簡略化(実戦編)
PART 6 IF文を制するには・・・

RETURN

inserted by FC2 system