Menu
CoddyTech

حلقة الأوامر: عرض وإنهاء

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 53 من 80.

challenge icon

التحدي

متوسط

أضف أمرًا يعرض المهام وآخر لإكمالها.

  1. عند "list"، اطبع كل مهمة بصيغة `[x] {t.title}` إذا كانت مكتملة، وإلا فبصيغة `[ ] {t.title}`.
  2. عند "done"، اقرأ local id: number = tonumber(io.read()) or 0؛ واطبع `Task {id} completed` إذا كانت completeTask(tasks, id) تساوي true، وإلا فاطبع `No task with id {id}`.

اضغط على تشغيل الكود: عند إدخال done و2 وquit، يظهر في الناتج Task 2 completed.

جرّب بنفسك

-- البنية التي تتبعها كل مهمة في المدير
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},
}
-- أنشئ مهمة باستخدام أول id متاح وأضفها إلى القائمة
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
-- ضع علامة على المهمة ذات id هذا بأنها مكتملة؛ وبيّن ما إذا عُثر عليها
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
-- قائمة جديدة بالمهام التي تتطابق قيمة done فيها
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
-- سطر واحد: عدد المهام المكتملة
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
-- جرّبه
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

جميع دروس مقدمة إلى Luau

تدرّب بنفسك: مترجم Luau عبر الإنترنت