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 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 Direction

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

Bir 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() :: Direction

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

challenge icon

Görev

Kolay

Direction, "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:

  1. yönü kullanarak move fonksiyonunu çağırın
  2. aynı yön 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) girdiyi 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

Kendi başına pratik yap: Online Lua derleyicisi