Menu
Coddy logo textTech

יצירת חבילה פשוטה

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 53 מתוך 68.

עכשיו הגיע הזמן ליצור חבילה מותאמת אישית משלך! יצירת חבילות מאפשרת לך לארגן את הקוד שלך במודולים לשימוש חוזר שאפשר לייבא ולהשתמש בהם בתוכניות שונות.

כדי ליצור חבילה, מתחילים בהכרזה עליה בראש הקובץ באמצעות מילת המפתח package, ואחריה שם החבילה. עבור חבילת המחשבון שלנו, נשתמש ב:

package calculator

בתוך החבילה הזו אפשר להגדיר פונקציות, משתנים וטיפוסים. זכור שרק מזהים מיוצאים (אלה שמתחילים באות גדולה) יהיו נגישים מחבילות אחרות. כך אפשר להגדיר פונקציית Add מיוצאת:

package calculator

func Add(a, b int) int {
    return a + b
}

כדי להשתמש בחבילה המותאמת אישית שלך מקובץ אחר, מייבאים אותה בדיוק כמו כל חבילה אחרת. מתוך חבילת main שלך, אפשר לקרוא לפונקציות המיוצאות:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

הגישה המודולרית הזו הופכת את הקוד שלך למאורגן יותר ומאפשרת לך לעשות שימוש חוזר בפונקציונליות בכמה תוכניות בלי לשכפל קוד.

challenge icon

אתגר

קל

צרו חבילת mathutils מותאמת אישית עם פעולות מתמטיות בסיסיות, ואז השתמשו בה מתוך התוכנית הראשית שלכם. האתגר הזה יבחן את היכולת שלכם ליצור חבילה, להגדיר פונקציות מיוצאות ולייבא את החבילה המותאמת אישית שלכם לשימוש בתוכנית אחרת.

תקבלו שתי קלטים:

  • מחרוזת המכילה הגדרות של פונקציות בפורמט "function1:param1,param2:operation|function2:param1,param2:operation" (למשל, "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • מחרוזת המכילה בקשות חישוב בפורמט "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (למשל, "Add:15,25|Multiply:6,8|Subtract:50,20")

עליכם:

  1. ליצור חבילת mathutils באמצעות הצהרת package mathutils בראש הקובץ
  2. לנתח את הקלט הראשון על ידי פיצול לפי קווים אנכיים (|) כדי לקבל את הגדרות הפונקציות הבודדות
  3. עבור כל הגדרת פונקציה, לפצל לפי נקודתיים כדי לקבל את שם הפונקציה, הפרמטרים וסוג הפעולה
  4. ליצור את הפונקציות המיוצאות הבאות בחבילת mathutils שלכם:
    • Add(a, b int) int - מחזירה את הסכום של a ו-b
    • Subtract(a, b int) int - מחזירה את a פחות b
    • Multiply(a, b int) int - מחזירה את המכפלה של a ו-b
    • Divide(a, b int) int - מחזירה את a חלקי b (חלוקה של מספרים שלמים)
  5. לייבא את חבילת mathutils לתוכנית הראשית שלכם
  6. להציג את כותרת פרטי החבילה: "=== MATHUTILS PACKAGE DEMO ==="
  7. לנתח את הקלט הראשון ולהציג את הפונקציות הזמינות:
    • "Available functions in mathutils package:"
    • עבור כל פונקציה: "- [function_name]: Performs [operation_type] on two integers"
  8. לנתח את הקלט השני על ידי פיצול לפי קווים אנכיים כדי לקבל את בקשות החישוב הבודדות
  9. עבור כל בקשת חישוב, לפצל לפי נקודתיים כדי לקבל את שם הפונקציה ואת הפרמטרים
  10. לפצל את הפרמטרים לפי פסיקים כדי לקבל את שני הערכים השלמים
  11. להמיר את מחרוזות הפרמטרים למספרים שלמים באמצעות strconv.Atoi
  12. להציג את כותרת תהליך החישוב: "Performing calculations:"
  13. עבור כל בקשת חישוב:
    • לקרוא לפונקציה המתאימה מתוך חבילת mathutils
    • להציג: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. לחשב ולהציג נתונים סטטיסטיים מסכמים:
    • "Calculation Summary:"
    • "Total calculations performed: [number_of_calculations]"
    • "Functions used: [comma_separated_list_of_unique_function_names_used]"
    • "Sum of all results: [sum_of_all_calculation_results]"
  15. להציג אישור על השימוש בחבילה:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

השתמשו בחבילת strings כדי לפצל את מחרוזות הקלט, בחבילת strconv כדי להמיר מחרוזות למספרים שלמים, ובחבילת fmt להפקת פלט מעוצב. זכרו שרק פונקציות ששמן מתחיל באותיות גדולות מיוצאות ונגישות מחבילות אחרות.

חשוב: בשתי שורות הקלט משתמשים בקווים אנכיים (|) כמפרידים בין פריטים. לכל פריט בקלט הראשון יש את הפורמט FunctionName:param1,param2:operationtype: פצלו תחילה לפי |, ואז פצלו כל פריט לפי : כדי לחלץ את שם הפונקציה (אינדקס 0) ואת סוג הפעולה (אינדקס 2).

האתגר הזה מדגים כיצד ליצור קוד לשימוש חוזר באמצעות חבילות מותאמות אישית וכיצד לארגן פונקציונליות במודולים לוגיים.

נסו בעצמכם

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// TODO: צרו כאן את הפונקציות של החבילה mathutils
// מכיוון שאי אפשר להשתמש בקבצים נפרדים, הגדירו את הפונקציות ישירות
// בדרך כלל הן היו נמצאות בקובץ נפרד של החבילה

func main() {
	// קראו קלט באמצעות bufio.Scanner כדי לטפל כראוי ברווחים
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	functionDefs := scanner.Text()

	scanner.Scan()
	calcRequests := scanner.Text()

	// TODO: כתבו את הקוד שלכם למטה
	// 1. הגדירו את הפונקציות Add, Subtract, Multiply, Divide (כהדמיה של החבילה mathutils)
	// 2. נתחו את functionDefs: פצלו לפי '|' כדי לקבל כל הגדרה, ואז פצלו כל אחת לפי ':'
	//    פורמט: FuncName:param1,param2:operation  (לדוגמה "Add:5,3:addition")
	// 3. הציגו מידע על החבילה ועל הפונקציות הזמינות
	// 4. נתחו את calcRequests (פצלו לפי '|') ובצעו את החישובים
	// 5. הציגו את התוצאות ואת נתוני הסיכום

	// מנעו אזהרות על משתנים שאינם בשימוש
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// זכרו להציג את הפלט בפורמט הנדרש, כפי שצוין באתגר
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Go אונליין