Menu
CoddyTech

שמות מיוצאים לעומת שמות לא מיוצאים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 4 מתוך 107.

ב-Go, האות הראשונה בשם קובעת את רמת החשיפה שלו. שמות שמתחילים באות גדולה הם מיוצאים (נגישים מחבילות אחרות). שמות שמתחילים באות קטנה אינם מיוצאים (פרטיים לחבילה).

שמות מיוצאים: גלויים מחוץ לחבילה

type User struct {
    Name  string  // שדה מיוצא
    Email string  // שדה מיוצא
}

func CreateUser(name string) User { // פונקציה מיוצאת
    return User{Name: name}
}

שמות לא מיוצאים: גלויים רק בתוך החבילה

type secret struct {     // מבנה שאינו מיוצא
    password string      // שדה שאינו מיוצא
}

func validate() bool {   // פונקציה שאינה מיוצאת
    return true
}

מעורב: מבנה מיוצא עם כמה שדות לא מיוצאים

type Account struct {
    Username string    // מיוצא - נגיש מכל מקום
    Email    string    // מיוצא - נגיש מכל מקום
    password string    // לא מיוצא - נגיש רק בתוך החבילה
}

מוסכמת שמות זו מחליפה משני גישה כמו public ו־private הקיימים בשפות אחרות.

// אות גדולה = מיוצא (ציבורי)
// אות קטנה = לא מיוצא (פרטי)

func SaveData() {}  // מיוצא
func loadData() {}  // לא מיוצא

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

challenge icon

אתגר

בינוני

תקנו את כל השמות ב־product.go כך שיתאימו למוסכמת השמות המיוצאים של Go. כתבו את האות הראשונה באות גדולה ב:

  • שם המבנה: product → Product
  • כל שמות השדות: name, price, stock
  • כל שמות הפונקציות: totalValue, displayInfo
  • כל ההפניות לשדות בתוך הפונקציות

נסו בעצמכם

package main

import "fmt"

func main() {
    var name string
    var price float64
    var stock int
    fmt.Scan(&name, &price, &stock)

    p := Product{
        Name:  name,
        Price: price,
        Stock: stock,
    }

    fmt.Println(DisplayInfo(p))
    fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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