Menu
CoddyTech

Katı Modda Nil Güvenliği

Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 77 / 80.

En yaygın Lua çökme hatası "attempt to index nil" hatasıdır: bir değerin var olduğunu varsayan, ancak değerin aslında var olmadığı kod. Luau'nun yanıtı nil disiplinidir: --!strict altında, sıradan bir string hiçbir zaman nil olamaz. nil gerçekten mümkünse, tür bunu ? ile belirtmelidir:

--!strict
local nickname: string? = nil   -- tamam: string VEYA nil
local username: string = nil    -- ✗ strict modunda tür hatası

Bu disiplin her iki yönde de işler: string? verildiğinde, nil olmadığını doğrulayana kadar katı mod onu bir string olarak kullanmana izin vermez. Standart araç, tıpkı bir typeof denetimi gibi türü daraltan sıradan bir karşılaştırmadır:

local function shout(name: string?): string
    if name ~= nil then
        return string.upper(name) -- name burada string türündedir
    end
    return "NOBODY"
end

nil geçerli bir durum değil de hata olacaksa assert kullan: assert(x ~= nil) sonrasında denetleyici, kapsamın geri kalanında x'i nil olmayan bir değer olarak kabul eder; çalışma zamanında ise assert, hatalı varsayımın yapıldığı noktada erkenden çöker, çok uzakta başka bir yerde değil.

Sonuç: Denetleyici, düzenleme yaparken "eksik olabilir" her değeri ele almaya zorlar ve çalışma zamanı hatası hiç yaşanmaz.

challenge icon

Görev

Kolay

Güvenli bir yedek değeri olmayabilecek bir ad verin.

  1. İlk satırda --!strict ifadesini tutun.
  2. local function getDisplayName(fullName: string?): string yazın; fullName nil olmadığında onu, aksi takdirde "Anonymous User" değerini döndürsün.
  3. getDisplayName("John Smith") ve getDisplayName(nil) ifadelerini yazdırın.

Run Code düğmesine basın: çıktı olarak John Smith ve Anonymous User görünür.

Kendin dene

--!strict
-- 1) getDisplayName(fullName: string?): string, değer yoksa "Anonymous User" kullanır
-- 2) "John Smith" ve nil için sonucu yazdır

Luau'ya Giriş bölümündeki tüm dersler

Kendi başına pratik yap: Online Luau derleyicisi