Estructuras de control

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Estructuras de control son declaraciones que manejan el flujo de la ejecución del código Luau. Hay cuatro tipos principales de estructuras de control:

La condición para if declaraciones, while ciclos y repeat ciclos, puede ser cualquier expresión Luau o valor. Si un valor no es 2> false2> o 5> nil5>, entonces Luau lo evaluará como

Si las declaraciones

La declaración básica if prueba su condición. Si la condición es cierta, entonces Luau ejecuta el código entre then y end .

Puedes usar una declaración de elseif para probar para condiciones adicionales si la condición if falla. Puedes usar una declaración de else para ejecutar el código si todas las condiciones 2>if2> y 5>if</

En una cadena de if , elseif y else condiciones, Luau prueba condiciones desde la parte superior hasta la inferior, se detiene en la primera condición 1> true1> y ejecuta el código que lo sigue.


if 2 + 2 == 5 then
print("Two plus two is five") -- No se imprime porque la condición es falsa
elseif 2 + 3 == 5 then
print("Two plus three is five") -- Dos más tres es cinco
else
print("All conditions failed") -- No se imprime porque la condición anterior es cierta
end

Mientras que Loops

Un bucle whiledo determina si una condición especificada es verdadera o falsa. Si la condición es false o 1> nil1>, entonces el bucle termina y Luau omita el código en el bucle. Si la condición es 4> true4> , entonces Luau ejecuta el código en el bucle y rep


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
--[[ Resultado de Salida:
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!
]]

Ciclos infinitos

Puedes usar un whiledo bucle para escribir bucles de juegos infinitos al configurar true como la condición.


while true do
print("Looping...")
task.wait(0.5)
end
--[[ Resultado de Salida:
Looping...
Looping...
Looping...
Looping...
...
]]

Repetir ciclos

El bucle de repetición de repeatuntil repite hasta que una condición sea cierta. La prueba condicional evaluará después que el bloque de código se ejecute, por lo que el bloque de código siempre se ejecutará al menos una vez. A diferencia de otros idiomas, el alcance de 1> peat1> — 4> hasta


local currentGoblinCount = 18
-- Genera goblins hasta un máximo de 25 en el juego
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
--[[ Resultado de Salida:
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!
]]

Para bucles

A for loop ejecuta código un número específico de veces, ya sea basado en un contador numérico o en el número de artículos en una colección.

Número para ciclos

Un bucle fordo determina el número de veces que se ejecuta el bucle usando un contraoferta. El bucle se declara con un valor de inicio, un valor de finalización y un incremento opcional.

Luau establece el contador igual que el valor de inicio, ejecuta el bloque de código en el for ciclo, luego agrega el incremento al contraoferta. Si el incremento es positivo, entonces el proceso se repite hasta que el contador sea igual o mayor que el valor final. Si el incremento es negativo, entonces el proceso se repite hasta que el contador sea igual o menor que el valor final.

El incremento opcional predeterminado es 1 . No es necesario que sea un número entero.


for counter = 1, 3 do
print(counter)
end
--[[ Resultado de Salida:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ Resultado de Salida:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ Resultado de Salida:
2
1.5
1
0.5
0
]]

Genérico para ciclos

La lista de itens genérica for lo repite sobre los elementos en una colección en lugar de una secuencia de números. Con la lista de itens genérica for lo puedes ejecutar el código para cada elemento en la colecciones, y puede usar fácilmente cada elemento en el código.

Para los bucles, necesita una función, o iterador, para repasar diferentes tipos de colecciones. El global ipairs()返回 un iterador para los arrays, y el global pairs()返回 un iterador para las diccionarios. La biblioteca global string proporciona 2>Library.cadena.gmatch()2> para repasar los arrays.

Iteración generalizada

En Luau, puede repetir una tabla usando la palabra clave in directamente en la tabla, en lugar de usar una función de iterador como ipairs() :


for i, v in {1, 2, 3, 4, 5} do
print(i, v)
end

La iteración generalizada también te permite usar el método __iter para crear una función de iterador personalizada. Este ejemplo contiene un ejemplo de función de iterador personalizado que se repite en un array en orden inverso, desde su último elemento a su primer:


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
--[[ Resultado de Salida:
5 5
4 4
3 3
2 2
1 1
]]

Matrices

La función ipairs() devuelve un itérador que itera a través de los índices numéricos en una tabla y devuelve un index y value para cada elemento. Esto hace que sea apropiado para matrizes, donde todos los índices son numéricos.


local array = {"a", "b", "c", "d", "e"}
for index, value in ipairs(array) do
print(index, value)
end
--[[ Resultado de Salida:
1 a
2 b
3 c
4 d
5 e
]]

Diccionarios

La función pairs() devuelve un innovador que itera a través de todos los índices (incluidos los índices numéricos) en una tabla y devuelve un key y value para cada entrada en la tabla de diccionario. El orden de atravesar elementos en una tabla de diccionario es arbitrario. Esto hace que sea apropiado para atravesar sobre diccionarios, donde los elementos se almac


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
--[[ Resultado de Salida:
Hello b
true d
false e
World f
5 c
1 a
]]

Palabras de control

Rompiendo ciclos

Para forzar un bucle para finalizar, usa la palabra clave break. El siguiente código muestra cómo romper un bucle whiledo infinito.


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!")
--[[ Resultado de Salida:
1
2
3
4
5
Five seconds elapsed. Time to move on!
]]

Ciclos continuos

Para forzar un bucle para que se repita y se inicie de nuevo, use la palabra de continue . Un bucle de for lo repitirá; while y 2> repeat2> — 5> hasta5> verificarán la condición del bucle antes


local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- Itera el bucle
table.insert(children, child)
end
return children
end