Menu
Coddy logo textTech

ערכי אפס וברירות מחדל

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

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

לכל טיפוס יש ערך אפס משלו:

טיפוסערך אפס
int, float640
string"" (מחרוזת ריקה)
boolfalse
pointer, slice, mapnil

כשיוצרים struct, כל שדה שלא מגדירים במפורש מקבל את ערך ברירת המחדל שלו.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (מחרוזת ריקה)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

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

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

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

challenge icon

אתגר

קל

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

תארגן את הקוד שלך בשני קבצים:

  • player.go: הגדר struct בשם Player עם השדות הבאים: Username (string), Level (int), Score (int), IsPremium (bool) ו-GuildName (string). צור גם מתודה בשם DisplayProfile שמחזירה מחרוזת מעוצבת המציגה את כל המידע על השחקן.
  • main.go: קרא שם משתמש מהקלט וצור Player באמצעות אתחול חלקי בלבד: הגדר רק את השדה Username. לאחר מכן הצג את הפרופיל המלא כדי לראות כיצד Go ממלא את השדות שלא הוגדרו בערכי האפס שלהם.

הקלט הבא יסופק:

  • שורה 1: שם המשתמש של השחקן

המתודה DisplayProfile שלך צריכה להחזיר מחרוזת בפורמט המדויק הבא:

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

לדוגמה, אם שם המשתמש הוא ShadowKnight, הפלט שלך צריך להציג את שם המשתמש לצד כל ערכי האפס של השדות שלא אותחלו:

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

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

נסו בעצמכם

package main

import (
	"fmt"
)

func main() {
	// קראו את שם המשתמש מהקלט
	var username string
	fmt.Scanln(&username)

	// TODO: צרו Player באמצעות אתחול חלקי
	// הגדירו רק את השדה Username, והשאירו את שאר השדות עם ערכי אפס

	// TODO: הציגו את הפרופיל של השחקן באמצעות המתודה DisplayProfile
}
quiz iconבחנו את עצמכם

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

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

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