NScriptしか知らない人向けのLua講座に挑戦 -- if編

NScriptのif

NScriptのifは、条件式をチェックして、満たさなかった場合次の行にうつる命令と解釈するのが一番正しいでしょう。

if (条件式) (条件式が真だった場合の処理)
notif (条件式) (条件式が偽だった場合の処理) ; notif は条件式を満たさない時になるだけで、他は全てifと同じです。

一行に収める必要あるので、命令と命令をつなげる":"を効果的に使いましょう。
小技として、ifやnotifはどんどんつなげることができます。

if (条件式1) if (条件式2) if (条件式3) (条件式1〜3が全部真だった場合の処理)

これは恐らく下記と同じ動作をします。

if (条件式1) && (条件式2) && (条件式3) (条件式1〜3が全部真だった場合の処理)

さらに小技として、NScriptがコンパイラ(事前翻訳)ではなくインタプリタ(逐次実行)であることを利用したスクリプティングが可能です。

if (条件式) (エラーになる可能性のある命令)

このようにした場合、条件式を満たさない限り(エラーになる可能性のある命令)が実行されません。これはこのように使います。

if %0>=0 vsp %0,0 ; スプライト番号が0以上の時、そのスプライトを非表示にする。

この例文では、%0には扱うスプライト番号が入っているとします。普通、スプライト番号はマイナスにはなりません。指定されたスプライト番号がマイナスであるかどうかチェックし、マイナスでなければ vsp を実行します。

Luaのif

if (条件式) then (条件式が真だった場合の処理) end
if (条件式) then (条件式が真だった場合の処理) else (そうではない場合の処理) end
if (条件式1) then (条件式1が真だった場合の処理) elseif (条件式2) then (条件式2が真だった場合の処理) else (そうではない場合の処理) end
  • thenとendを決して忘れないようにしてください。終わったら必ずendで閉じる。お行儀よくいきましょう。
  • elseif は気が済むまで繰り返して続けることができます。
  • else は省略することもできます。
  • NScriptと違って、途中で改行を入れることもできます。
if (条件式) then
	(条件式が真だった場合の処理)
else
	(そうではない場合の処理)
end

プログラムは人間も読みます。わかりやすく書くことを心がけましょう。

比較演算子の比較

条件式に使う比較演算子に若干の違いがあります。

意味 NScript Lua 備考
同じである。 =, == == NScriptでは、=と==は同じ意味に使えますが、Luaでは厳密に違うものとして扱われます。
異なっている。 !=, <> ~= NScriptとLuaで全然違いますので、しっかり注意してください。
左辺が大きい > >
右辺が大きい
左辺が大きいか同じ >= >=
右辺が大きいか同じ <= <=
あるラベルを通ったことがあるか。 lchk (該当無) 既読判定を想定した命令です。
あるタグを読み込んだことがあるか。 fchk (該当無) AVG等のイベント画像を読み込んだか否かを想定した命令です。

真偽型

Luaでは、比較演算子を使った条件式だけでなく、boolean型の変数やboolean型を返す関数を使うことができます。
NSCheckComma()などがこれにあたります。

function NSCOM_sample()
	local res_var = NSPopIntRef() -- 第一引数の数値変数の番号を取得する。
	local first_arg = 0
	if NSCheckComma() then NSPopComma(); first_arg = NSPopInt() end -- 第二引数があれば、それを取得する。
-- ここになんか処理。
	NSSetIntValue(res_var, answer)
end