إضافة مهمة
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 21 من 68.
التحدي
سهلبناءً على أساس إدارة المهام الخاص بك، ستقوم الآن بتنفيذ الوظيفة الأساسية لإضافة مهام جديدة إلى نظامك. يركز هذا التحدي على إنشاء دالة تعمل على توسيع قائمة المهام الخاصة بك عن طريق إلحاق مهام جديدة بالشريحة (slice) الموجودة.
ملاحظة مهمة: نظرًا لأن أسماء المهام قد تحتوي على مسافات (مثل "Buy groceries")، ستحتاج إلى استخدام bufio.Scanner لقراءة أسطر كاملة من المدخلات. تتوقف دالة fmt.Scanln عن القراءة عند أول مسافة، مما قد يؤدي إلى تجزئة أسماء المهام التي تحتوي على مسافات. استخدم bufio.NewScanner(os.Stdin) واستدعِ scanner.Scan() متبوعة بـ scanner.Text() لقراءة أسطر كاملة.
ستتلقى مدخلين:
- سلسلة نصية تمثل عدد المهام الموجودة (على سبيل المثال،
"2") - سلسلة نصية تحتوي على أسماء المهام مفصولة بفاصلة (على سبيل المثال،
"Buy groceries,Call dentist,Finish project")
مهمتك هي:
- تعريف نفس هيكل
Taskمن التحدي السابق مع حقولName(string) وCompleted(bool) - إنشاء دالة تسمى
addTaskتأخذ شريحة من هياكلTaskواسم المهمة (string) كمعاملات - يجب أن تعيد دالة
addTaskشريحة جديدة مع المهمة المضافة (يجب أن يكون حقلCompletedللمهمة الجديدة مضبوطًا علىfalse) - استخدام
bufio.Scannerلقراءة أسطر المدخلات بشكل صحيح للتعامل مع أسماء المهام التي تحتوي على مسافات - إنشاء شريحة أولية من المهام بناءً على عدد المهام الموجودة المحدد في المدخل الأول:
- إذا كان العدد
"0"، ابدأ بشريحة فارغة - إذا كان العدد أكبر من
"0"، فقم بإنشاء هذا العدد من المهام النائبة بأسماء مثل"Existing Task 1"، و"Existing Task 2"، وما إلى ذلك، مع وضع علامة غير مكتملة عليها جميعًا
- إذا كان العدد
- تحليل أسماء المهام المفصولة بفاصلة من المدخل الثاني
- استخدام دالة
addTaskالخاصة بك لإضافة كل مهمة جديدة إلى الشريحة - طباعة كل مهمة في الشريحة النهائية بالتنسيق:
"Task: [name], Completed: [true/false]" - طباعة العدد الإجمالي للمهام بالتنسيق:
"Total tasks: [count]"
على سبيل المثال، إذا كان لديك مهمة واحدة موجودة وتريد إضافة "Buy groceries,Call dentist"، فيجب أن يظهر مخرجك المهمة الموجودة أولاً، تليها المهمتان الجديدتان، وأخيرًا العدد الإجمالي. يختبر هذا التحدي مهارات التعامل مع الشرائح (slices) باستخدام دالة append ويوضح كيفية بناء وظائف تعمل على توسيع هياكل البيانات الخاصة بك.
جرّب بنفسك
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: قم بإنشاء دالة addTask هنا
func main() {
// إنشاء ماسح ضوئي (scanner) لقراءة أسطر الإدخال
scanner := bufio.NewScanner(os.Stdin)
// قراءة عدد المهام الموجودة
scanner.Scan()
existingTasksStr := scanner.Text()
// قراءة أسماء المهام
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: أكمل التنفيذ
// 1. تحويل existingTasksStr إلى عدد صحيح
// 2. إنشاء شريحة (slice) أولية بالمهام الموجودة
// 3. تحليل taskNamesStr وإضافة مهام جديدة
// 4. طباعة جميع المهام والعدد الإجمالي
}جميع دروس 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)ملخص - الأشكال والسلوكيات