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 que debes gestionar. A menudo, lo que realmente quieres es un valor de respaldo: «si quien llama no lo indicó, supone X». Luau no tiene una sintaxis de valor predeterminado en la firma (no existe greeting: string = "Hello"); en su lugar, usas el modismo 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")) -- Hello, Alice
print(greet("Alice", "Howdy")) -- Howdy, AliceEl parámetro está anotado como opcional (string?), y la primera línea del cuerpo reemplaza nil por el valor predeterminado. Funciona porque nil es falso: nil or "Hello" se evalúa como "Hello". Después de esa línea, el comprobador sabe que greeting ya no puede ser nil.
Una salvedad que ya conoces de Lua: ¡or también reemplaza false! Para un parámetro boolean?, flag = flag or true sobrescribiría silenciosamente un false explícito. En su lugar, usa una comprobación explícita de nil:
function ship(weight: number, expedited: boolean?): number
if expedited == nil then
expedited = false
end
-- ...
endDesafío
FácilCrea una función llamada calculateTax que reciba price: number (obligatorio) y rate: number? con un valor predeterminado de 0.05. Devuelve el importe del impuesto (price * rate) como un number.
Crea una función llamada formatGreeting que reciba name: string (obligatorio) y timeOfDay: string? con un valor predeterminado de "Hello". Devuelve "[timeOfDay], [name]!" como un string.
Crea una función llamada calculateShipping que reciba weight: number, distance: number (ambos obligatorios) y expedited: boolean? con un valor predeterminado de false: ¡usa una comprobación explícita de nil para este último! Calcula (weight * 0.5) + (distance * 0.1) y, si expedited es true, 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?) -- rate 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 MapsPractica por tu cuenta: Compilador de Lua online