הוספת משימה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 21 מתוך 68.
אתגר
קלבהמשך לבסיס שבנית לניהול משימות, עכשיו תממש את הפונקציונליות המרכזית להוספת משימות חדשות למערכת שלך. האתגר הזה מתמקד ביצירת פונקציה שמרחיבה את רשימת המשימות שלך באמצעות הוספת משימות חדשות לפרוסה הקיימת.
הערה חשובה: מכיוון ששמות משימות עשויים להכיל רווחים (כמו "Buy groceries"), יהיה עליך להשתמש ב-bufio.Scanner כדי לקרוא שורות קלט שלמות. הפונקציה fmt.Scanln מפסיקה לקרוא ברווח הראשון, דבר שיפגע בשמות של משימות שמכילים רווחים. השתמש ב-bufio.NewScanner(os.Stdin) וקרא ל-scanner.Scan() ולאחר מכן ל-scanner.Text() כדי לקרוא שורות שלמות.
תקבל שתי קלטים:
- מחרוזת שמייצגת את מספר המשימות הקיימות (לדוגמה,
"2") - מחרוזת שמכילה שמות משימות מופרדים בפסיקים (לדוגמה,
"Buy groceries,Call dentist,Finish project")
המשימה שלך היא:
- להגדיר את אותו מבנה
Taskמהאתגר הקודם, עם השדותName(מחרוזת) ו-Completed(בוליאני) - ליצור פונקציה בשם
addTaskשמקבלת פרוסה של מבניTaskושם משימה (מחרוזת) כפרמטרים - הפונקציה
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", הפלט שלך צריך להציג תחילה את המשימה הקיימת, אחריה את שתי המשימות החדשות ולבסוף את המספר הכולל. האתגר הזה מתרגל מניפולציה של פרוסות באמצעות הפונקציה 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. הדפיסו את כל המשימות ואת המספר הכולל שלהן
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין