Global


Syntax
Global[.<type>] <variable[.<type>]> [= <expression>] [, ...]
Description
Une variable déclarée Global n'importe où dans le code est visible et utilisable n'importe où dans le code à l'exception du cas suivant: Les modules n'ont pas accès aux variables déclarées globales en dehors de ce module.
Global peut aussi être utilisé avec les tableaux, les listes et les maps.

Les instructions Protected et Static permettent de déclarer une variable locale dans une procédure qui a le même nom qu'une variable globale, sans risque de conflit.

Exemple: Avec des variables

  Global a.l, b.b, c, d = 20
  
  Procedure Change()
    Debug a  ; Affiche 10 car la variable 'a' est globale
  EndProcedure
  
  a = 10
  Change()

Exemple: Avec un tableau

  Global Dim Tableau(2)
  
  Procedure Change()
    Debug Tableau(0)  ; Affiche 10 car le tableau 'Tableau()' est global
  EndProcedure
  
  Tableau(0) = 10
  Change()

Exemple: Complexe avec un module: Tous les cas de figure

  Global Var_GlobaleHorsModule = 12
  Debug  Var_GlobaleHorsModule ; Affiche 12

  DeclareModule Ferrari
    Global Var_GlobaleModule = 308
    #FerrariName$ = "458 Italia"
    Debug #FerrariName$ ; Affiche "458 Italia"
  
    ; Debug Var_GlobaleHorsModule ; Affiche une erreur car le compilateur veut créer une var globale qui exste déjà
    Debug Var_GlobaleModule       ; Affiche 308
  
    Declare CreateFerrari() 
  EndDeclareModule


  ; Tous les éléments de cette section seront privés. Tous les noms peuvent être utilisés sans conflit
  ; --------------------------------------------------------------------------------------------------
  Module Ferrari
    Debug Var_GlobaleHorsModule  ; Affiche 0  <== Regarder !
    Debug Var_GlobaleModule      ; Affiche 308
  
    Global Initialized = 205
    Debug Initialized ; Affiche 205
  
    Procedure Init()
      Debug Var_GlobaleHorsModule ; Affiche 0
      Debug Var_GlobaleModule     ; Affiche 308
      Debug "InitFerrari()"  
    EndProcedure  
  
    Procedure CreateFerrari()    ; Procédure publique (car déclarée dans la section 'DeclareModule')
      Init()
      Debug "CreateFerrari()"
      Debug Var_GlobaleHorsModule ; Affiche 0
      Debug Var_GlobaleModule     ; Affiche 308
    EndProcedure
  
  EndModule


  ; Code principal
  ; -------------------------------------------------------------------------------------------------- 
  Procedure Init()               ; Procédure d'initialisation principale, n'entre pas en conflit avec la procédure 
                                 ; Init() du Module Ferrari
  
    Debug "Procédure init() du code principal."
    Debug Var_GlobaleHorsModule ; Affiche 12
    Debug Var_GlobaleModule     ; Affiche 0
  EndProcedure

  Init()

  Ferrari::CreateFerrari()
  Debug Ferrari::#FerrariName$ ; Affiche 458 Italia
  Debug Var_GlobaleHorsModule  ; Affiche 12
  ; Debug Var_GlobaleModule    ; Affiche une erreur car le compilateur veut créer une var globale qui exste déjà


  UseModule Ferrari           ; Maintenant, importer tous les éléments publics directement dans le programme principal

  CreateFerrari()
  Debug #FerrariName$         ; Affiche 458 Italia
  Debug Var_GlobaleHorsModule ; Affiche 12
  Debug Var_GlobaleModule     ; Affiche 308  <== Regarder !

  UnuseModule Ferrari
  ; Debug #FerrariName$       ; Affiche une erreur, introuvable
  Debug Var_GlobaleHorsModule ; Affiche 12
  Debug Var_GlobaleModule     ; Affiche 0  <== Regarder !