Menu
CoddyTech

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ệu

Hợ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.

challenge icon

Thử thách

Dễ

Thử đặt cả hai mẫu enum cạnh nhau.

  1. Tạo bảng hằng số local Speed = {Slow = 8, Fast = 24}.
  2. Viết type Pace = "slow" | "fast" và khai báo local pace: Pace = "fast".
  3. In ra Speed.Fast, rồi pace.

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

Tự luyện tập: Trình biên dịch Luau online