Menu
CoddyTech

Menggunakan Enum Union Literal

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 54 dari 73.

Union literal berguna sebagai parameter fungsi. Beri tipe union pada parameter, lalu pemeriksa tipe memastikan fungsi hanya pernah dipanggil dengan anggota yang valid:

type Direction = "up" | "down" | "left" | "right"

local function move(direction: Direction)
    print(`Moving {direction}...`)
end

move("left")  -- ✓
move("north") -- ✗ error tipe: bukan Direction

Di dalam fungsi, tangani semua anggota secara menyeluruh dengan rangkaian if/elseif. Karena tipe tersebut membatasi input menjadi empat nilai, memeriksa tiga nilai dan membiarkan else menangani nilai terakhir sudah mencakup semuanya:

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

Ada satu hal yang perlu diperhatikan: string yang datang dari luar, seperti io.read(), bertipe string biasa karena pemeriksa tipe tidak bisa mengetahui apa yang akan diketik pengguna. Cast :: yang kamu pelajari sebelumnya memberi tahu pemeriksa tipe untuk memperlakukan nilai tersebut sebagai tipe enum-mu:

local direction = io.read() :: Direction

Cast adalah janji, bukan pemeriksaan. Saat runtime, tidak ada yang memverifikasi input tersebut. Kode produksi akan memvalidasinya terlebih dahulu, tetapi di sini cast memungkinkan fungsi bertipe menerima input pengguna dengan mudah.

challenge icon

Tantangan

Mudah

Buat tipe union literal Direction dengan anggota "up", "down", "left" dan "right".

Buat fungsi move yang menerima direction: Direction dan mencetak Moving [direction]...

Buat fungsi getMovementDescription yang menerima direction: Direction, mengembalikan string, dan menangani setiap anggota dengan if/elseif/else:

  • "up" → Going upward
  • "down" → Going downward
  • "left" → Turning left
  • "right" → Turning right

Baca satu baris dari pengguna dengan io.read() dan lakukan cast ke Direction dengan ::. Lalu:

  1. panggil move dengan arah tersebut
  2. cetak hasil getMovementDescription untuk arah yang sama

Coba sendiri

-- Tulis kodemu di sini
-- 1) definisikan tipe Direction
-- 2) tulis move dan getMovementDescription (if/elseif/else)
-- 3) baca input: local direction = io.read() :: Direction
-- 4) panggil move, lalu cetak deskripsinya
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online