Sabit Tabloları Dondurma
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 55 / 73.
Sabit bir tablonun bir zayıf noktası vardır: Sonuçta hâlâ sıradan bir tablodur. Herhangi bir kod, herhangi bir yerde UserRole.Admin = 99 yazabilir ve "sabitleriniz" sessizce sabit olmaktan çıkar.
Luau bu açığı table.freeze ile kapatır. Dondurma, bir tabloyu çalışma zamanında salt okunur hâle getirir: bir alanı ekleme, değiştirme veya kaldırma girişimi hata oluşturur. Kullanılan yöntem, tabloyu oluşturulduğu yerde dondurmaktır: table.freeze atanmaya hazır olan aynı tabloyu döndürür:
local Color = table.freeze({
Red = 1,
Green = 2,
Blue = 3,
})
print(Color.Red) -- 1: okuma her zamanki gibi çalışır
Color.Gold = 4 -- ✗ hata: salt okunur bir tabloyu değiştirmeye çalışmaŞimdiye kadarki diğer her şeyden farklı olarak bu, çalışma zamanı korumasıdır: düzenleme zamanı uyarısı değil, yazma işlemi yürütüldüğü anda oluşan gerçek bir hatadır. Tür denetleyicisinin hiç görmediği kodlara karşı bile koruma sağlar.
Bilmeye değer iki yardımcı özellik daha vardır: table.isfrozen(t) bir tablonun dondurulup dondurulmadığını döndürür ve dondurma sığdır: iç içe tabloları siz de dondurmadıkça değiştirilebilir kalır. Ayrıca dondurmayı geri alamazsınız: bir tablo dondurulduktan sonra donmuş olarak kalır.
Dondurulmuş bir sabit tablo ile parametreler için bir literal birleşim, eksiksiz Luau enum'udur: kimsenin değiştiremeyeceği adlandırılmış çalışma zamanı değerleri ve bunların kullanıldığı her yerde düzenleme zamanı denetimi.
Görev
Kolaydondurulmuş bir sabit tablo olan Color'ı oluşturun; table.freeze ile tabloyu oluşturup tek adımda dondurun ve aşağıdakileri içermesini sağlayın:
Red=1Green=2Blue=3
volume = 5 alanına sahip, düz (dondurulmamış) settings adlı bir tablo oluşturun.
Her birini kendi satırında yazdırın:
Color.RedColor.BlueColor'ın dondurulmuş olup olmadığı (table.isfrozen)settings'in dondurulmuş olup olmadığıpcalliçindeColor'a alan eklemeyi denemenin sonucu:pcall(function() Color.Gold = 4 end)çağrısını yapın ve döndürdüğü boolean değeri yazdırın
Kendin dene
-- Buraya kod yazın
-- 1) local Color = table.freeze({Red = 1, Green = 2, Blue = 3})
-- 2) local settings = {volume = 5}
-- 3) print Color.Red, Color.Blue, her iki isfrozen sonucunu
-- 4) yasak yazmayı pcall et ve dönen boolean'ı yazdır
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
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışmak
Parametreleri ve Geri Dönüş Değerlerini TiplendirmeAnonim Fonksiyonları TiplendirmeHiçbir Şey Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriDeğişken Sayıda Parametre Alan Fonksiyonlar (Variadic)Fonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar2Temel Tipler
Temel Tipler: num, str, bool'any' Tipi: Kaçış Yolu'unknown' TipiNil ve İsteğe Bağlı (Optional) TiplerUygulamada Tip ÇıkarımıAçık Tip BelirteçleriÖzet: Temel Tipler Pratiği5Diğ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öntemi3Tipli Tablolar: Diziler ve Map'ler
Tipli DizilerEleman Ekleme ve OkumaMap Tipi Nedir?Map Bildirimi ve Map'lere ErişimTablolar Üzerinde YinelemeKarma Biçimli TablolarÇok Boyutlu Tipli Dizilertable.unpack ve VarargsÖzet: Diziler ve Map'lerKendi başına pratik yap: Online Lua derleyicisi