Parámetros Opcionales
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 25 de 73.
En Lua puro siempre podías omitir argumentos: los que faltaban se convertían silenciosamente en nil, y olvidarse de gestionar eso era una fuente clásica de errores. Luau hace explícita esta posibilidad: añade ? al tipo de un parámetro para marcarlo como opcional.
function greet(name: string, title: string?): string
if title then
return `{title} {name}`
end
return `Hello, {name}`
end
print(greet("Ada")) -- Hola, Ada
print(greet("Ada", "Dr.")) -- Dra. Adastring? se interpreta como "string o nil". Los llamadores pueden pasar una cadena u omitir el argumento por completo; los parámetros sin ? son obligatorios, y el comprobador marca las llamadas que los omiten.
Dentro de la función, un parámetro opcional podría ser nil, así que compruébalo antes de usarlo: if title then ... end es el patrón estándar. Omite la comprobación y concatena nil en una cadena, y obtendrás el mismo error de ejecución que Lua siempre te daba; el comprobador de tipos te avisa primero.
Desafío
FácilCrea una función llamada createUserProfile que acepte username: string (obligatorio) y displayName: string? (opcional), y devuelva un string:
- Cuando se proporcionen ambos, devuelve:
"Profile: [displayName] (@[username])" - Cuando solo se proporcione el nombre de usuario, devuelve:
"Profile: @[username]"
Crea una función llamada calculateDiscount que acepte price: number (obligatorio) y membershipLevel: string? (opcional), y devuelva un number:
- Cuando se proporcione un nivel de membresía, devuelve el precio reducido en un 10 % (multiplícalo por
0.9) - De lo contrario, devuelve el precio sin cambios
Llama a las funciones e imprime cada resultado en su propia línea:
createUserProfile("john_doe", "John Doe")createUserProfile("jane_smith")calculateDiscount(100, "premium")calculateDiscount(75)
Pruébalo tú mismo
-- Escribe código aquí
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- luego imprime los cuatro 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