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: 20Na 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: 10To 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.
Wyzwanie
PoczątkującyW 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)
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory porównania i logiczne
Operatory porównania – część 1Operatory porównania – część 2Logiczny operator ANDLogiczny operator ORLogiczny operator NOTPodstawy kolejności wykonywania operatorówPodsumowanie – porównywanie7Sterowanie przepływem: pętle
Jak działa pętla `for`Pętla `for` — podstawyPętla `for` — tylko warunekSłowo kluczowe `break`Słowo kluczowe `continue`Pętle zagnieżdżonePodsumowanie — powtarzanie działań2Zmienne i podstawowe typy danych
Czym jest zmiennaWnioskowanie o typie za pomocą `:=`Liczby całkowite (int)Liczby zmiennoprzecinkoweWartości logiczneCiągi znakówWartości zeroweStałeKonwencje nazewnictwaPodsumowanie – zmienne i typy5Podstawowe wejście/wyjście
Formatowane wyjścieSpecyfikatory formatuWyświetlanie typówPobieranie podstawowych danych od użytkownikaPodsumowanie — wejście i wyjście8Funkcje
Zrozumienie funkcjiDeklarowanie funkcjiWywoływanie funkcjiParametry funkcjiZwracanie jednej wartościZwracanie wielu wartościNazwane wartości zwracanePodstawy zakresu funkcjiPodsumowanie — tworzenie wielokrotnego użytku kodu11Typy złożone: wycinki
Wprowadzenie do wycinkówDeklarowanie literałów wycinkówTworzenie wycinków za pomocą `make`Długość a pojemność wycinkaDostęp do elementów wycinkaDodawanie elementówWycinanie z istniejących wycinków i tablicIterowanie po wycinkachKopiowanie wycinkówPodsumowanie — listy dynamiczne3Podstawowe operatory
Operatory arytmetyczneOperator dzieleniaOperator moduloOperator przypisaniaOperatory przypisania z działaniemZwiększanie i zmniejszaniePowtórka – obliczenia6Sterowanie przepływem: instrukcje warunkowe
Instrukcja `if`Słowo kluczowe `else`Słowo kluczowe `else if`Przesłanianie zmiennych w `if`Inicjalizacja zmiennychInstrukcja `switch``switch` z wyrażeniami`switch` bez wyrażeniaSłowo kluczowe `fallthrough`Podsumowanie — podejmowanie decyzjiPoćwicz samodzielnie: Kompilator Go online