Menu
CoddyTech

הסתרת משתנים בתוך `if`

חלק מהיחידה יסודות במסלול ה-GO של Coddy. שיעור 37 מתוך 109.

נלמד על הסתרת משתנים בהצהרות if. הצהרת if יכולה להצהיר על משתנה לפני התנאי שלה, והמשתנה הזה קיים רק בתוך בלוק ה־if ובלוקי ה־else הקשורים אליו. אם יש לו שם זהה לשם של משתנה מחוץ ל־if, הוא מסתיר את המשתנה החיצוני בתוך הבלוקים האלה.

ראשית, ניצור משתנה מחוץ להצהרת התנאי שלנו:

x := 10
fmt.Println("Original x value:", x)

לאחר שנריץ את הקוד הזה, יהיה לנו משתנה x שערכו 10, ונוכל להשתמש בו לאורך כל התוכנית שלנו.

עכשיו, נכריז על משתנה חדש y במשפט if. הוא קיים רק בתוך בלוקי if ו-else:

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y קיים רק בבלוק הזה
} else {
    fmt.Println("y is not greater than 15:", y)
    // y זמין גם בבלוקים של else
}

לאחר הרצת הקוד הזה, Go יחשב את y כ-20 (שהוא x * 2), יבדוק אם הוא גדול מ-15, ואז יבצע את הבלוק הראשון. הפלט יוצג על המסך:

y is greater than 15: 20

לבסוף, ננסה לגשת למשתנים שלנו אחרי משפט ה־if:

// fmt.Println(y) תגרום לשגיאה - y לא קיים כאן
fmt.Println("x is still:", x)

לאחר הרצת הקוד הזה, עדיין אפשר לגשת אל x, אבל y כבר אינו זמין, כי הוא היה קיים רק בתוך בלוקי if ו־else. הפלט יוצג על המסך:

x is still: 10

הדבר מדגים את תחום ההיקף של משתנה שמוצהר בהצהרת if: אפשר לגשת למשתנה y רק בתוך הבלוקים המותנים שבהם הוא הוצהר. אין y חיצוני, ולכן שום דבר לא מוסתר כאן. אילו קראנו לו x במקום זאת, הוא היה מסתיר את ה-x החיצוני בתוך הבלוקים האלה, וה-x החיצוני עדיין היה שווה ל-10 אחריהם.

challenge icon

אתגר

מתחילים

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

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

נסו בעצמכם

package main

import "fmt"

func main() {
	// משתנה בתחום החיצוני
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: צרו משתנה חדש בשם 'message' עם הערך "Hello from inner scope"
		
		// פעולה זו מדפיסה את ההודעה מהתחום הפנימי
		fmt.Println(message)
	}
	
	// פעולה זו מדפיסה את ההודעה מהתחום החיצוני
	fmt.Println(message)
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה יסודות

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