コントロール構造

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

コントロール構造 は、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はコードを thenend の間に実行します。

if コンディションが偽である場合は、追加のコンディションでテストするために if 文を使用できます。else コンディションと 1>iff

In a chain of if , elseif , and else 条件, Luau テスト条件は、最上位の 1> true1> 条件から順に実行し、次の 4> else4> コードを実行します。


if 2 + 2 == 5 then
print("Two plus two is five") -- 条件が偽であるため印刷しません
elseif 2 + 3 == 5 then
print("Two plus three is five") -- 2 + 3 は 5
else
print("All conditions failed") -- 前のコンディションが true の場合は印刷しません
end

ループ中

A whiledo ループは、指定されたコンディションが真であるか偽であるかを評価します。コンディションが false または 1> nil1> の場合、ループは終了し、Luau はコールドスタ


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
-- [[ 結果出力:
Seconds remaining: 10
Seconds remaining: 9
Seconds remaining: 8
Seconds remaining: 7
Seconds remaining: 6
Seconds remaining: 5
Seconds remaining: 4
Seconds remaining: 3
Seconds remaining: 2
Seconds remaining: 1
Timer reached zero!
]]

無限ループ

while — do ループを設定して、true をコンディションとして、無限のゲームループを書き込むことができます。


while true do
print("Looping...")
task.wait(0.5)
end
-- [[ 結果出力:
Looping...
Looping...
Looping...
Looping...
...
]]

ループを繰り返す

The repeatuntil ループは、コンディションが true であるまで繰り返されます。コンディションテストは、コードブロックの実行後に コンディションを評価しますので、コードブロックは常に少なくとも 1 回実


local currentGoblinCount = 18
-- ゲームで最大 25 までゴブリンをスポーンする
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
-- [[ 結果出力:
Current goblin count: 19
Current goblin count: 20
Current goblin count: 21
Current goblin count: 22
Current goblin count: 23
Current goblin count: 24
Current goblin count: 25
Goblins repopulated!
]]

ループの場合

ループでは、コードを 数値カウンター または コレクションのアイテムの数 に基づいて実行します。

ループ用数字

A fordo ループは、カウンターを使用してループを実行する回数を決定します。ループは、スタート値、終了値、オプションのインクリメントを含めて宣言されます。

Luau は、開始値と同等のカウンターを設定し、for ループでコードブロックを実行し、カウンターにインクリメントを追加します。インクリメントが正の場合、カウンターが終値値と同等またはそれ以上になるようになります。インクリメントが負の場合、カウンターが終値値と同等または小さ

オプションのインクリメントはデフォルトで 1 です。 全数でなくても構わないです。


for counter = 1, 3 do
print(counter)
end
-- [[ 結果出力:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
-- [[ 結果出力:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
-- [[ 結果出力:
2
1.5
1
0.5
0
]]

ループの共通

一般的な for ループは、コレクションのアイテムではなく、数字の順序で実行されます。一般的な for ループでは、コレクション内の各アイテムに対するコードを実行でき、コードの中で簡単に各アイテムを使用できます。

ループには、異なる種類のコレクションを反復するための関数、またはイテレーターが必要です。グローバル ipairs() は、アレイのイテレーターを返し、グローバル pairs() は、辞書のイテレーターを返します。string ライブラリは、<

一般化されたイテレーション

In Luau では、in キーワードを使用して、テーブル上のイテレーションを直接 ipairs() ではなく、テーブル上のイテレーション関数を使用することなくループできます。


for i, v in {1, 2, 3, 4, 5} do
print(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) do
print(index, value)
end
-- [[ 結果出力:
1 a
2 b
3 c
4 d
5 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) do
print(key, value)
end
-- [[ 結果出力:
Hello b
true d
false e
World f
5 c
1 a
]]

コントロールキーワード

ループを破壊する

ループを終了するには、break キーワードを使用します。次のコードサンプルには、無限の whiledo ループを破壊する方法が示されています。


local secondsElapsed = 0
local timeout = 5
while true do
task.wait(1)
secondsElapsed += 1
print("Seconds elapsed:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("Five seconds elapsed. Time to move on!")
-- [[ 結果出力:
1
2
3
4
5
Five 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