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ışmaBu 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.
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=1Green=2Blue=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):
Color.RedColor.BlueColortablosunun dondurulmuş olup olmadığı (table.isfrozen)settingstablosunun dondurulmuş olup olmadığıpcalliçindeColortablosuna yeni bir alan eklemeyi denemenin sonucu —pcall(function() Color.Gold = 4 end)çağrısını yapın ve döndürdüğübooleandeğ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
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'ler