Menu
CoddyTech

Seguridad frente a nil en modo estricto

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 77 de 80.

El error más común de Lua es "attempt to index nil": código que suponía que un valor existía cuando no era así. La respuesta de Luau es la disciplina de nil: con --!strict, una string simple nunca puede ser nil. Si nil es una posibilidad real, el tipo debe indicarlo con ?:

--!estricto
local nickname: string? = nil   -- válido: string O nil
local username: string = nil    -- ✗ error de tipo en modo estricto

La disciplina funciona en ambos sentidos: si tienes una string?, el modo estricto no te dejará usarla como cadena hasta que hayas descartado nil. La herramienta habitual es una comparación simple, que acota el tipo igual que una comprobación con typeof:

local function shout(name: string?): string
    if name ~= nil then
        return string.upper(name) -- name es de tipo string aquí
    end
    return "NOBODY"
end

Cuando nil sería un error en lugar de un caso válido, usa assert: después de assert(x ~= nil), el verificador trata x como distinto de nil durante el resto del ámbito y, en tiempo de ejecución, la aserción provoca un error de inmediato, justo donde se incumple la suposición, en lugar de hacerlo en algún lugar muy alejado.

La ventaja: el verificador te obliga a gestionar cada valor que «podría faltar» mientras editas, y el error de ejecución simplemente no ocurre nunca.

challenge icon

Desafío

Fácil

Escribe un nombre que podría no tener un valor alternativo seguro.

  1. Mantén --!strict en la primera línea.
  2. Escribe local function getDisplayName(fullName: string?): string que devuelva fullName cuando no sea nil; de lo contrario, "Anonymous User".
  3. Imprime getDisplayName("John Smith") y getDisplayName(nil).

Pulsa Ejecutar código: la salida muestra John Smith y Anonymous User.

Pruébalo tú mismo

--!estricto
-- 1) getDisplayName(fullName: string?): string, usando "Anonymous User" como valor predeterminado
-- 2) imprímelo para "John Smith" y nil

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online