制御文
FVXには4種類の制御文if、while、repeat、forがあります。これら制御文では、nil値をfalse、それ以外の値をtrueとみなします。 FVXの条件式においては、ゼロとゼロ以外の値はtrueと評価され、nil値のみがfalseと評価されることにご注意ください。
if文
if文は最初に条件式をテストし、trueの場合はthenセクション、falseの場合elseセクションを実行します。if文はキーワードendで終了します。
例:
if x > 0 then
y = 1
else
y = 2
end
この例では、条件式x>0がテストされ、結果としてnil以外の値が返されるとthenセクションが実行され、nilの場合はelseセクションが実行されます。最初のifの後でelseifを使用してより多くの条件式をテストすることできます。
例:
if x > 20 then
y = 1
elseif x > 10 then
y = 2
elseif x > 0 then
y = 3
else
y = 4
end
while文
while文は最初に条件式をテストし、条件が満たされた場合はループ処理を繰り返し実行します。条件を満たさない場合、その時点でループを終了します。while文はキーワードendで終了します。
例:
a = 1
b = 10
while a<b do
c = a^2
a = a + 1
end
repeat文
repeat文はwhile文に似ていますが、条件式のテストをループ処理の終わりに行うという点が異なります。したがってプログラムはループ処理を少なくとも1回実行します。until文を使用して条件式をテストします。
例:
local x = 1
repeat
print (x)
x = x + 1
until x>10
for文
for文はカウンタを使用して設定された回数だけループを処理します。カウンタのインクリメントはオプションで、指定しない場合は1に設定されます。for文はキーワードendで終了します。ループカウンタは、ループの最初の反復で初期値に設定され、ループ処理後にインクリメントされます。ループカウンタが最大値を超えるとループの実行が停止します。
例:
x = 0
for i = 1, 10, 2 do
x = x + 1
end
上のループの最後では、インクリメントが2のために変数xの値は5になります。インクリメントを負の整数に設定することも可能です。
注意:カウンタを表す変数は自動的にローカル宣言されます。 したがって、ループ終了後にこの変数の値を取り出すことはできません。上の例ではループの終了後のiの値はnilになります。カウンタの値を保持する必要がある場合は、別の変数に割り当てる必要があります。
例:
y = 1
for j = 1, 20 do
if j>10 then
x = j
break
end
end
上の例では、ループは11回の繰り返しを経て終了します。 またカウンタjの値は変数xに保存されます。
forループで数値インデックスを持つテーブルを参照することもできます。デフォルトでは数値インデックスは1から始まります。以下の例では、関数getn()を使用してテーブルtの要素数を取得しています。
例:
t = { "l", "m", "n", "o" }
for i = 1, getn(t) do
print (t[i])
end
カウンタを使用する代わりに、指定したテーブル中のインデックス値のペアを参照することができます。 各インデックス値のペアが取得される順序はランダムです。このループ処理の回数はテーブル内のインデックスの数に等しくなります。
t = {a = 9,b = 6,c = 15,d = 27,tmp = 12}
for x, y in t do
print (x, y)
end
|