Menu
CoddyTech

Perulangan Perintah: Daftar dan Selesai

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 53 dari 80.

challenge icon

Tantangan

Sedang

Tambahkan perintah untuk menampilkan daftar tugas dan perintah untuk menyelesaikan tugas.

  1. Saat "list", tampilkan setiap tugas sebagai `[x] {t.title}` jika selesai, jika tidak, tampilkan sebagai `[ ] {t.title}`.
  2. Saat "done", baca local id: number = tonumber(io.read()) or 0; tampilkan `Task {id} completed` jika completeTask(tasks, id) bernilai true, jika tidak, tampilkan `No task with id {id}`.

Tekan Jalankan Kode: dengan input done, 2, quit, output menampilkan Task 2 completed.

Coba sendiri

-- Struktur yang diikuti setiap tugas dalam pengelola
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},
}
-- Buat tugas dengan id berikutnya yang tersedia, lalu tambahkan ke list
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
-- Tandai tugas dengan id ini sebagai selesai, lalu beri tahu apakah tugasnya ditemukan
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
-- List baru berisi tugas yang nilai done-nya cocok
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
-- Satu baris: jumlah tugas yang selesai
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
-- Coba jalankan
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

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online