Funktionsglobale Variablen

Jeder weiß: Globale Variablen sind böse. Mir fiel jetzt auf, dass viele funktionsglobale Variablen, also Variablen, die zu Beginn einer Funktion deklariert werden, nutzen. Diese sind dann nicht im jeweiligen Scope, sondern von überall in der Funktion änderbar.

Ist dies bei Programmiersprachen wie Pascal so üblich, sollte man überlegen, ob solche Konstrukte wirklich sinnvoll sind:

#include <stdio.h>

int do_something() {
    int a;
    int b;

    if (1 == 1) {
        a = 3;
        b = 4;
        return a + b;
    }

    return 0;
}

oder man lieber im Scope bleibt (der Einfachheit wurde jetzt auf Konstanten usw. verzichtet):

#include <stdio.h>

int do_something() {
    if (1 == 1) {
        int a = 3;
        int b = 4;
        return a + b;
    }

    return 0;
}

Das kann natürlich zu ähnlichen Problemen und Seiteneffekten führen, wie globale Variablen. Es ist also möglich, den Wert von funktionsglobalen Variablen an jeder Stelle im Code zu überschreiben, was fehleranfällig ist und das Debugging schwieriger macht.

Go und C++ bieten mittlerweile auch Konstrukte, in denen bereits im If-Kontrollstrukturheader Variablen deklariert und definiert werden können, die für die gesamte If-Kontrollstruktur funktionieren:

if (auto x = obj.methode(); x == 3) { ... }

Ich würde dringend empfehlen, auf funktionsglobale Variablen zu verzichten.

Ein weiteres Problem innerhalb verschiedener Programmiersprachen wie C ist, dass viele dann Variablen keinen Initialwert zuordnen. Es sollte also nicht so aussehen:

int a;

sondern besser:

int a = 0;

Dies vermindert Fehler und Debugging unter Umständen erheblich.

Schreibe einen Kommentar