제어 구조 는 Luau 코드 실행 흐름을 관리하는 문입니다. 제어 구조는 네 가지 주요 유형입니다.
- if then else 문은 지정된 조건이 true 인 경우에만 코드를 실행합니다. 코드 실행은 반복되지 않습니다.
- while loop 은 지정된 조건이 true 인 경우에만 코드를 실행하고 조건이 true 인 경우에만 실행을 반복합니다.
- 반복 루프는 코드를 실행하고 조건이 true인 경우 실행을 반복합니다.
- 루프 실행을 위한 for loop 코드는 지정된 입력에 따라 일정 수의 실행을 수행합니다.
if 문, while 루프 및 repeat 루프는 모든 Luau 식이나 값일 수 있습니다. 값이 1> force1> 또는 4> nil4> 이 아니면 Luau는 조
문이 있으면
기본 if 문은 조건을 테스트합니다. 조건이 트루인 경우 Luau는 코드를 then 및 end 사이에서 실행합니다.
if 조건이 거짓인 경우 추가 조건을 테스트하려면 if 문을 사용할 수 있습니다. else 문을 사용하여 모든 1>if1>
if, elseif, 및 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") -- 이전 조건이 트루인 경우 출력하지 않습니다.Doesn't print because the previous condition is trueend
루프 중
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......]]
반복 루프
peat — until 루프는 조건이 트루인 경우까지 반복됩니다. 조건 테스트는 후 코드 블록 실행을 평가하므로 코드 블록은 최소 한 번 실행됩니다. 다른 언어와 달리 로컬 변수의 1> 4> peat
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!]]
루프용
루프는 코드를 집합의 크기와 관계없이 숫자 카운터 또는 항목의 수를 기반으로 여러 번 실행합니다.
반복 수 입력
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()는 사전에 대한 이터레이터를 반환합니다. Library.
일반화된 반복
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
]]
배열
함수 ipairs() 는 테이블의 숫자 인덱스를 반복하는 이터레이터를 반환하고 각 요소에 대해 index 및 value를 반환합니다. 이렇게 하면 모든 인덱스가 숫자인 배열에 적합합니다.
local array = {"a", "b", "c", "d", "e"}for index, value in ipairs(array) doprint(index, value)end--[[ 결과 출력:1 a2 b3 c4 d5 e]]
사전
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 및 2> peat2> — 5> até5>
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