Roblox GuidebookBase de conocimiento
Español ⌄

Desarrollo / ROBLOX

Funciones Luau: parámetros, return y comprobación de resultados

Aprende a recibir el resultado de una función, distinguir return de print y validar las entradas. Un ejercicio original calcula las estaciones restantes de una ruta con ejemplos ejecutables y casos límite.

Actualizado:

Define la pregunta antes de programar #

Imagina un recorrido didáctico de diez estaciones. Conocemos el total y cuántas se han visitado. Queremos calcular cuántas quedan. La función responde únicamente a una pregunta aritmética: restar visited de total. No mueve personajes, lee partidas guardadas ni confirma que un jugador haya visitado estaciones reales.

Anota el significado de las entradas: total es la cantidad completa y visited la cantidad visitada. En este ejercicio ambas deben ser enteros no negativos, y visited no puede superar total. Es una regla del ejemplo, no un modelo universal para todos los juegos Roblox. Permite identificar si un resultado inesperado nace de la entrada, el cálculo o la expectativa.

Define la función y llámala #

El primer ejemplo define local function remainingStops(total, visited). Su cuerpo está entre la declaración y end. return entrega la diferencia calculada al código que llama. La definición por sí sola todavía no ejecuta el cálculo. La llamada remainingStops(10, 3) inicia la ejecución con esos argumentos.

Dos llamadas guardan resultados en variables distintas. Diez estaciones con tres visitadas deben producir 7; diez con seis visitadas deben producir 4. Después print muestra los valores guardados. Ejecuta el bloque completo en un Script didáctico separado y compara ambas líneas de Output. Los ejemplos originales también se ejecutaron con un intérprete independiente de Luau: verifica el lenguaje y la aritmética, no una ruta jugable en Studio.

Llamada y resultado devueltoAbrir imagen a tamaño completo ↗
Esquema original de cálculo; no confirma progreso de juego.
local function remainingStops(total, visited)
    return total - visited
end
local firstRemaining = remainingStops(10, 3)
local secondRemaining = remainingStops(10, 6)
print(firstRemaining)
print(secondRemaining)

Distingue parámetros y argumentos #

total y visited son nombres de parámetros dentro de la función. Los números 10 y 3 son argumentos de una llamada concreta. Otra llamada proporciona valores distintos a los mismos parámetros. Una variable externa puede llamarse routeLength sin coincidir con el parámetro, siempre que su valor tenga el significado acordado para total.

El orden importa. remainingStops(10, 3) y remainingStops(3, 10) reciben entradas diferentes. La función inicial no valida su significado, así que la segunda calcula un número negativo. Cambiar la etiqueta del mensaje no arregla esa entrada. Compara primero orden y valores con las reglas del ejercicio y añade después la validación.

Observa print sin return #

El segundo ejemplo, showRemaining, imprime la diferencia dentro de su cuerpo. Al llamarlo con 10 y 3 aparece 7 en Output. Sin embargo, no devuelve ningún valor explícitamente. La variable result del código que llama recibe nil. Por eso print(result) muestra nil, en lugar de repetir el siete.

Una línea correcta en Output no demuestra que quien llamó haya recibido el valor previsto. Si otro código necesita la cantidad después, la función debe devolverla. Conserva ambos print para observar primero el número de la función y luego nil del llamador. Sustituir el resultado por un siete constante oculta el problema y falla cuando cambian las entradas.

Salida y resultado son distintosAbrir imagen a tamaño completo ↗
Esquema original que distingue un mensaje Output del valor devuelto.
local function showRemaining(total, visited)
    print(total - visited)
end
local result = showRemaining(10, 3)
print(result)

Guarda el valor donde se necesita #

En el primer ejemplo, firstRemaining y secondRemaining contienen números devueltos. El código que llama puede compararlos, pasarlos a otra operación o mostrarlos. Cálculo y presentación son pasos separados. Para comprender return basta con una variable local y una comprobación; no hace falta construir una interfaz.

return termina la ejecución de esa rama de la función. No coloques una operación posterior en la misma rama esperando que modifique el valor devuelto. Luau permite devolver varios valores separados por comas. La versión validada usa una pareja: resultado y señal de validez. Así diferencia un resultado ausente de un cálculo finalizado correctamente.

Valida antes de restar #

checkedRemaining comprueba primero los tipos. Si falta visited, el parámetro recibe nil y devuelve nil, false antes de la aritmética. También rechaza la cadena "10": el ejemplo acepta números y no convierte entradas de texto. Después descarta NaN e infinito positivo; los valores negativos, incluido infinito negativo, fallan en la comprobación de negatividad.

Comprobar el resto de la división entre 1 descarta cantidades fraccionarias. La última condición rechaza visited mayor que total. Solo las entradas válidas llegan a return total - visited, true. El orden explica cada regla. Protege este cálculo didáctico, pero no demuestra que un número enviado por el cliente corresponda al progreso real de un jugador.

local function checkedRemaining(total, visited)
    if type(total) ~= "number" or type(visited) ~= "number" then
        return nil, false
    end
    if total ~= total or visited ~= visited then
        return nil, false
    end
    if total == math.huge or visited == math.huge then
        return nil, false
    end
    if total < 0 or visited < 0 or total % 1 ~= 0 or visited % 1 ~= 0 then
        return nil, false
    end
    if visited > total then
        return nil, false
    end
    return total - visited, true
end
print(checkedRemaining(10, 3))
print(checkedRemaining(10))
print(checkedRemaining(10, 12))

Comprueba datos ausentes y progreso excesivo #

El bloque incluye tres llamadas. checkedRemaining(10, 3) imprime 7 y true. checkedRemaining(10) imprime nil y false porque falta el segundo argumento. checkedRemaining(10, 12) también imprime nil y false: doce visitas no encajan en diez estaciones según las reglas elegidas.

Guarda ambos valores con local value, valid = checkedRemaining(total, visited). Comprueba valid == true antes de mostrar la cantidad. Para false prepara un mensaje claro de datos incorrectos. Convertir nil automáticamente en cero escondería el fallo y parecería indicar que la ruta está completada. Corrige la entrada donde se genera.

Reconoce cero como resultado válido #

checkedRemaining(10, 10) devuelve 0, true porque ya se visitaron las diez estaciones. La ruta didáctica vacía checkedRemaining(0, 0) también devuelve 0, true. Ambos son cálculos válidos. nil, false indica entradas rechazadas y ausencia de resultado, con un significado diferente de cero.

En Luau cero es verdadero en una condición, pero valid == true explica mejor el acuerdo de esta función. Usar solo value > 0 descartaría un cero correcto. El comportamiento real al completar una ruta debe definirse después de validar, dentro de un sistema de juego que utilice realmente este modelo.

Prueba límites además del caso exitoso #

Prepara una tabla: 10 y 3 producen 7; 10 y 0 producen 10; 10 y 10 producen 0; 0 y 0 producen 0. Todos deben devolver true. Separa las entradas inválidas: argumento ausente, cadena, cantidad negativa, fracción y visited superior a total. Espera nil y false.

El archivo de comprobación ejecutó estos casos mediante assert y añadió NaN e infinito. Anota resultados esperados antes de ejecutar y compáralos con las parejas obtenidas. Si difieren, registra la entrada concreta y ambos valores observados. La aritmética correcta no verifica guardado de progreso, confianza en el cliente ni entrega de recompensas.

Entrada total / visitedResultado esperado
10 / 37, true
10 / 100, true
0 / 00, true
10 / falta segundo argumentonil, false

Entrega el código con sus reglas #

Guarda nombre, significado y orden de parámetros, entradas permitidas, pareja devuelta y tabla de pruebas para la siguiente persona desarrolladora. Identifica el código como ejemplo original de Luau puro. Cuando se conecte una ruta real, habrá que determinar por separado de dónde obtiene el servidor total y visited confirmados y cómo trata los datos ausentes.

El ejercicio no contiene objetos Roblox, eventos, comunicación de red ni almacenamiento permanente; no es un sistema completo de progreso. Su utilidad consiste en distinguir una línea de Output del resultado disponible para quien llama y comprobarlo con entradas comprensibles. La siguiente tarea puede ampliarlo sin perder las reglas verificadas.

CampoGuardar
ParámetrosCantidad total y visitada
ReglasEnteros finitos no negativos
ResultadoNúmero y señal valid aparte
PruebasEntradas normales y límite

Fuentes originales

Roblox Creator Hub — Functions