Mẫu Enum trong Luau
Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 55 trên 80.
Chương trình có rất nhiều giá trị thuộc một tập hợp nhỏ, cố định: đơn hàng đang chờ xử lý, đang giao hoặc đã giao; người chơi hướng lên, xuống, trái hoặc phải. Nhiều ngôn ngữ có từ khóa enum cho việc này. Luau không có và cũng không cần, vì hai công cụ bạn đã biết có thể đảm nhiệm việc đó.
Mẫu 1: bảng hằng số. Một bảng thông thường ánh xạ tên có ý nghĩa tới các giá trị, thay thế những “con số ma thuật” rải rác trong code:
local Status = {
Pending = 1,
Active = 2,
Done = 3,
}
print(Status.Active) -- 2Đây là một giá trị thực sự khi chạy chương trình: bạn có thể đọc Status.Active, so sánh với giá trị đó và truyền nó đi, giống như với những bảng bạn đã dùng từ trước đến nay.
Mẫu 2: hợp kiểu giá trị cố định. Một kiểu dữ liệu gồm các giá trị chuỗi chính xác, dùng những kiểu giá trị cố định bạn đã gặp trong chương về hợp kiểu:
type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow" -- ✗ lỗi kiểu dữ liệuHợp kiểu chỉ tồn tại để trình kiểm tra sử dụng, không tốn chi phí khi chạy chương trình, nhưng đảm bảo một biến không thể chứa giá trị nào nằm ngoài tập hợp. Hai mẫu này bổ trợ cho nhau: bảng cung cấp các giá trị khi chạy chương trình dưới một tên; hợp kiểu đưa ra đảm bảo tại thời điểm biên dịch. Ở phần sau của chương này, bạn cũng sẽ tìm hiểu table.freeze, giúp bảo vệ bảng hằng số khỏi bị sửa đổi khi chạy chương trình.
Thử thách
DễThử đặt cả hai mẫu enum cạnh nhau.
- Tạo bảng hằng số
local Speed = {Slow = 8, Fast = 24}. - Viết
type Pace = "slow" | "fast"và khai báolocal pace: Pace = "fast". - In ra
Speed.Fast, rồipace.
Nhấn Chạy code: đầu ra hiển thị 24 và fast.
Tự làm thử
-- 1) tạo bảng hằng số (constant) Speed với Slow = 8, Fast = 24
-- 2) khai báo kiểu Pace = "slow" | "fast", rồi khai báo local pace: Pace = "fast"
-- 3) in ra Speed.Fast, rồi in ra pace
Tất cả bài học trong Giới thiệu về Luau
1Bắt đầu với Luau
Luau là gì?Tại sao nên dùng Luau?Đoạn code Luau đầu tiênKiểm tra kiểu và chế độ lỗiÔn tập: Giới thiệu về Luau4Làm việc với hàm
Kiểu dữ liệu cho tham số và giá trị trả vềKiểu dữ liệu cho hàm ẩn danhHàm không trả về giá trịTham số tùy chọnGiá trị tham số mặc địnhGiá trị Boolean mặc địnhHàm có số lượng tham số thay đổiĐịnh nghĩa kiểu hàmÔn tập: hàm có kiểu dữ liệu2Kiểu dữ liệu cốt lõi
Số, chuỗi và BooleanKiểu 'any': lối thoátKiểu 'unknown'Kiểu Nil và kiểu tùy chọnSuy luận kiểu trong thực tếChú thích kiểu tường minhÔn tập: luyện tập với kiểu dữ liệu cốt lõi5Bí danh kiểu, kiểu hợp và kiểu giao
Bí danh kiểu cho kiểu nguyên thủyKiểu hợpLàm việc với kiểu hợpKiểu literalKiểu giaoKết hợp bí danh kiểuÔn tập: kết hợp kiểu nâng cao8Enums theo cách của Luau
Mẫu Enum trong LuauEnum số bằng bảngEnum chuỗi dưới dạng hợpDùng Enum hợp literalĐóng băng bảng hằng sốÔn tập: Enums theo cách của Luau3Bảng có kiểu: mảng và Map
Mảng có kiểuThêm và đọc phần tửKiểu Map là gì?Khai báo và truy cập MapDuyệt bảngBảng có cấu trúc hỗn hợpĐọc lướiTạo lướitable.unpackÔn tập: mảng và MapTự luyện tập: Trình biên dịch Luau online