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 tek bir zayıf noktası vardır: hâlâ sıradan bir tablodur. Herhangi bir yerde bulunan herhangi bir kod UserRole.Admin = 99 yazabilir — ve "sabitleriniz" sessizce sabit olmaktan çıkar.

Luau bu açığı table.freeze ile kapatır. Dondurma (freezing) bir tabloyu çalışma zamanında (runtime) salt okunur yapar: bir alan ekleme, değiştirme veya kaldırma yönündeki her attempt bir error oluşturur. Genel kullanım, tabloyu tam oluşturulduğu yerde dondurmaktır — table.freeze atamaya hazır şekilde 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

Bu kurstaki şu ana kadar gördüğünüz diğer her şeyin aksine, bu bir çalışma zamanı (runtime) korumasıdır — yazma işlemi çalıştığı anda ortaya çıkan gerçek bir hatadır, düzenleme zamanı (edit-time) uyarısı değildir. Tip denetleyicisinin (type checker) hiç görmediği kodlara karşı bile koruma sağlar.

Bilinmeye değer iki yardımcı: table.isfrozen(t) bir tablonun dondurulup dondurulmadığını döndürür ve dondurma işlemi yüzeyseldir (shallow) — iç içe geçmiş tablolar siz onları da dondurmadıkça değiştirilebilir kalır. Ayrıca dondurmayı geri alamazsınız: bir table dondurulduktan sonra frozen kalır.

Dondurulmuş sabit bir tablo ile parametreler için bir literal birleşimi (literal union), 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

İçeriğinde şunlar bulunan Color adında dondurulmuş (frozen) bir sabit tablo oluşturun — table.freeze ile tek adımda oluşturun ve dondurun (build):

  • Red = 1
  • Green = 2
  • Blue = 3

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

Her birini ayrı bir satıra yazdırın (print):

  1. Color.Red
  2. Color.Blue
  3. Color tablosunun dondurulmuş olup olmadığı (table.isfrozen)
  4. settings tablosunun dondurulmuş olup olmadığı
  5. pcall içinde Color tablosuna yeni bir alan eklemeyi denemenin sonucu — pcall(function() Color.Gold = 4 end) çağrısını yapın ve döndürdüğü boolean değerini 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