عرض جميع المهام
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 22 من 68.
التحدي
سهلاستمراراً في نظام إدارة المهام الخاص بك، ستقوم الآن بتنفيذ الوظيفة لعرض جميع المهام بتنسيق سهل الاستخدام. يركز هذا التحدي على التكرار (iterating) عبر مجموعة المهام الخاصة بك وتقديم كل مهمة مع حالة اكتمالها باستخدام مؤشرات بصرية واضحة.
ستتلقى مدخلين:
- سلسلة نصية تمثل عدد المهام (مثلاً،
"4") - سلسلة نصية تحتوي على بيانات المهام بالتنسيق التالي:
"name1:status1,name2:status2,name3:status3"حيث تكون الحالة إما"true"أو"false"(مثلاً،"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
مهمتك هي:
- تعريف نفس هيكل
Taskمن التحديات السابقة مع حقولName(string) وCompleted(bool) - إنشاء دالة تسمى
viewAllTasksتأخذ شريحة (slice) من هياكلTaskكمعامل (parameter) - داخل دالة
viewAllTasks، قم بالتكرار عبر الشريحة واطبع كل مهمة بالتنسيق التالي:- للمهام المكتملة:
"[x] [task_name]" - للمهام غير المكتملة:
"[ ] [task_name]"
- للمهام المكتملة:
- تحليل بيانات المهام من المدخل الثاني لإنشاء شريحة المهام الخاصة بك:
- تقسيم المدخل بواسطة الفواصل للحصول على إدخالات المهام الفردية
- لكل إدخال، قم بالتقسيم بواسطة النقطتين الرأسيتين لفصل الاسم والحالة
- تحويل سلسلة الحالة النصية إلى قيمة منطقية (boolean) (
"true"تصبحtrue، و"false"تصبحfalse)
- استدعاء دالة
viewAllTasksالخاصة بك مع الشريحة التي تم إنشاؤها - بعد عرض جميع المهام، اطبع ملخصاً بالتنسيق التالي:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
على سبيل المثال، إذا كان لديك مهام "Buy groceries:false,Call dentist:true,Finish project:false"، يجب أن يظهر مخرجك كل مهمة مع مربعات الاختيار المناسبة ثم يعرض الملخص مع العدد الإجمالي وإحصائيات الاكتمال. يتدرب هذا التحدي على التكرار عبر الشرائح (slice iteration)، والتنسيق الشرطي باستخدام جمل if، ويوفر للمستخدمين رؤية واضحة لتقدم مهامهم.
جرّب بنفسك
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO: تنفيذ الوظيفة لعرض جميع المهام
// للمهام المكتملة: "[x] [task_name]"
// للمهام غير المكتملة: "[ ] [task_name]"
}
func main() {
var numTasksStr string
fmt.Scanln(&numTasksStr)
numTasks, _ := strconv.Atoi(numTasksStr)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
taskData := scanner.Text()
var tasks []Task
// TODO: تحليل بيانات المهام من سلسلة taskData
// التقسيم بواسطة الفواصل للحصول على مدخلات المهام الفردية
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// لكل مدخل، قم بالتقسيم بواسطة النقطتين الرأسيتين لفصل الاسم والحالة
// تحويل سلسلة الحالة إلى قيمة منطقية وإنشاء هياكل Task
// TODO: استدعاء وظيفة viewAllTasks مع الشريحة التي تم إنشاؤها
// TODO: حساب وطباعة الملخص
// التنسيق: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات