Menu
Coddy logo textTech

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ğil

Fonksiyonun 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
end

Küçü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() :: Direction

Tip 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.

challenge icon

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:

  1. move fonksiyonunu bu direction ile çağırın
  2. aynı direction için getMovementDescription sonucunu 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
quiz iconKendini test et

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