Seguridad contra Nulos en Modo Estricto
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 71 de 73.
El error más común de Lua es «attempt to index nil»: código que suponía que existía un valor cuando no era así. La respuesta de Luau es la disciplina con nil: con --!strict, un string simple nunca puede ser nil. Si nil es una posibilidad real, el tipo debe indicarlo con ?:
--!strict
local nickname: string? = nil -- ok: string O nil
local username: string = nil -- ✗ error de tipo en modo strictLa disciplina funciona en ambos sentidos: dado un string?, el modo estricto no te permitirá usarlo como una cadena hasta que hayas descartado nil. La herramienta estándar es una comparación simple, que hace una reducción del tipo igual que una comprobación con typeof:
local function shout(name: string?): string
if name ~= nil then
return string.upper(name) -- name es string aquí
end
return "NOBODY"
endCuando nil sería un error en lugar de un caso válido, usa assert: después de assert(x ~= nil), el comprobador trata x como no nulo durante el resto del ámbito, y en tiempo de ejecución la aserción falla de inmediato, en el punto donde se produce la suposición incorrecta, en lugar de hacerlo en algún lugar muy distante.
La ventaja: el comprobador te obliga a gestionar cada valor que «podría faltar» mientras editas, y el error en tiempo de ejecución simplemente nunca ocurre.
Desafío
FácilProcesa los campos del perfil de usuario que podrían faltar. Comienza el archivo con --!strict.
getDisplayName(fullName: string?): string: devuelvefullNamesi no esnil; de lo contrario, devuelveAnonymous User.formatEmail(email: string?): string: devuelve el correo electrónico en minúsculas (string.lower) si no esnil; de lo contrario, devuelveNo email provided.getUserInfo(name: string?, email: string?): string: utiliza ambas funciones y devuelveName: [processed name], Email: [processed email].
Después, imprime cada uno en su propia línea:
getDisplayName("John Smith")getDisplayName(nil)formatEmail("ALICE@EXAMPLE.COM")formatEmail(nil)getUserInfo("Bob Johnson", "bob@test.com")getUserInfo(nil, nil)getUserInfo("Sarah Wilson", nil)
Pruébalo tú mismo
--!strict
-- Escribe código aquí
-- 1) getDisplayName(fullName: string?): string — nil-check, fallback "Anonymous User"
-- 2) formatEmail(email: string?): string — string.lower or "No email provided"
-- 3) getUserInfo(name: string?, email: string?): string — combina ambos
-- 4) imprime las siete llamadas de prueba de la tarea
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 tipos8Enums al estilo de Luau
El patrón Enum en LuauEnums numéricos con tablasEnums de cadena como unionesUso de uniones literales como EnumsCongelación de tablas constantesRecapitulación: Enums al estilo de Luau11Temas Avanzados
Aseveraciones de TipoGuardias de Tipo con typeofEl Tipo neverSeguridad contra Nulos en Modo EstrictoFirmas de ÍndiceRecapitulacion: Ajuste Preciso 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