Vòng lặp lệnh: liệt kê và đánh dấu hoàn thành
Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 53 trên 80.
Thử thách
Trung bìnhThêm một lệnh để liệt kê các nhiệm vụ và một lệnh để hoàn thành chúng.
- Khi nhận
"list", in từng nhiệm vụ dưới dạng`[x] {t.title}`nếu đã hoàn thành, nếu không thì in`[ ] {t.title}`. - Khi nhận
"done", đọclocal id: number = tonumber(io.read()) or 0; in`Task {id} completed`nếucompleteTask(tasks, id)là true, nếu không thì in`No task with id {id}`.
Nhấn Run Code: với đầu vào done, 2, quit, đầu ra sẽ hiển thị Task 2 completed.
Tự làm thử
-- Cấu trúc chung của mọi tác vụ trong trình quản lý
type Task = {
id: number,
title: string,
done: boolean,
}
local tasks: {Task} = {
{id = 1, title = "Learn Luau types", done = false},
{id = 2, title = "Build a task manager", done = false},
{id = 3, title = "Write tests", done = true},
}
-- Tạo tác vụ với id chưa dùng tiếp theo và thêm vào danh sách
local function addTask(list: {Task}, title: string): Task
local newTask: Task = {id = #list + 1, title = title, done = false}
table.insert(list, newTask)
return newTask
end
-- Đánh dấu tác vụ có id này là hoàn thành; cho biết có tìm thấy tác vụ đó không
local function completeTask(list: {Task}, id: number): boolean
for _, t in ipairs(list) do
if t.id == id then
t.done = true
return true
end
end
return false
end
-- Danh sách mới gồm các tác vụ có giá trị done trùng khớp
local function filterTasks(list: {Task}, done: boolean): {Task}
local result: {Task} = {}
for _, t in ipairs(list) do
if t.done == done then
table.insert(result, t)
end
end
return result
end
-- Một dòng: số tác vụ đã hoàn thành
local function printSummary(list: {Task}): ()
local doneCount = 0
for _, t in ipairs(list) do
if t.done then
doneCount += 1
end
end
print(`{doneCount}/{#list} tasks done`)
end
-- Thử chạy nhé
while true do
local command = io.read()
if command == nil or command == "quit" then
break
elseif command == "add" then
local title = io.read()
local added: Task = addTask(tasks, title)
print(`Added task {added.id}: {added.title}`)
end
end
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ệu7Dự án: trình quản lý công việc định kiểu
Dự án: cấu trúc công việcHàm thêm công việc2Kiể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 cao3Bả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