Menu
CoddyTech

Variablen-Shadowing in `if`

Teil des Abschnitts Grundlagen der GO-Journey von Coddy. Lektion 37 von 109.

Lerne etwas über Variablenüberschattung in if-Anweisungen. Eine if-Anweisung kann vor ihrer Bedingung eine Variable deklarieren, und diese Variable existiert nur innerhalb des if-Blocks und der zugehörigen else-Blöcke. Wenn sie denselben Namen wie eine Variable außerhalb des if-Blocks hat, überschattet (verbirgt) sie die äußere Variable innerhalb dieser Blöcke.

Erstellen wir zunächst eine Variable außerhalb unserer bedingten Anweisung:

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

Nach der Ausführung dieses Codes haben wir eine Variable x mit dem Wert 10, die wir im gesamten Programm verwenden können.

Deklarieren wir nun eine neue Variable y in der if-Anweisung. Sie existiert nur innerhalb der if- und else-Blöcke:

if y := x * 2; y > 15 {
    fmt.Println("y is greater than 15:", y)
    // y existiert nur in diesem Block
} else {
    fmt.Println("y is not greater than 15:", y)
    // y ist auch in else-Blöcken verfügbar
}

Nach der Ausführung dieses Codes berechnet Go y als 20 (also x * 2), prüft, ob der Wert größer als 15 ist, und führt dann den ersten Block aus. Die Ausgabe wird auf dem Bildschirm angezeigt:

y is greater than 15: 20

Versuchen wir schließlich, nach der if-Anweisung auf unsere Variablen zuzugreifen:

// fmt.Println(y) würde einen Fehler verursachen – y existiert hier nicht
fmt.Println("x is still:", x)

Nach der Ausführung dieses Codes können wir weiterhin auf x zugreifen, aber y ist nicht mehr verfügbar, da es nur innerhalb der if- und else-Blöcke existierte. Die Ausgabe wird auf dem Bildschirm angezeigt:

x is still: 10

Dies veranschaulicht den Gültigkeitsbereich einer in einer if-Anweisung deklarierten Variablen: Auf die Variable y kann nur innerhalb der bedingten Blöcke zugegriffen werden, in denen sie deklariert wurde. Es gibt kein äußeres y, daher wird hier nichts überschattet. Hätten wir sie stattdessen x genannt, würde sie das äußere x innerhalb dieser Blöcke überschatten, und das äußere x wäre danach weiterhin 10.

challenge icon

Aufgabe

Anfänger

In dieser Herausforderung übst du das Überschatten von Variablen in einer if-Anweisung. Du wirst sehen, wie eine innerhalb eines if-Blocks deklarierte Variable denselben Namen wie eine Variable im äußeren Gültigkeitsbereich haben kann, aber einen anderen Wert.

Der Code enthält eine Variable message im äußeren Gültigkeitsbereich. Deine Aufgabe ist es, innerhalb des if-Blocks eine überschattende Variable mit demselben Namen zu erstellen und dann beide Variablen auszugeben, um den Überschattungseffekt zu sehen.

Probier es selbst

package main

import "fmt"

func main() {
	// Variable im äußeren Gültigkeitsbereich
	message := "Hello from outer scope"
	
	isLoggedIn := true
	
	if isLoggedIn {
		// TODO: Erstelle eine neue Variable namens 'message' mit dem Wert "Hello from inner scope"
		
		// Dies gibt die Nachricht aus dem inneren Gültigkeitsbereich aus
		fmt.Println(message)
	}
	
	// Dies gibt die Nachricht aus dem äußeren Gültigkeitsbereich aus
	fmt.Println(message)
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Go-Compiler