Global
DescriptionGlobal[.<type>] <variable[.<type>]> [= <expression>] [, ...]
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 !