בודק מספרים פשוט
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 67 מתוך 68.
אתגר
קלצרו מערכת לאימות מספרים שמדגימה כיצד ממשקים מגדירים חוזים של התנהגות, בעוד ששגיאות מותאמות אישית מספקות משוב משמעותי כאשר האימות נכשל. האתגר הזה יבחן את היכולת שלכם ליצור ממשקים, לממש אותם באמצעות טיפוסים מותאמים אישית ולטפל בשגיאות אימות כראוי.
תקבלו שתי קלטים:
- מחרוזת המכילה מספרים לאימות, מופרדים בפסיקים (למשל,
"45,150,25,200,75") - מחרוזת המכילה את טווח האימות בפורמט
"min:max"(למשל,"1:100")
עליכם:
- להגדיר ממשק
Validatorעם מתודה יחידה:Validate() error - ליצור טיפוס שגיאה מותאם אישית בשם struct
ValidationErrorעם שני שדות:Value(int) ו-Message(string) - לממש עבור
ValidationErrorאת המתודהError() string, שמחזירה את ההודעה בפורמט:"Validation failed: [message] (value: [value])" - ליצור struct בשם
NumberValidatorעם שלושה שדות:Number(int),Min(int) ו-Max(int) - לממש עבור
NumberValidatorאת המתודהValidate() error, כך ש:- היא תחזיר
nilאם המספר נמצא בטווח התקין (כולל הגבולות) - היא תחזיר
ValidationErrorעם ההודעה"number below minimum range"אם המספר קטן מהמינימום - היא תחזיר
ValidationErrorעם ההודעה"number above maximum range"אם המספר גדול מהמקסימום
- היא תחזיר
- לנתח את הקלט הראשון באמצעות פיצול לפי פסיקים, כדי לקבל מחרוזות של מספרים נפרדים
- לנתח את הקלט השני באמצעות פיצול לפי נקודתיים, כדי לחלץ את ערכי המינימום והמקסימום
- להמיר את כל ערכי המחרוזת למספרים שלמים באמצעות החבילה
strconv - להציג את כותרת האימות:
"=== NUMBER VALIDATION SYSTEM ===" - להציג את פרמטרי האימות:
"Validating numbers in range [min] to [max]" - עבור כל מספר:
- ליצור מופע של
NumberValidatorעם ערכי המספר והטווח - לקרוא למתודה
Validate()של המאמת - אם האימות מצליח (השגיאה היא
nil), להציג:"✓ [number] is valid" - אם האימות נכשל (השגיאה אינה
nil), להציג:"✗ [error_message]"
- ליצור מופע של
- להציג סיכום אימות:
"=== VALIDATION SUMMARY ===""Total numbers checked: [total_count]""Valid numbers: [valid_count]""Invalid numbers: [invalid_count]"
- להציג את הודעת הסיום:
"Number validation completed successfully"
השתמשו בחבילה strings כדי לפצל מחרוזות קלט, בחבילה strconv כדי להמיר מחרוזות למספרים שלמים, ובחבילה fmt כדי להציג פלט מעוצב. האתגר הזה מדגים כיצד ליצור מערכות אימות גמישות באמצעות ממשקים, תוך מתן מידע מפורט על שגיאות באמצעות טיפוסי שגיאה מותאמים אישית.
נסו בעצמכם
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// קראו את הקלט
var numbersInput string
var rangeInput string
fmt.Scanln(&numbersInput)
fmt.Scanln(&rangeInput)
// נתחו את הקלטים
numberStrings := strings.Split(numbersInput, ",")
rangeParts := strings.Split(rangeInput, ":")
// המירו את ערכי הטווח למספרים שלמים
min, _ := strconv.Atoi(rangeParts[0])
max, _ := strconv.Atoi(rangeParts[1])
// TODO: כתבו את הקוד שלכם למטה
// 1. הגדירו את הממשק Validator
// 2. צרו את המבנה ValidationError וממשו את המתודה Error()
// 3. צרו את המבנה NumberValidator וממשו את המתודה Validate()
// 4. עבדו כל מספר ובדקו את תקינותו
// 5. הציגו את התוצאות ואת הסיכום
// הציגו את כותרת בדיקת התקינות
fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
fmt.Printf("Validating numbers in range %d to %d\n", min, max)
// עבדו כאן כל מספר
// הציגו את סיכום בדיקת התקינות
fmt.Println("=== VALIDATION SUMMARY ===")
// הוסף כאן את פלט הסיכום
fmt.Println("Number validation completed successfully")
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין