バグをなくす方法を考える。

最初に定義を述べる。
この場合のバグとはエラーのことであり、それもSyntax Error(文法的間違い)のレベルではない。一見正常に動作しておきながら、期待した結果が得られないロジックエラーのことを言う。
2chプログラマー板を見るならば、世の中にはロジックエラーの存在すら理解できないプログラマー(たいがいは無駄に年食ったロートル)がいるのだと言う。恐ろしいことである。こういう手合いに年金を計算させたりしてはいけない。
Syntax Errorならばリファレンスを読めば解決する。それができないのは基本的な人間としての能力が足りてないのでここでは取り扱わない。小学校からやり直せばいいのだ。
さて、バグと言うのは、他の病気やウィルスその他の例にもれず、発生したのを潰すよりも、そもそも発生しないようなプログラミングをする方が効果的だ。対処よりも予防と言う訳だ。
ごく基本的なことを言えば、Perlならばuse strictするとかがこれに当たる。Perlは色々できて敷居の低い言語だが、商業で使うものでuse strictして動かない物は信用するに値しない(と思っている)。
他にも、ネームスペースを使ったりローカル変数を作ったりでグローバルな変数を極力使わないなどのテクニックがある。
ではNScripterではどうかと言うと、実はこう言った「バグを出さないための仕組み」をシステムの側から提供していないのである。(せいぜいがデバッグウィンドウだが……)
従って、NScripterはこう言ったプログラミング言語としての作法を学ぶ言語としては不適であると結論できる。別にこういった全てのプログラム言語で共通のテクニックを学ぶ必要があるのだ。

変数の取り扱い

NScripterでプログラミングをしていて、最初に困るのが恐らく変数の扱いであろう。

あれ? この番号もう使ったかな?(何に使ったっけ?)

変数が番号で表現されているので、一度に七つを超える物を覚えていられない人間の性として、絶対に変数の番号とその中身との対応ができなくなるタイミングが来るのである。
この対処法としては、numaliasをフル活用することが上げられる。
また、サブルーチン化も見逃せない。
「同じような処理はまとめてサブルーチンにする」ことで、避けられるバグもある。
同じような処理を何度も書いていき、ある時全ての処理で変更をしなければならなくなった時、サブルーチンを使っていればサブルーチンだけをいじればいいところを、全ての同じような処理をいじらなければならないとすると、そこにバグは入り込むだろう。
サブルーチン化は、他にも効能があり、「そのサブルーチン内で使う変数はn番からm番」と定め、他の部分で決してそれを使わなければ、そこには変数の混入によるバグは起こりえないことになる。擬似的なローカル変数を実現する訳だ。
ついでに言えばサブルーチンは、ただサブルーチンとするよりもdefsubによる命令化の方が、引数を渡せる点などで非常にバグを混入させないプログラミングが可能になる。
コーディング規約を自分で決めて自分で遵守することがバグを入れない基本になる。自己規定のできない人間はプログラマーにはなれんと言い換えることもできよう。
こう言った自己規定をすることで、プログラミング上、リソースの無駄が生じることもあるだろうが、それはバグを出さないことに対するコストとして割り切りたい。
次からは、もうちょっとつっこんだことに触れていきたい。