Gängige Dateiformate
Programmierrichtlinien
Wie schlagen sich die Script- und Programmiersprachen im Vergleich?
C#
JavaScript & TypeScript (mit node.js)
Welche Entwicklungsumgebung (IDE) ist die Beste?

Shadowing – Die Namensverdeckung von Variablen

Was versteht man unter Shadowing?

Die Namensverdeckung (engl. Shadowing) tritt auf, wenn eine lokale Variable den gleichen Variablennamen wie eine weiter oben definierte Variable (z. B. eine globale Variable oder eine äußere Variable in einer geschachtelten Funktion) hat. Dadurch wird der ursprüngliche Variablenname innerhalb des lokalen Geltungsbereichs (Scope) verdeckt und ist nicht mehr direkt zugänglich.

Ein Beispiel von Shadowing:

# Python-Code
# Globale Variable
name = "Richard von Weizsäcker"

# Eine Funktion
def greet():
    # Lokale Variable in der Funktion überschattet die globale Variable
    name = "Helmut Schmidt"
    print(f"Hallo, {name}!")  # Gibt "Hallo, Helmut Schmidt!" aus

# Funktionsaufruf
greet()

# Die globale Variable bleibt unverändert
print(f"Globale Variable: {name}")  # Gibt "Globale Variable: Richard von Weizsäcker" aus

Erklärung des Shadowing-Problems:

  1. Globale Variable: name = "Alice" wird im Hauptprogramm definiert.
  2. Lokale Variable: Innerhalb der Funktion greet() wird eine neue Variable name = "Bob" definiert.
    • Diese überdeckt (shaded) die globale name-Variable nur innerhalb der Funktion.
  3. Ausgabe in der Funktion:
    • print(f"Hallo, {name}!") gibt "Hallo, Bob!" aus, da die Funktion die lokale Variable verwendet.
  4. Globale Variable bleibt erhalten:
    • print(f"Globale Variable: {name}") gibt "Globale Variable: Alice" aus, weil die globale Variable nicht überschrieben wurde.

💡 Problem:
Shadowing kann zu Verwirrung führen, da es so aussieht, als würde name überall dasselbe bedeuten, obwohl es innerhalb der Funktion eine völlig andere Variable ist.

Fazit

Namensverdeckung tritt auf, wenn eine lokale Variable einen bereits existierenden Namen überschreibt.
Vermeidung:
✅ Verwende unterschiedliche Namen für verschiedene Scopes.
✅ Strukturiere deinen Code so, dass Variablen in einem klaren Kontext bleiben.

SpracheShadowing erlaubt?Einschränkungen
C / C++✅ Ja
Python✅ Ja
Java✅ Ja
JavaScript✅ Jalet/const beeinflussen Scoping
Rust✅ Jamut erfordert explizite Neudeklaration
Swift✅ Jalet kann var nicht überschreiben
Go✅ JaNur innerhalb {}-Blöcken
C#✅ Ja
Kotlin✅ Ja
Haskell❌ EingeschränktShadowing nur mit let, nicht in do-Blöcken
Erlang❌ NeinKeine Variablen-Neuzuweisung
Elixir❌ NeinVariablen sind immutable
Prolog❌ NeinVariablen können nicht überschrieben werden
COBOL❌ NeinKein Konzept von lokalen Variablen