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 "attempt to index nil" hatasıdır — bir değerin var olduğunu varsayan ancak var olmadığı durumlarda ortaya çıkan kodlar. Luau'nun buna yanıtı nil disiplinidir: --!strict altında, düz bir string asla nil olamaz. Eğer nil gerçek bir olasılıksa, tür bu durumu ? ile belirtmelidir:

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

Bu disiplin iki yönlü çalışır: string? verildiğinde, strict mod nil olasılığını eleyene kadar onu bir dize olarak kullanmanıza izin vermez. Standart yöntem, tıpki bir typeof koruyucusu gibi daraltma yapan 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 değerinin geçerli bir durumdan ziyade bir hata olacağı yerlerde assert kullanın: assert(x ~= nil) ifadesinden sonra denetleyici, kapsamın geri kalanında x'i non-nil olarak değerlendirir — ve çalışma zamanında assert, uzak bir yer yerine tam olarak hatalı varsayımın yapıldığı noktada erkenden çöker.

Kazanç: denetleyici, siz kod yazarken "eksik olabilir" türündeki her değerin ele alınmasını zorunlu kılar ve çalışma zamanı hatası hiçbir zaman 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?): stringfullName eğer nil değilse onu, aksi takdirde Anonymous User döndürür.
  • formatEmail(email: string?): stringemail eğer nil değilse küçük harfe çevrilmiş halini (string.lower), aksi takdirde No email provided döndürür.
  • getUserInfo(name: string?, email: string?): string — her iki fonksiyonu da kullanır ve Name: [processed name], Email: [processed email] metnini döndürür.

Ardından, her biri ayrı bir satırda olacak şekilde 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
-- Buraya kod 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