Menu
CoddyTech

دالة: طباعة ملخص المهام

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

challenge icon

التحدي

سهل

أضف دالة تطبع مدى التقدم في القائمة.

  1. احذف الأسطر الموجودة أسفل -- Try it.
  2. اكتب local function printSummary(list: {Task}): () بحيث تحسب المهام المنجزة وتطبع `{doneCount}/{#list} tasks done`.
  3. أسفل -- Try it، استدعِ printSummary(tasks)، ثم completeTask(tasks, 2)، ثم استدعِ printSummary(tasks) مرة أخرى.

اضغط على Run Code: يعرض الناتج 1/3 tasks done، ثم 2/3 tasks done.

جرّب بنفسك

-- البنية التي تتبعها كل مهمة في المدير
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 pending = filterTasks(tasks, false)
print(#pending)
print(pending[2].title)

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

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