Menu
CoddyTech

Sabit Tabloları Dondurma

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

Sabit bir tablonun bir zayıf yönü vardır: 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, tabloyu çalışma zamanında salt okunur hâle getirir: alan ekleme, değiştirme veya kaldırma girişimleri hata verir. Kullanım biçimi, tabloyu oluşturulduğu yerde dondurmaktır: table.freeze aynı tabloyu döndürür ve tablo atanmaya hazır olur:

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ştirme girişimi

Bu, şimdiye kadarki kurstaki diğer her şeyden farklı olarak çalışma zamanı korumasıdır: düzenleme zamanı uyarısı değil, yazma işlemi çalıştırıldığı anda oluşan gerçek bir hata. Tür denetleyicisinin hiç görmediği kodlara karşı bile koruma sağlar.

Bilmeye değer iki yardımcı işlev: table.isfrozen(t) tablonun dondurulmuş olup olmadığını döndürür ve dondurma sığdır: iç içe tabloları da dondurmadığınız sürece 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 türü, eksiksiz Luau enum'unu oluşturur: kimsenin müdahale edemeyeceği adlandırılmış çalışma zamanı değerleri ve kullanıldıkları her yerde düzenleme zamanı denetimi.

challenge icon

Görev

Kolay

Hiçbir şeyin değiştiremeyeceği sabit bir tablo oluştur.

  1. local Size = table.freeze({Small = 1, Medium = 2, Large = 3}) oluştur.
  2. Size.Large ve table.isfrozen(Size) değerlerini yazdır.
  3. pcall(function() Size.Huge = 4 end) değerini local ok içinde sakla ve ok değerini yazdır.

Kodu Çalıştır düğmesine bas: çıktı 3, true ve false değerlerini gösterir.

Kendin dene

-- 1) local Size = table.freeze({...})
-- 2) Size.Large ve table.isfrozen(Size) değerlerini yazdır
-- 3) yasaklanan yazma işlemi için pcall tarafından döndürülen değeri ok içinde sakla, ardından yazdır

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

Kendi başına pratik yap: Online Luau derleyicisi