Menu
Coddy logo textTech

Katı Modda Nil Güvenliği

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

En yaygın Lua çökmesi “nil'i indekslemeye çalışma” hatasıdır: bir değerin var olduğunu varsayan, ancak değerin var olmadığı kod. Luau'nun yanıtı nil disiplinidir: --!strict altında, düz bir string hiçbir zaman nil olamaz. nil gerçek bir olasılıksa, tür bunu ? ile belirtmelidir:

--!strict
local nickname: string? = nil   -- ok: string veya nil
local username: string = nil    -- ✗ strict modunda tip hatası

Bu disiplinin iki yönü vardır: bir string? verildiğinde, katı mod onu nil olmadığını kesinleştirene kadar bir dize olarak kullanmana izin vermez. Standart araç, tıpkı bir typeof denetimi gibi türü daraltan basit bir karşılaştırmadır:

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

nil geçerli bir durumdan ziyade bir 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 ve çalışma zamanında assert, bozuk varsayımın çok uzakta bir yerde değil, gerçekleştiği noktada erkenden çöker.

Sonuç şudur: denetleyici, “eksik olabilir” durumundaki her değeri düzenleme sırasında ele almaya zorlar ve çalışma zamanı hatası hiç gerçekleşmez.

challenge icon

Görev

Kolay

Eksik olabilecek kullanıcı profili alanlarını işleyin. Dosyanıza --!strict ile başlayın.

  • getDisplayName(fullName: string?): string: fullName değeri nil değilse onu, aksi takdirde Anonymous User değerini döndürür.
  • formatEmail(email: string?): string: e-posta nil değilse küçük harfe dönüştürülmüş e-postayı (string.lower), aksi takdirde No email provided değerini döndürür.
  • getUserInfo(name: string?, email: string?): string: her iki işlevi kullanır ve Name: [processed name], Email: [processed email] değerini döndürür.

Ardından her birini kendi satırında yazdırın:

  1. getDisplayName("John Smith")
  2. getDisplayName(nil)
  3. formatEmail("ALICE@EXAMPLE.COM")
  4. formatEmail(nil)
  5. getUserInfo("Bob Johnson", "bob@test.com")
  6. getUserInfo(nil, nil)
  7. getUserInfo("Sarah Wilson", nil)

Kendin dene

--!strict
-- Kodu buraya yaz
-- 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 — ikisini birleştir
-- 4) görevdeki yedi test çağrısını yazdır
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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

Kendi başına pratik yap: Online Lua derleyicisi