צפייה בכל המשימות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 22 מתוך 68.
אתגר
קלבהמשך למערכת ניהול המשימות שלך, עכשיו תממש את הפונקציונליות להצגת כל המשימות בפורמט ידידותי למשתמש. האתגר הזה מתמקד במעבר על אוסף המשימות שלך ובהצגת כל משימה עם מצב ההשלמה שלה, תוך שימוש בסימונים חזותיים ברורים.
תקבל שתי כניסות:
- מחרוזת שמייצגת את מספר המשימות (למשל,
"4") - מחרוזת שמכילה נתוני משימות בפורמט:
"name1:status1,name2:status2,name3:status3"כאשר המצב הוא"true"או"false"(למשל,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
המשימה שלך היא:
- להגדיר את אותו מבנה
Taskמהאתגרים הקודמים, עם השדותName(מחרוזת) ו-Completed(בוליאני) - ליצור פונקציה בשם
viewAllTasksשמקבלת פרוסה של מבניTaskכפרמטר - בתוך הפונקציה
viewAllTasks, לעבור על הפרוסה ולהדפיס כל משימה בפורמט הבא:- למשימות שהושלמו:
"[x] [task_name]" - למשימות שלא הושלמו:
"[ ] [task_name]"
- למשימות שהושלמו:
- לנתח את נתוני המשימות מהכניסה השנייה כדי ליצור את פרוסת המשימות:
- לפצל את הקלט לפי פסיקים כדי לקבל את רשומות המשימות הבודדות
- עבור כל רשומה, לפצל לפי נקודתיים כדי להפריד בין השם למצב
- להמיר את מחרוזת המצב לערך בוליאני (
"true"הופך ל-true,"false"הופך ל-false)
- לקרוא לפונקציה
viewAllTasksעם הפרוסה שיצרת - לאחר הצגת כל המשימות, להדפיס סיכום בפורמט:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
לדוגמה, אם יש לך משימות "Buy groceries:false,Call dentist:true,Finish project:false", הפלט שלך אמור להציג כל משימה עם תיבות סימון מתאימות, ואז להציג את הסיכום עם המספר הכולל ונתוני ההשלמה. האתגר הזה מתרגל מעבר על פרוסה, עיצוב מותנה באמצעות משפטי 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 עם ה-slice שנוצר
// TODO: לחשב ולהדפיס סיכום
// פורמט: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין