Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة: عرض المهام حسب الحالة

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

challenge icon

التحدي

سهل

محررك يحتوي بالفعل على النوع Task والمصفوفة tasks و addTask و completeTask من الدروس السابقة.

أنشئ دالة باسم filterTasks تأخذ معلمين (two parameters):

  • list من النوع {Task}
  • done من النوع boolean

يجب أن تقوم الدالة بإنشاء وإرجاع مصفوفة جديدة من النوع {Task} تحتوي فقط على المهام التي تحتوي على flag الـ done المطابق للمعلم (parameter).

ثم:

  1. قم بتخزين filterTasks(tasks, false) في pending و filterTasks(tasks, true) في finished
  2. اطبع #pending، ثم عنوان كل مهمة في pending في سطر منفصل (استخدم ipairs)
  3. اطبع #finished، ثم عنوان كل مهمة في finished في سطر منفصل

جرّب بنفسك

-- الشكل الذي يجب أن تتبعه كل مهمة في المدير
type Task = {
    id: number,
    title: string,
    done: boolean,
}

-- قائمة المهام: مصفوفة مكتوبة النوع من أشكال Task
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},
}

-- أنشئ مهمة مكتوبة النوع بالمعرّف الحر التالي وأدرجها
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

-- علّم المهمة ذات المعرّف المعطى كمكتملة؛ أبلغ عن النجاح
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

-- اكتب الكود هنا
-- 1) عرّف filterTasks(list: {Task}, done: boolean): {Task}
-- 2) أنشئ `pending` (done == false) و `finished` (done == true)
-- 3) اطبع #pending وعناوين pending، ثم #finished و
--    عناوين finished

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