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 birleşimler, fonksiyon parametreleri olarak kullanıldıklarında işe yarar. Bir parametreyi birleşim türüyle türlendirdiğinde, denetleyici fonksiyonun yalnızca geçerli bir üyeyle ç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") -- ✗ type error: not a DirectionFonksiyonun içinde, üyeleri eksiksiz biçimde bir if/elseif zinciriyle ele al. Tür, girdiyi dört değerle sınırladığından üçünü kontrol edip sonuncuyu 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
endBir ayrıntı daha var: dışarıdan gelen ve io.read() gibi dizeler, düz string olarak türlendirilir; çünkü denetleyici bir kullanıcının ne yazacağını bilemez. Daha önce öğrendiğin :: dönüştürmesi, değeri enum türün olarak ele almasını söyler:
local direction = io.read() :: DirectionBir dönüştürme bir kontrolden ziyade bir vaattir; çalışma zamanında girdiyi doğrulayan hiçbir şey yoktur. Üretim kodu önce doğrulama yapardı; burada ise türlendirilmiş fonksiyonların kullanıcı girdisini sorunsuzca kabul etmesini sağlar.
Görev
KolayDirection, "up", "down" ve "left" üyelerine sahip "right" literal birleşim türünü oluşturun.
move alan ve direction: Direction yazdıran bir Moving [direction]... fonksiyonu oluşturun.
getMovementDescription alan, bir direction: Direction döndüren ve her üyeyi string ile ele alan bir if/elseif/else 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 Direction ile bunu :: türüne dönüştürün. Ardından:
- yönü kullanarak
movefonksiyonunu çağırın - aynı yön 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) girdiyi 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'lerKendi başına pratik yap: Online Lua derleyicisi