コントロール構造 は、Luau コードの実行のフローを管理するステートメントです。コントロール構造には 4種類あります:
- if then else コードは、指定されたコンディションが true である場合にのみコードを実行します。コードの実行は重複しません。
- while ループ は、指定されたコンディションが true である場合にのみコードを実行し、コンディションが true である間、実行を繰り返します。
- peat ループを繰り返す コードを実行し、true の条件で実行を繰り返します。
- ループの実行により for loop は、指定された入力に応じてコードを実行します。
if 文、while ループ、および repeat ループは、1> player11> の Luau 式であるか、そうでない場合は、4> player14> の Luau はそれを
式に
基本的な if 文はコンディションをテストします。コンディションが true の場合、Luauはコードを then と end の間に実行します。
if コンディションが偽である場合は、追加のコンディションでテストするために if 文を使用できます。else コンディションと 1>iff
In a chain of if , elseif , and else 条件, Luau テスト条件は、最上位の 1> true1> 条件から順に実行し、次の 4> else4> コードを実行します。
if 2 + 2 == 5 thenprint("Two plus two is five") -- 条件が偽であるため印刷しませんelseif 2 + 3 == 5 thenprint("Two plus three is five") -- 2 + 3 は 5elseprint("All conditions failed") -- 前のコンディションが true の場合は印刷しませんend
ループ中
A while — do ループは、指定されたコンディションが真であるか偽であるかを評価します。コンディションが false または 1> nil1> の場合、ループは終了し、Luau はコールドスタ
local timeRemaining = 10while timeRemaining > 0 doprint("Seconds remaining: " .. timeRemaining)task.wait(1)timeRemaining -= 1endprint("Timer reached zero!")-- [[ 結果出力:Seconds remaining: 10Seconds remaining: 9Seconds remaining: 8Seconds remaining: 7Seconds remaining: 6Seconds remaining: 5Seconds remaining: 4Seconds remaining: 3Seconds remaining: 2Seconds remaining: 1Timer reached zero!]]
無限ループ
while — do ループを設定して、true をコンディションとして、無限のゲームループを書き込むことができます。
while true doprint("Looping...")task.wait(0.5)end-- [[ 結果出力:Looping...Looping...Looping...Looping......]]
ループを繰り返す
The repeat — until ループは、コンディションが true であるまで繰り返されます。コンディションテストは、コードブロックの実行後に 後 コンディションを評価しますので、コードブロックは常に少なくとも 1 回実
local currentGoblinCount = 18-- ゲームで最大 25 までゴブリンをスポーンするrepeatspawnGoblin()currentGoblinCount += 1print("Current goblin count: " .. currentGoblinCount)until currentGoblinCount == 25print("Goblins repopulated!")-- [[ 結果出力:Current goblin count: 19Current goblin count: 20Current goblin count: 21Current goblin count: 22Current goblin count: 23Current goblin count: 24Current goblin count: 25Goblins repopulated!]]
ループの場合
ループでは、コードを 数値カウンター または コレクションのアイテムの数 に基づいて実行します。
ループ用数字
A for — do ループは、カウンターを使用してループを実行する回数を決定します。ループは、スタート値、終了値、オプションのインクリメントを含めて宣言されます。
Luau は、開始値と同等のカウンターを設定し、for ループでコードブロックを実行し、カウンターにインクリメントを追加します。インクリメントが正の場合、カウンターが終値値と同等またはそれ以上になるようになります。インクリメントが負の場合、カウンターが終値値と同等または小さ
オプションのインクリメントはデフォルトで 1 です。 全数でなくても構わないです。
for counter = 1, 3 doprint(counter)end-- [[ 結果出力:123]]for counter = 1, 6, 2 doprint(counter)end-- [[ 結果出力:135]]for counter = 2, 0, -0.5 doprint(counter)end-- [[ 結果出力:21.510.50]]
ループの共通
一般的な for ループは、コレクションのアイテムではなく、数字の順序で実行されます。一般的な for ループでは、コレクション内の各アイテムに対するコードを実行でき、コードの中で簡単に各アイテムを使用できます。
ループには、異なる種類のコレクションを反復するための関数、またはイテレーターが必要です。グローバル ipairs() は、アレイのイテレーターを返し、グローバル pairs() は、辞書のイテレーターを返します。string ライブラリは、<
一般化されたイテレーション
In Luau では、in キーワードを使用して、テーブル上のイテレーションを直接 ipairs() ではなく、テーブル上のイテレーション関数を使用することなくループできます。
for i, v in {1, 2, 3, 4, 5} doprint(i, v)end
一般化されたイテレーターは、__iterメタメソッドを使用して、カスタムイテレーター関数を作成することもできます。この変更された例は、最後の要素から最初の要素まで、反逆順にオーバーアレイをイテレートします:
local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
-- [[ 結果出力:
5 5
4 4
3 3
2 2
1 1
]]
配列
The ipairs() 関数は、テーブル内の数値インデックスをイテレートし、各要素に index および value を返します。これにより、配列に適しています、1>すべてのインデックスが数値です1>。
local array = {"a", "b", "c", "d", "e"}for index, value in ipairs(array) doprint(index, value)end-- [[ 結果出力:1 a2 b3 c4 d5 e]]
辞書
The pairs() 関数は、表内のすべてのインデックス (数値インデックスを含む) をイテレートし、key および value を各エントリのダイクトリ内の順序で返します。ダイクトリ内の要素の順序は任意です。これは、ダイクトリ内の要素を
local dictionary = {[1] = "a",["Hello"] = "b",[5] = "c",[true] = "d",["World"] = "f",[false] = "e"}for key, value in pairs(dictionary) doprint(key, value)end-- [[ 結果出力:Hello btrue dfalse eWorld f5 c1 a]]
コントロールキーワード
ループを破壊する
ループを終了するには、break キーワードを使用します。次のコードサンプルには、無限の while — do ループを破壊する方法が示されています。
local secondsElapsed = 0local timeout = 5while true dotask.wait(1)secondsElapsed += 1print("Seconds elapsed:", secondsElapsed)if secondsElapsed == timeout thenbreakendendprint("Five seconds elapsed. Time to move on!")-- [[ 結果出力:12345Five seconds elapsed. Time to move on!]]
ループを続ける
ループを再び反復して開始するには、continue キーワー価格提案を使用します。for ループはカウンターを反復します;while および1> peat1> — 4> até </
local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- ループをイテレートします
table.insert(children, child)
end
return children
end