Die global-Anweisung Zu Beginn:

Allgemein herrscht die Meinung, dass globale Variablen schlecht sind und zu schwer lesebaren und ebenso schwer verständlichen Quelltext führen. Dies stimmt, sobald es sich um mehr als 10 Zeilen Code handelt, vollkommen.

Die Änderungen an globalen Variablen 'sieht' man nicht von außen, sondern muss die Funktion selbst lesen, um herauszufinden, an welcher globalen Variable gedreht wurde. Weiter verkompliziert wird dies, wenn mehrere Funktionen auf die selbe Variable zugreifen, dann ist es schwer den Überblick zu behalten, wann welche globale Variable welchen Wert hat, etwa wenn eine Funktion durch die andere aufgerufen wird. Durch die Verwendung von globalen Variablen sind die Funktionen nicht mehr voneinander unabhängig und können nicht mehr einzeln getestet werden. Dies ist aber sehr wichtig, besonders wenn man saubere Programme schreiben will, die man selbst (oder andere) auch in Zukunft noch verstehen möchte.

Daher wird von der Verwendung von global generell abgeraten - die Funktion sollte ihre benötigten Variablen als Parameter bekommen und die Werte als Rückgabewerte mit return zurückgeben. Solch eine Funktion wird in der funktionalen Programmierung auch als nebeneffektsfreie Funktion bezeichnet. Ein sehr guter Begriff, der beschreibt, dass die Funktion wie eine Black-Box funktioniert: Man gibt Werte rein, es kommen Werte raus, ohne dass man darüber überlegen muss, wie die Funktion genau funktioniert. Natürlich sind nicht immer vollständig nebeneffektsfreie Funktionen möglich oder erwünscht, jedoch gibt es auch dann oft Mittel und Wege auf global zu verzichten. Der sinnvolle Einsatz von Klassen ist eine der Lösungsmöglichkeiten.

Nachdem das gesagt wurde und eine Warnung zur Verwendung von global ausgesprochen wurde, ist es nun an der Zeit sich die Funktionsweise von global anzusehen.

Da es doch immer wieder Verwirrung im Bezug auf global gibt, hier ein paar wichtige Merkhilfen dazu:

Fazit: Hier:

   1 global a
   2 a = [1, 2, 3]

ist global sinnlos.

Hier:

   1 a = [1, 2, 3]
   2 def f():
   3     global a
   4     a[0] = 2

ebenfalls.

Hier:

   1 a = [1, 2, 3]
   2 def f():
   3     global a
   4     a = [3, 4, 5]

dagegen ist es notwendig.

Tags: Tipps | Umsteiger | Grundlagen

Die global-Anweisung (zuletzt geändert am 2009-06-17 16:14:16 durch anonym)