Menu
CoddyTech

Sécurité contre les valeurs nulles en mode strict

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 77 sur 80.

Le plantage Lua le plus courant est "attempt to index nil" : du code qui supposait qu’une valeur existait alors que ce n’était pas le cas. La réponse de Luau est la discipline de nil : sous --!strict, un string simple ne peut jamais être nil. Si nil est une possibilité réelle, le type doit l’indiquer avec ? :

--!strict
local nickname: string? = nil   -- ok : string OU nil
local username: string = nil    -- ✗ erreur de type en mode strict

Cette discipline fonctionne dans les deux sens : avec un string?, le mode strict ne te laissera pas l’utiliser comme une chaîne tant que tu n’as pas écarté nil. L’outil standard est une simple comparaison, qui affine le type comme le ferait une vérification avec typeof :

local function shout(name: string?): string
    if name ~= nil then
        return string.upper(name) -- name est une chaîne de caractères ici
    end
    return "NOBODY"
end

Quand nil serait un bogue plutôt qu’un cas valide, utilise assert : après assert(x ~= nil), l’analyseur considère que x n’est pas nil pour le reste de la portée et, à l’exécution, l’assertion provoque un plantage immédiatement, au point où l’hypothèse est erronée, au lieu de le faire quelque part beaucoup plus loin.

Le résultat : l’analyseur t’oblige à traiter chaque valeur « potentiellement manquante » pendant que tu modifies le code, et l’erreur à l’exécution ne se produit tout simplement jamais.

challenge icon

Défi

Facile

Donne un nom auquel il pourrait manquer une valeur de repli sûre.

  1. Garde --!strict sur la première ligne.
  2. Écris local function getDisplayName(fullName: string?): string qui renvoie fullName lorsqu’il n’est pas nil, sinon "Anonymous User".
  3. Affiche getDisplayName("John Smith") et getDisplayName(nil).

Appuie sur Run Code : la sortie affiche John Smith et Anonymous User.

Essayez vous-même

--!strict
-- 1) getDisplayName(fullName: string?): string, en utilisant "Anonymous User" comme valeur de repli
-- 2) affiche le résultat pour "John Smith" et nil

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Luau en ligne