Menu
CoddyTech

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ır

Bir ş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.

challenge icon

Görev

Kolay

Türü belirtilmemiş bir tabloyu türü belirtilmiş bir tabloya dönüştür.

  1. Tablonun üstüne type Pet = {name: string, age: number} yaz.
  2. Tabloya tür açıklaması ekle: local pet: Pet = {name = "Biscuit", age = 3}.
  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

Kendi başına pratik yap: Online Luau derleyicisi