Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

dondurulmuş 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 = 1
  • Green = 2
  • Blue = 3

volume = 5 alanına sahip, düz (dondurulmamış) settings adlı bir tablo oluşturun.

Her birini kendi satırında yazdırın:

  1. Color.Red
  2. Color.Blue
  3. Color'ın dondurulmuş olup olmadığı (table.isfrozen)
  4. settings'in dondurulmuş olup olmadığı
  5. pcall içinde Color'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
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