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: 20Versuchen 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: 10Dies 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.
Aufgabe
AnfängerIn 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)
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Vergleichs- und logische Operatoren
Vergleichsoperatoren – Teil 1Vergleichsoperatoren – Teil 2Logischer UND-OperatorLogischer ODER-OperatorLogischer NICHT-OperatorGrundlagen der OperatorrangfolgeZusammenfassung – Vergleiche durchführen7Kontrollfluss: Schleifen
Die `for`-Schleife erklärt`for`-Schleife – Grundlagen`for`-Schleife – nur BedingungDas Schlüsselwort `break`Das Schlüsselwort `continue`Verschachtelte SchleifenWiederholung – Aktionen wiederholen2Variablen und grundlegende Datentypen
Was ist eine VariableTypinferenz mit `:=`Ganzzahlen (int)GleitkommazahlenBoolesche WerteZeichenkettenNullwerteKonstantenNamenskonventionenRückblick – Variablen und Typen5Grundlegende Ein- und Ausgabe
Formatierte AusgabeFormatierungsverbenDatentypen ausgebenGrundlegende Benutzereingaben erhaltenRückblick – Ein- und Ausgabe8Funktionen
Funktionen verstehenEine Funktion deklarierenFunktionen aufrufenFunktionsparameterEinen einzelnen Wert zurückgebenMehrere Werte zurückgebenBenannte RückgabewerteGrundlagen des FunktionsumfangsRückblick – Wiederverwendbaren Code erstellen3Grundlegende Operatoren
Arithmetische OperatorenDivisionsoperatorDer Modulo-OperatorZuweisungsoperatorErweiterte ZuweisungsoperatorenInkrement und DekrementRückblick – Berechnungen6Kontrollfluss: Bedingungen
Die `if`-AnweisungDas `else`-SchlüsselwortDas `else if`-SchlüsselwortVariablen-Shadowing in `if`Variablen initialisierenDie `switch`-AnweisungSwitch mit AusdrückenSwitch ohne AusdruckDas `fallthrough`-SchlüsselwortZusammenfassung – Entscheidungen treffen9Zeiger
Was ist ein Zeiger?Zeigervariablen deklarierenDer AdressoperatorZeiger dereferenzierenZeiger in Funktionen verwendenNil-ZeigerRückblick – Zeiger verstehen12Zusammengesetzte Datentypen: Maps
Einführung in MapsMap-Literale deklarierenMaps mit `make` erstellenSchlüssel-Wert-Paare hinzufügen und aktualisierenAuf Map-Werte zugreifenDas Vorhandensein eines Schlüssels prüfenMap-Einträge löschenLänge von MapsMaps durchlaufenZusammenfassung – Schlüssel-Wert-SpeicherungÜbe selbstständig: Online-Go-Compiler