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

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