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