Menu
CoddyTech

Przesłanianie zmiennych w `if`

Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 37 z 109.

Poznajmy przesłanianie zmiennych w instrukcjach if. Instrukcja if może zadeklarować zmienną przed swoim warunkiem, a ta zmienna istnieje tylko wewnątrz bloku if i powiązanych z nim bloków else. Jeśli ma taką samą nazwę jak zmienna poza instrukcją if, przesłania (ukrywa) zmienną zewnętrzną wewnątrz tych bloków.

Najpierw utwórzmy zmienną poza instrukcją warunkową:

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

Po wykonaniu tego kodu będziemy mieć zmienną x o wartości 10, której możemy używać w całym programie.

Teraz zadeklarujmy nową zmienną y w instrukcji if. Istnieje ona tylko w blokach if i else:

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y istnieje tylko w tym bloku
} else {
    fmt.Println("y is not greater than 15:", y)
    // y jest dostępne również w blokach else
}

Po wykonaniu tego kodu Go obliczy y jako 20 (czyli x * 2), sprawdzi, czy wartość jest większa niż 15, a następnie wykona pierwszy blok. Wynik zostanie wyświetlony na ekranie:

y is greater than 15: 20

Na koniec spróbujmy uzyskać dostęp do naszych zmiennych po instrukcji if:

// fmt.Println(y) spowodowałoby błąd — y tutaj nie istnieje
fmt.Println("x is still:", x)

Po wykonaniu tego kodu nadal możemy uzyskać dostęp do x, ale y nie jest już dostępne, ponieważ istniało tylko w blokach if i else. Wynik pojawi się na ekranie:

x is still: 10

To pokazuje zakres zmiennej zadeklarowanej w instrukcji if: zmienna y jest dostępna tylko w blokach warunkowych, w których została zadeklarowana. Nie ma zewnętrznej zmiennej y, więc nic nie jest tu przesłaniane. Gdybyśmy zamiast tego nazwali ją x, przesłoniłaby zewnętrzną zmienną x w tych blokach, a po ich zakończeniu zewnętrzna zmienna x nadal miałaby wartość 10.

challenge icon

Wyzwanie

Początkujący

W tym wyzwaniu przećwiczysz przesłanianie zmiennych w instrukcji if. Zobaczysz, jak zmienna zadeklarowana wewnątrz bloku if może mieć taką samą nazwę jak zmienna w zakresie zewnętrznym, ale inną wartość.

W kodzie znajduje się zmienna message w zakresie zewnętrznym. Twoim zadaniem jest utworzenie przesłaniającej zmiennej o tej samej nazwie wewnątrz bloku if, a następnie wypisanie obu zmiennych, aby zobaczyć efekt przesłaniania.

Spróbuj swoich sił

package main

import "fmt"

func main() {
	// Zmienna zewnętrznego zakresu
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: Utwórz nową zmienną o nazwie 'message' i wartości "Hello from inner scope"
		
		// To wypisuje komunikat z wewnętrznego zakresu
		fmt.Println(message)
	}
	
	// To wypisuje komunikat z zewnętrznego zakresu
	fmt.Println(message)
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Go online