Valores por Defecto en Parámetros
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 26 de 73.
Los parámetros opcionales te dejan un nil por manejar. A menudo lo que realmente quieres es un valor de respaldo — "si quien llama no especificó, asume X". Luau no tiene sintaxis de valores predeterminados en la firma (no existe greeting: string = "Hello"); en su lugar se usa el idioma clásico de Lua, ahora con tipos:
function greet(name: string, greeting: string?): string
greeting = greeting or "Hello"
return `{greeting}, {name}`
end
print(greet("Alice")) -- Hola, Alice
print(greet("Alice", "Howdy")) -- Howdy, AliceEl parámetro está anotado como opcional (string?), y la primera línea del cuerpo reemplaza nil con el valor predeterminado. Funciona porque nil es falsy — nil or "Hello" se evalúa como "Hello". Después de esa línea, el analizador sabe que greeting ya no puede ser nil.
Una advertencia que conoces de Lua: ¡or también reemplaza false! Para un parámetro boolean?, flag = flag or true sobrescribiría silenciosamente un false explícito. Usa una comprobación explícita de nil en su lugar:
function ship(weight: number, expedited: boolean?): number
if expedited == nil then
expedited = false
end
-- ...
endDesafío
FácilCrea una función llamada calculateTax que acepte price: number (obligatorio) y rate: number? con valor predeterminado 0.05. Devuelve el importe del impuesto (price * rate) como un number.
Crea una función llamada formatGreeting que acepte name: string (obligatorio) y timeOfDay: string? con valor predeterminado "Hello". Devuelve "[timeOfDay], [name]!" como un string.
Crea una función llamada calculateShipping que acepte weight: number, distance: number (ambos obligatorios) y expedited: boolean? con valor predeterminado false — ¡utiliza una comprobación explícita de nil para esta! Calcula (weight * 0.5) + (distance * 0.1), y si expedited es verdadero, multiplica el resultado por 2. Devuelve un number.
Llama e imprime, cada uno en su propia línea:
calculateTax(100)calculateTax(200, 0.08)formatGreeting("Alice")formatGreeting("Bob", "Good morning")calculateShipping(5, 100)calculateShipping(3, 50, true)
Pruébalo tú mismo
-- Escribe código aquí
-- calculateTax(price: number, rate: number?) -- tasa por defecto 0.05
-- formatGreeting(name: string, timeOfDay: string?) -- por defecto "Hello"
-- calculateShipping(weight, distance, expedited: boolean?) -- por defecto false
-- luego imprime los seis resultados
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps