Harfi Birlik Enum'larını Kullanma
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası — ders 54 / 73.
Literal union'lar en çok fonksiyon parametreleri olarak işe yarar. Bir parametreyi union ile tiplendirdiğinizde, denetleyici fonksiyonun yalnızca geçerli bir üye ile çağrılmasını garanti eder:
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ tip hatası: bir Direction değilFonksiyonun içinde, üyeleri bir if/elseif zinciriyle eksiksiz (exhaustive) olarak ele alın. Tip, girdiyi dört değerle sınırladığı için, üçünü kontrol edip sonuncusunu else bloğuna bırakmak her şeyi kapsar:
local function describe(direction: Direction): string
if direction == "up" then
return "Going upward"
elseif direction == "down" then
return "Going downward"
elseif direction == "left" then
return "Turning left"
else
return "Turning right"
end
endKüçük bir detay: dışarıdan gelen dize (string) değerler — örneğin io.read() — düz string olarak tiplendirilir, çünkü denetleyici kullanıcının ne yazacağını bilemez. Daha önce öğrendiğiniz :: dönüşümü (cast), denetleyiciye bu değeri sizin enum tipiniz olarak ele almasını söyler:
local direction = io.read() :: DirectionTip dönüşümü (cast) bir vaattir, doğrulama değildir — çalışma zamanında (runtime) hiçbir şey girdiyi doğrulamaz. Canlı ortam kodları (production code) önce doğrulama yapmalıdır; burada ise tiplendirilmiş fonksiyonların kullanıcı girdisini temiz bir şekilde kabul etmesini sağlar.
Görev
Kolay"up", "down", "left" ve "right" üyelerine sahip Direction literal union türünü oluşturun.
direction: Direction parametresi alan ve Moving [direction]... yazdıran bir move fonksiyonu oluşturun.
direction: Direction parametresi alan, bir string döndüren ve her üyeyi if/elseif/else ile işleyen bir getMovementDescription fonksiyonu oluşturun:
"up"→Going upward"down"→Going downward"left"→Turning left"right"→Turning right
io.read() ile kullanıcıdan bir satır okuyun ve bunu :: ile Direction türüne cast edin. Ardından:
movefonksiyonunu bu direction ile çağırın- aynı direction için
getMovementDescriptionsonucunu yazdırın
Kendin dene
-- Kodu buraya yaz
-- 1) Direction tipini tanımla
-- 2) move ve getMovementDescription yaz (if/elseif/else)
-- 3) girişi oku: local direction = io.read() :: Direction
-- 4) move'u çağır, sonra açıklamayı 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