Biçimler ve Serbest Tablolar
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 42 / 80.
Artık kayıt tablolarıyla çalışmanın iki yolu var: Lua'da hep kullandığın serbest yol ve tanımlanmış şekiller. Her birinin ne kazandırdığını görmek için durup düşünmeye değer.
Serbest bir tablo her şeyi kabul eder. Bu esnekliğin bir bedeli vardır: bir alanın adını yanlış yazarsan (user.nmae) sessizce nil elde edersin; bir alanı unutursan hata çok uzakta, çalışma zamanında, boşluğa ilk dokunan kodda ortaya çıkar:
local user = {name = "Ana", age = 20}
print(user.nmae) -- esnek tablo: sessizce nil yazdırırBir şekil tanımlarsan bu hatalar çalışma zamanından düzenleme zamanına taşınır. Denetleyici, yazım hatasını yaptığın anda işaretler, düzenleyicin alan adlarını otomatik tamamlayabilir ve type tanımı tablonun neler içerdiğini açıklayan bir belge işlevi de görür:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ tür hatası: 'nmae' anahtarı User içinde bulunamadıTypeScript'ten geliyorsan Luau'da interface anahtar sözcüğünün olmadığını unutma: her şekli type tanımlar. Ayrıca “tanım birleştirme” de yoktur: aynı kapsamda aynı ada sahip iki tür tanımlamak hatadır; dolayısıyla her şeklin tam olarak bir tanımı vardır.
Luau şekilleri yapısaldır: doğru türde doğru alanlara sahip her tablo, nerede veya nasıl oluşturulduğuna bakılmaksızın eşleşir. Serbest tabloların da hâlâ kullanım yeri vardır: hızlı betiklerin ve gerçekten dinamik verilerin tanımlanmış bir şekle ihtiyacı yoktur. Ancak işlevler arasında aktarılan her şey için bir şekil, hataları düzeltmeleri hâlâ kolayken yakalar.
Görev
KolayTürü belirtilmemiş bir tabloyu türü belirtilmiş bir tabloya dönüştür.
- Tablonun üstüne
type Pet = {name: string, age: number}yaz. - Tabloya tür açıklaması ekle:
local pet: Pet = {name = "Biscuit", age = 3}. - İlk print ifadesinin altına
print(pet.age)ekle.
Kodu Çalıştır düğmesine bas: çıktı olarak Biscuit ve 3 görünür.
Kendin dene
-- Esnek bir tablo: alanlarını hiçbir şey denetlemez
local pet = {name = "Biscuit", age = 3}
print(pet.name)
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ışma
Parametreleri ve Dönüş Değerlerini Tür BelirtmeAnonim Fonksiyonları Tür BelirtmeDeğer Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriBoolean Değerler için VarsayılanlarDeğişken Sayıda Parametre Alan FonksiyonlarFonksiyon Türlerini TanımlamaTekrar: Tür Belirtilmiş Fonksiyonlar2Temel Türler
Number, String ve Boolean'any' Türü: Kaçış Yolu'unknown' TürüNil ve İsteğe Bağlı TürlerTür Çıkarımı UygulamadaAçık Tür Ek AçıklamalarıTekrar: Temel Türler Alıştırması5Diğ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ı3Türlenmiş Tablolar: Diziler ve Map’ler
Türlenmiş DizilerÖğe Ekleme ve OkumaMap Türü Nedir?Map’leri Tanımlama ve ErişmeTablolar Üzerinde YinelemeKarma Şekilli TablolarBir Izgarayı OkumaBir Izgara Oluşturmatable.unpackÖzet: Diziler ve Map’ler6Tablo Biçimlerini Tiplendirme
Satır İçi Biçim AçıklamalarıBiçimler İçin Tip Takma Adlarıİsteğe Bağlı ÖzelliklerBiçimler ve Serbest TablolarBiçimleri GenişletmeBiçimlere Metot EklemeSelf ve İki Nokta MetotlarıÖzet: Tablo Biçimlerini TanımlamaKendi başına pratik yap: Online Luau derleyicisi