if文の挙動

NScripterは起動時にスクリプトに含まれるラベルをリストアップするが、それ以降は全てインタプリタとして動作している。スクリプトにラベル以外のエラーが含まれていようとも、実際にその部分を実行しなければそれはエラーとは認識されない。
これがifにおいても当然適用されており、動作を見る限りでは、if文はむしろ、「条件を満たさなければ、次の行に実行を移す命令」と見なすことができる。
このような構造であるならば、(懐かしの)BASICにおけるTHEN節や、今でもプログラマーなら誰もがお馴染みのELSE節が存在しないのも自然と言える。
繰り返すと、NScripterにおいてif命令はあくまでif「命令」であって、if「文」ではないと言う事だ。
たとえば、こんな記述がNScripterでは許されている。

; サンプル1
if %0=0 if %1=0 puttext "どっちも0だよ!"

同じ文中に(文法さえ守れば)ifがいくつあろうとも構わないのである。
ちなみにこの記述は下記の記述と同等である。

; サンプル2
if %0=0 && %1=0 puttext "どっちも0だよ!"

&&はあっても||がないことから、もしかしたら、内部的にサンプル1の形式に書き直しているのかも知れない。
ちなみに、ifの連続も&&も嫌な人はこのように実行順制御系を使って書くしかない。

; サンプル3
notif %0=0 jumpf
if %1=0 puttext "どっちも0だよ!"
~

さて、このギミックを使って何ができるか。
実は先般の電流イライラ棒に挑戦 - 永字八法イライラver.2! - 永字八法イライラver.3! - 永字八法で使っている。
このような状況でこのギミックは能力を発揮する。

*define
dim ?100[10]
game
*start
(中略)
if %0>-1 && %0<11 && ?100[%0]=1 puttext "何らかの処理"

数値変数%0は様々な要因で変化する変数であるが、内部的には配列変数?100の添え字として扱われている。この数値変数%0は、マイナスや添え字の最大数を超える可能性もあり、エラーを出して止まることがある。
その場合、if命令のギミックを使うことで、無駄に行を増やすことなく配列変数を正しく扱うことができる。