この課ではループ、すなわち繰り返して一定の動作をおこなう処理について学習する。
たとえば、同じ内容の文を10行にわたって表示しようとしたとき、いかのような記述はいかにも冗長である。
function OnFrame() out(0, "さばとたんかわいいよ"); out(1, "さばとたんかわいいよ"); out(2, "さばとたんかわいいよ"); out(3, "さばとたんかわいいよ"); out(4, "さばとたんかわいいよ"); out(5, "さばとたんかわいいよ"); out(6, "さばとたんかわいいよ"); out(7, "さばとたんかわいいよ"); out(8, "さばとたんかわいいよ"); out(9, "さばとたんかわいいよ"); end
そこで、このような同じ動作の反復を容易にするための構文がLuaには用意されており、それを用いると以下のように 簡潔な記述が可能となる
function OnFrame() for i = 0, 9, 1 do out(i, "さばとたんかわいいよ"); end end
このように同じ内容を反復して実行することをループ処理といい、Luaにはそのための構文が「for」「while」「repeat」の 3種類ある。それぞれの詳細については以下で説明する。
function OnFrame() for i = 0, 9, 1 do--0, 9, 1の値は適宜いじるべし out(i, "さばとたんかわいいよ"); --i = 100;--ダメ、ゼッタイ end end
上の例で用いられているのがfor文である。for文は一定の回数ループを実行するのに向いている。
ループはループ変数(この場合は"i")が初期値(この場合は0)から始まり、終了値(この場合は9)以上になるまで実行される。また、ループ変数は1回ループしてfor文の最初に戻ってくるたびにstep値(この場合は1)ずつ加算される。
ループ変数はループ内部で「今は何回目のループなのか」を取得するために用いることができる。なお、ループ内部でループ変数に代入を行ってはならない。ダメ、ゼッタイ。
また、最初にfor文に到達した時点で初期値が終了値より大きい場合はfor文は一度も実行されない。
step値は、特に指定しない、つまり"for i = 1, 9 do"と書いた場合、は1とみなされる。通常のループではこれで足りる場合も非常に多い。
以下ではstep値が負の場合の例外について説明する。
function OnFrame() for i = 20, 11, -1 do--適宜いじるべし out(i, "さばとたん、ああさばとたん"); end end
step値に負の値(この場合は-1)を入れた場合、通常とは逆にループ変数が終了値以下になるまでループする。 それ以外は通常と同じである。