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"
endnil 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.
Görev
KolayGüvenli bir yedek değeri olmayabilecek bir ad verin.
- İlk satırda
--!strictifadesini tutun. local function getDisplayName(fullName: string?): stringyazın;fullNamenilolmadığında onu, aksi takdirde"Anonymous User"değerini döndürsün.getDisplayName("John Smith")vegetDisplayName(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
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışma
Parametreleri ve Dönüş Değerlerini Tür BelirtmeAnonim Fonksiyonları Tür BelirtmeDeğer Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriBoolean Değerler için VarsayılanlarDeğişken Sayıda Parametre Alan FonksiyonlarFonksiyon Türlerini TanımlamaTekrar: Tür Belirtilmiş Fonksiyonlar2Temel Türler
Number, String ve Boolean'any' Türü: Kaçış Yolu'unknown' TürüNil ve İsteğe Bağlı TürlerTür Çıkarımı UygulamadaAçık Tür Ek AçıklamalarıTekrar: Temel Türler Alıştırması5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları8Enum'lar: Luau Yöntemi
Luau'da Enum DeseniTablolar ile Sayısal Enum'larBirlik Olarak Metin Enum'larıHarfi Birlik Enum'larını KullanmaSabit Tabloları DondurmaÖzet: Enum'lar, Luau Yöntemi11İleri Konular
Tür İddialarıtypeof ile Tür Koruyucularınever TürüKatı Modda Nil GüvenliğiDizin İmzalarıÖzet: Yapılandırma Değeri TürleriÖzet: Türleri İnce Ayarlama3Türlenmiş Tablolar: Diziler ve Map’ler
Türlenmiş DizilerÖğe Ekleme ve OkumaMap Türü Nedir?Map’leri Tanımlama ve ErişmeTablolar Üzerinde YinelemeKarma Şekilli TablolarBir Izgarayı OkumaBir Izgara Oluşturmatable.unpackÖzet: Diziler ve Map’lerKendi başına pratik yap: Online Luau derleyicisi