סיכום – בניית כלי עזר
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 57 מתוך 68.
אתגר
קלצרו חבילת stringutil מקיפה עם פונקציות לעיבוד מחרוזות והדגימו את השימוש בה בתוכנית ראשית. האתגר הזה יבחן את היכולת שלכם ליצור חבילת כלי עזר מותאמת אישית, לממש פונקציות מיוצאות ולהשתמש בחבילה שלכם מתוכנית אחרת.
תקבלו שני קלטים:
- מחרוזת המכילה מפרטים של פונקציות בתבנית
"function1:description1,function2:description2"(לדוגמה,"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase") - מחרוזת המכילה מחרוזות בדיקה המופרדות באמצעות קווים אנכיים בתבנית
"string1|string2|string3"(לדוגמה,"hello|Go Programming|WORLD")
עליכם:
- ליצור חבילת
stringutilבאמצעות ההכרזהpackage stringutil - לנתח את הקלט הראשון באמצעות פיצול לפי פסיקים כדי לקבל מפרט נפרד לכל פונקציה
- עבור כל מפרט של פונקציה, לפצל לפי נקודתיים כדי לקבל את שם הפונקציה ואת התיאור
- לממש את הפונקציות המיוצאות הבאות בחבילת
stringutilשלכם:Reverse(s string) string- מחזירה את המחרוזת כאשר התווים בה מסודרים בסדר הפוךToUpper(s string) string- מחזירה את המחרוזת לאחר המרתה לאותיות גדולותToLower(s string) string- מחזירה את המחרוזת לאחר המרתה לאותיות קטנותLength(s string) int- מחזירה את אורך המחרוזת
- לייבא את חבילת
stringutilבתוכנית הראשית שלכם - להציג את כותרת החבילה:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - להציג את הפונקציות הזמינות:
"Available functions in stringutil package:"- עבור כל פונקציה מהקלט הראשון:
"- [function_name]: [description]"
- לנתח את הקלט השני באמצעות פיצול לפי קווים אנכיים כדי לקבל מחרוזות בדיקה נפרדות
- להציג את כותרת הבדיקות:
"Testing stringutil functions:" - להדגים את כל הפונקציות עבור כל מחרוזת בדיקה:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- לחשב ולהציג נתונים סטטיסטיים:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- להציג את המחרוזות הארוכה והקצרה ביותר:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- להציג את הודעת הסיום:
"Package demonstration completed successfully"
השתמשו בחבילת strings כדי לפצל מחרוזות קלט ולעבד טקסט, ובחבילת fmt כדי לעצב את הפלט. עבור הפונקציה Reverse, יהיה עליכם להמיר את המחרוזת לפרוסה של רונים, להפוך את הסדר ולהמיר אותה בחזרה למחרוזת. זכרו שכל הפונקציות המיוצאות חייבות להתחיל באותיות גדולות כדי שיהיה אפשר לגשת אליהן מחבילות אחרות. האתגר הזה מדגים כיצד ליצור חבילות כלי עזר לשימוש חוזר ולארגן יחד פונקציונליות קשורה.
נסו בעצמכם
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: צור כאן את הפונקציות של חבילת stringutil
// מכיוון שאי אפשר להשתמש בקבצים נפרדים, הגדר את הפונקציות ישירות
// בדרך כלל הן היו נמצאות בקובץ חבילה נפרד
// func Reverse(s string) string {
// // המר ל-runes, הפוך את הסדר והמר בחזרה ל-string
// }
// func ToUpper(s string) string {
// // השתמש ב-strings.ToUpper
// }
// func ToLower(s string) string {
// // השתמש ב-strings.ToLower
// }
// func Length(s string) int {
// // החזר את len(s)
// }
func main() {
// קרא את הקלט באמצעות bufio.Scanner כדי לטפל כראוי ברווחים
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// נתחו את מפרטי הפונקציות
funcList := strings.Split(functionSpecs, ",")
// נתחו את מחרוזות הבדיקה
testList := strings.Split(testStrings, "|")
// TODO: כתבו את הקוד שלכם למטה
// 1. הציגו את כותרת החבילה
// 2. הציגו את הפונקציות הזמינות מתוך funcList (בדקו את אורכי המערכים)
// 3. בדקו את כל הפונקציות עם כל מחרוזת בדיקה
// 4. חשבו והציגו נתונים סטטיסטיים
// 5. מצאו והציגו את המחרוזות הארוכה והקצרה ביותר (בדקו אם יש איברים ב-testList)
// 6. הציגו הודעת סיום
// זכרו להשתמש בפונקציות של החבילה stringutil, למשל:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאי3ממשקים (הבסיס)
מהו ממשק?הגדרת ממשקמימוש ממשקשימוש בטיפוסי ממשקממשק ריקבדיקות טיפוסמתג טיפוסיםסיכום – צורות והתנהגויות6קבוצות בסגנון המקובל ב-Go
דפוס הקבוצה ב-Goיצירת קבוצההוספה לקבוצהבדיקת חברות בקבוצההסרה מקבוצהמעבר על איברי קבוצהסיכום – שמות משתמש ייחודיים9חבילות ותחום נראות
מהי חבילה?מיוצא לעומת לא מיוצאיצירת חבילה פשוטהכינוי לחבילההמזהה הריק `_`הפונקציה `init`סיכום – בניית כלי עזרתרגלו בעצמכם: קומפיילר Go אונליין