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 DirectionDi 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
endAda 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() :: DirectionCast 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.
Tantangan
MudahBuat 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:
- panggil
movedengan arah tersebut - cetak hasil
getMovementDescriptionuntuk 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengantar Luau
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan8Enum, Cara Luau
Pola Enum di LuauEnum Numerik dengan TabelEnum String sebagai UnionMenggunakan Enum Union LiteralMembekukan Tabel KonstantaUlasan: Enum, Cara Luau3Tabel Bertipe: array dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: array dan MapLatihan sendiri: Compiler Luau online