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:
- Una declaración si entonces otra cosa ejecuta el código solo si se cumple una condición especificada. La ejecución del código no se repite.
- A mientras se ejecuta el código solo si se cumple una condición especificada, y repite la ejecución mientras la condición sigue siendo true .
- Un bucle de repetición repetir cód. y repetir códigoejecución si la condición es true .
- A para la repetición ejecuta el código un número especificado de veces dependiendo de los parámetros especificados.
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 thenprint("Two plus two is five") -- No se imprime porque la condición es falsaelseif 2 + 3 == 5 thenprint("Two plus three is five") -- Dos más tres es cincoelseprint("All conditions failed") -- No se imprime porque la condición anterior es ciertaend
Mientras que Loops
Un bucle while — do 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 = 10while timeRemaining > 0 doprint("Seconds remaining: " .. timeRemaining)task.wait(1)timeRemaining -= 1endprint("Timer reached zero!")--[[ Resultado de Salida:Seconds remaining: 10Seconds remaining: 9Seconds remaining: 8Seconds remaining: 7Seconds remaining: 6Seconds remaining: 5Seconds remaining: 4Seconds remaining: 3Seconds remaining: 2Seconds remaining: 1Timer reached zero!]]
Ciclos infinitos
Puedes usar un while — do bucle para escribir bucles de juegos infinitos al configurar true como la condición.
while true doprint("Looping...")task.wait(0.5)end--[[ Resultado de Salida:Looping...Looping...Looping...Looping......]]
Repetir ciclos
El bucle de repetición de repeat — until 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 juegorepeatspawnGoblin()currentGoblinCount += 1print("Current goblin count: " .. currentGoblinCount)until currentGoblinCount == 25print("Goblins repopulated!")--[[ Resultado de Salida:Current goblin count: 19Current goblin count: 20Current goblin count: 21Current goblin count: 22Current goblin count: 23Current goblin count: 24Current goblin count: 25Goblins 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 for — do 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 doprint(counter)end--[[ Resultado de Salida:123]]for counter = 1, 6, 2 doprint(counter)end--[[ Resultado de Salida:135]]for counter = 2, 0, -0.5 doprint(counter)end--[[ Resultado de Salida:21.510.50]]
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} doprint(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) doprint(index, value)end--[[ Resultado de Salida:1 a2 b3 c4 d5 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) doprint(key, value)end--[[ Resultado de Salida:Hello btrue dfalse eWorld f5 c1 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 while — do infinito.
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!")--[[ Resultado de Salida:12345Five 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