Menu
CoddyTech

Vòng lặp lệnh: thêm

Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 52 trên 80.

challenge icon

Thử thách

Trung bình

Hãy để bộ công cụ đọc các lệnh.

  1. Xóa các dòng bên dưới -- Try it.
  2. Bên dưới đó, tạo vòng lặp bằng while true do: đọc local command = io.read() và dùng break khi giá trị là nil hoặc "quit".
  3. Khi gặp "add", đọc tiêu đề, lưu vào local added: Task = addTask(tasks, title) rồi in ra `Added task {added.id}: {added.title}`.

Nhấn Run Code: với đầu vào là add và Ship it, đầu ra hiển thị Added task 4: Ship it.

Tự làm thử

-- Cấu trúc mà mọi tác vụ trong trình quản lý đều tuân theo
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 rồi 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 khớp với giá trị cần lọc
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 cho biết có bao nhiêu 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é
printSummary(tasks)
completeTask(tasks, 2)
printSummary(tasks)

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