Global


Syntax
Global[.<Typ>] <Variable[.<Typ>]> [= <Ausdruck>] [, ...]
Beschreibung
Global bietet die Möglichkeit, Variablen als global zu definieren, z.B. kann auf solche Variablen dann auch innerhalb einer Prozedur zugegriffen werden. In diesem Fall muss jedoch die Anweisung Global für die entsprechenden Variablen aufgerufen werden, bevor die Deklaration der Prozedur erfolgt.
Diese Regel ist überall gültig - außer in einem Fall: Die Module haben keinen Zugriff auf die als global deklarierten Variablen außerhalb dieses Moduls.
Jeder Variable kann auch sofort ein Standard-Wert zugewiesen werden. Wenn für die Variable nach Global ein Typ angegeben wird, dann wird der Standard-Typ durch diese Deklaration geändert. Global kann auch zusammen mit Arrays, verknüpften Listen und Maps verwendet werden.

Für den Fall, dass Sie in einer Prozedur 'lokale' Variablen, die den gleichen Namen wie globale Variablen haben, verwenden möchten, schauen Sie sich die Schlüsselworte Protected und Static an.

Beispiel: Mit Variablen

  Global a.l, b.b, c, d = 20
  
  Procedure Change()
    Debug a  ; wird 10 sein, da die Variable global ist
  EndProcedure
  
  a = 10
  Change()

Beispiel: Mit Array

  Global Dim Array(2)
  
  Procedure Change()
    Debug Array(0)  ; wird 10 sein, da das Array global ist
  EndProcedure
  
  Array(0) = 10
  Change()

Beispiel: Mit Standard-Typ

  ; 'Angle' und 'Position' werden Fließkomma-Variablen sein, da bei ihnen kein Typ angegeben wurde
  ;
  Global.f Angle, Length.b, Position


Beispiel: Komplex - mit einem Modul

  Global Var_GlobalOutsideModule = 12
  Debug  Var_GlobalOutsideModule ; Zeigt 12 an

  DeclareModule Ferrari
    Global Var_GlobalModule = 308
    #FerrariName$ = "458 Italia"
    Debug #FerrariName$ ; Zeigt "458 Italia" an
  
    ; Debug Var_GlobalOutsideModule ; Fehler, diese Variable existiert bereits
    Debug Var_GlobalModule       ; Zeigt 308 an
  
    Declare CreateFerrari() 
  EndDeclareModule


  ; Privat
  ; ---------------------------------------------------------------------------------------
  Module Ferrari
    Debug Var_GlobalOutsideModule  ; Zeigt 0 an <== Schau her !
    Debug Var_GlobalModule      ; Zeigt 308 an
  
    Global Initialized = 205
    Debug Initialized ; Zeigt 205 an
  
    Procedure Init()
      Debug Var_GlobalOutsideModule ; Zeigt 0 an
      Debug Var_GlobalModule     ; Zeigt 308 an
      Debug "InitFerrari()"  
    EndProcedure  
  
    Procedure CreateFerrari()    ; Öffentlich
      Init()
      Debug "CreateFerrari()"
      Debug Var_GlobalOutsideModule ; Zeigt 0 an
      Debug Var_GlobalModule     ; Zeigt 308 an
    EndProcedure
  
  EndModule


  ; Haupt-Code
  ; --------------------------------------------------------------------------------------------- 
  Procedure Init()               
  
    Debug " init() vom Haupt-Code."
    Debug Var_GlobalOutsideModule ; Zeigt 12 an
    Debug Var_GlobalModule     ; Zeigt 0 an
  EndProcedure

  Init()

  Ferrari::CreateFerrari()
  Debug Ferrari::#FerrariName$ ; Zeigt 458 Italia an
  Debug Var_GlobalOutsideModule  ; Zeigt 12 an
  ; Debug Var_GlobalModule    ;  Fehler, die Variable existiert bereits


  UseModule Ferrari           

  CreateFerrari()
  Debug #FerrariName$         ; Display 458 Italia
  Debug Var_GlobalOutsideModule ; Zeigt 12 an
  Debug Var_GlobalModule     ; Zeigt 308 an <== Schau her !

  UnuseModule Ferrari
  ; Debug #FerrariName$       ; Fehler, existiert nicht
  Debug Var_GlobalOutsideModule ; Zeigt 12 an
  Debug Var_GlobalModule     ; Zeigt 0 an <== Schau her !