Menu
CoddyTech

Segurança contra nil no Modo Estrito

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 77 de 80.

A falha mais comum em Lua é "tentativa de indexar nil": código que presumiu que um valor existia quando não existia. A resposta do Luau é a disciplina de nil: com --!strict, um string simples nunca pode ser nil. Se nil for uma possibilidade real, o tipo precisa indicar isso com ?:

--!strict
local nickname: string? = nil   -- ok: string OU nil
local username: string = nil    -- ✗ erro de tipo no modo strict

A disciplina funciona nos dois sentidos: quando você tem um string?, o modo estrito não permite usá-lo como uma string até que você confirme que não é nil. A ferramenta padrão é uma comparação simples, que restringe o tipo assim como uma verificação com typeof:

local function shout(name: string?): string
    if name ~= nil then
        return string.upper(name) -- name é uma string aqui
    end
    return "NOBODY"
end

Quando nil seria um bug, e não um caso válido, use assert: depois de assert(x ~= nil), o verificador trata x como diferente de nil pelo restante do escopo, e, em tempo de execução, o assert falha imediatamente, no ponto em que a suposição está errada, em vez de falhar em algum lugar distante.

A vantagem: o verificador obriga você a lidar com cada valor que "pode estar ausente" enquanto edita, e o erro em tempo de execução simplesmente nunca acontece.

challenge icon

Desafio

Fácil

Forneça um nome que pode estar ausente e um valor alternativo seguro.

  1. Mantenha --!strict na primeira linha.
  2. Escreva local function getDisplayName(fullName: string?): string, retornando fullName quando não for nil; caso contrário, retorne "Anonymous User".
  3. Imprima getDisplayName("John Smith") e getDisplayName(nil).

Pressione Executar código: a saída mostra John Smith e Anonymous User.

Experimente você mesmo

--!strict
-- 1) getDisplayName(fullName: string?): string, usando "Anonymous User" como valor padrão
-- 2) imprima o resultado para "John Smith" e nil

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online