ゴブリンでもわかるNSLua/Lua5.1 第2回:Lua5.1入門 変数の四則演算
前二稿で、「Lua自体のチュートリアルをこなせばNScripterでLuaを扱える」状態になった。本稿ではLuaのチュートリアルに進む。
(……実のところ、Lua5.1それ自体のチュートリアルは公式のガイドブックが一番親切で分かりやすい。都道府県単位なら一冊くらいは在庫があるはずなので、紙の本に抵抗がない人はもうこのページ閉じて地元の図書館に取り寄せ予約を出す方がよい。)
それはそれとして、まずは「NScripterの延長で理解できる変数定義/四則演算」から。
変数の宣言、代入、四則演算
~以下、system.lua内に記述されている前提~
--「--」で始まる行は注釈・コメントアウト --NScripterの「;」に相当する --[[ 複数行をまとめてコメントアウトできる 便利。 --[=[ 入れ子にもできる とても便利。 --]=] --]] --変数は好きな場所でいきなり定義してよい(代入が定義・宣言を兼ねる) aaa=1 --変数名の大文字・小文字は区別される。大雑把だった人は注意 AAA=2 --複数の変数をまとめて定義・代入してよい bbb,ccc=1,2 --命令間の区切りはスペースさえ空いていればよい --(Luaが自動で解釈してくれる) bbb=1 ccc=2 --もし明示したければ「;」で区切ってもよい bbb=1;ccc=2; --四則演算+-*/の扱いはNScripterと変わらない aaa=(1+2-3*4)/5 --ただしmod(剰余、割った余り)は「%」で表す aaa=10 % 3 -->1 --累乗は「^」で表す 3^2なら3の2乗 aaa=3^2 --根号(√)は0.5乗で表せる aaa=3^0.5 --右辺に変数を書いてもよい aaa=aaa+1 --文字列は 「""」または「''」で括る ddd="12345" --コメントは行末にも書ける --文字列の結合は「..」で行う。+ではないので注意 eee="あいう".."えお" --数字もそのまま結合できる fff="123"..45 --ただし、数字の直後に「..」を書く際はスペースを空ける必要がある --めんどいね ggg=123 .. "45" --小数点と結合を明確に区別するための仕様である --Luaにおける「数値」は常に小数点以下(浮動小数点)を扱う hhh=3.14 ggg=3/2 -->ggg=1.5
上記例ではLuaならではの便利機能が(複数行コメントアウト程度しか)見えず、NScripter側とやり取りする手段も含まれない。これだけでは何も始まらないが、とりあえず「基本的な言語仕様はNScripterと比べても別に複雑ではない」とさえ理解できれば十分だろう。
ifとfor
ifは複数行にまたがって書ける点、そして「elseif」「else」の存在が大きな相違箇所。NScripterでifとjumpfなりを延々組み合わせていたような判定はスマートに書けるようになる。
forは「指定回数ループするだけなら」NScripterとほぼ一緒。Luaならでのループは他にあるが、ここでは見てすぐ分かる回数ループのみ紹介する。
a="123" b=456 c="789" --if(判定)then -- 判定を満たす場合に実行する処理 -- 複数行にまたがって書いてよい --end --「==」と書く必要がある。「=」はダメ if(a=="123")then --aは"123"である end if(b<=999)then --bは999以下である end --「and」は&&に、「or」は||に相当する if(a=="123" and b==456)then --判定を満たした end if(a=="123" or b==456)then --判定を満たした end --ややこしい判定は複数行にまたがって書いてもよい if( --内部に注釈も書ける。 (a=="123" and b==456) or c=="789" )then --満たした end --if(判定)then -- 満たす場合に実行する処理 --else -- 満たさない場合に実行する処理 --end if(a=="123")then --aは"123"である else --aは"123"ではない end --if(判定1)then -- 判定1を満たす場合に実行する処理 --elseif(判定2)then --※判定1を満たさない場合のみ追加で判定 -- 判定2を満たす場合に実行する処理 --else -- 全ての条件式を満たさなかった場合に実行する処理 --end if(a=="999")then --aは"999"である elseif(a=="123")then --aは"123"である else --aは"999"でも"123"でもない end for i=1,10 do --10回繰り返す --「ループ回数は初回のみ計算する」という相違点もあるにはあるが、 --NScripterユーザーは元々この仕様を意識していないので忘れてよい end for n=10,1,-1 do --見た目はNScripterとほとんど変わらない(A TO B STEP C) end
(少なくとも基礎的な部分だけなら)NScripterとそこまで大きくは変わらない、おそるべき言語ではないと分かったかと思う。
次項ではNScripterでいう「命令」に相当する骨子、「関数」を紹介する。
--ダイアログが出現する aaa="テスト" NSOkBox(aaa,"テストです")