PRIVATE
DESCRIPTION.
L'instruction PRIVATE permet de déclarer des variables de portée locale et privées dans une fonction personnalisée PROC ou FN.
SYNTAXE.
PRIVATE knom?
REMARQUES.
knom peut être n'importe quelle combinaison de lettres majuscules ou minuscules et de chiffres, mais commençant par une lettre et qui ne soit pas un mot-clé du BBC BASIC.
? peut être :
- rien, pour des valeurs numériques variables, entières ou réelles à virgule flottante ;
- &, pour des nombres entiers de 0 à 255 ;
- %, pour des nombres entiers de −2147483648 à 2147483647 ;
- %%, pour des nombres entiers de −9223372036854775808 à 9223372036854775807 ;
- #, pour des nombres réels de ±2,3E−308 à ±1,7E308 ;
- $, pour des chaines de caractères ;
L'instruction PRIVATE ne s'utilise que dans des fonctions personnalisées PROC ou FN.
Dans BBC BASIC, toutes les variables sont de portée globale par défaut, c'est-à-dire qu'une fois qu'elle ont été déclaré dans le module principal ou dans une fonction personnalisée PROC ou FN, leur valeur peut être lue ou modifiée dans le module principal, mais aussi dans toutes les fonctions personnalisées PROC ou FN.
Les variables privées, c'est-à-dire déclarées dans une fonction personnalisée PROC ou FN avec l'instruction PRIVATE, sont propres à la fonction personnalisée qui les déclare. Leurs valeurs sont conservées à la sortie de la fonction personnalisée et restituées à l'identique à chaque nouvelle exécution de cette fonction personnalisée. Ces variables ne peuvent pas être lues ou modifiées depuis le module principal ou dans une autre fonction personnalisé, même s'il existe des variables avec un nom identique dans celle-ci.
Déclarée une variable avec le mot-clé PRIVATE, dans une fonction personnalisée, permet de s'assurer qu'il n'y aura pas de correspondance avec une variable de même nom utilisée dans le module principale. Ainsi si une variable avait le même nom dans le module principale, sa valeur ne serait pas modifiée dans la fonction personnalisée. Cependant, la valeur de la variable du module principal, n'étant plus accessible dans la fonction personnalisée, il ne sera pas possible de la lire non plus.
Il n'est pas obligatoire qu'une variable de même nom existe dans le module principal pour la déclarer de portée locale avec le mot-clé PRIVATE dans une fonction personnalisée PROC ou FN. Il est possible de déclarer de portée locale plusieurs variables de même nom dans des fonctions personnalisées différentes, elles seront toutes indépendantes les unes des autres et de celle qui pourrait être déclarée dans le module principal.
Si un tableau de données, ou une structure de données, est déclaré comme étant de portée locale avec le mot-clé PRIVATE dans une fonction personnalisée PROC ou FN, il devra être déclaré et dimensionné avec l'instruction DIM pour pouvoir être utilisé dans cette fonction personnalisée sans provoquer d'erreur. Le format d'un tableau de données, ou d'une structure de données, peut être similaire ou différent de celui du module principal.
A la sortie de la fonction personnalisée, toutes les valeurs des variables déclarées avec le mot-clé PRIVATE sont mémorisées. Si cette même fonction personnalisée est exécutée de nouveau, les variables privées de cette fonction personnalisée retrouveront les valeurs qu'elles avaient lors de la sortie de la fonction.
Pour effacer les valeurs des variables de portée locale dans une fonction personnalisée, on utilisera le mot-clé LOCAL à la place de l'instruction PRIVATE.
EXEMPLES.
kcompteur = 0
PRINT "Dans le module principal : "; kcompteur
FOR ktour = 1 TO 3
PROC_Sans
PROC_Avec
NEXT ktour
PRINT "Dans le module principal : "; kcompteur
END
REM --- Sans déclarations privee ---
DEF PROC_Sans
kcompteur = kcompteur + 10
PRINT "Dans la procedure SANS : "; kcompteur
ENDPROC
REM --- Avec déclarations privee ---
DEF PROC_Avec
PRIVATE kcompteur
kcompteur = kcompteur + 1
PRINT "Dans la procedure AVEC : "; kcompteur
ENDPROC
retourne
Dans le module principal : 0
Dans la procedure SANS : 10
Dans la procedure AVEC : 1
Dans la procedure SANS : 20
Dans la procedure AVEC : 2
Dans la procedure SANS : 30
Dans la procedure AVEC : 3
Dans le module principal : 30
FOR kvaleur = 1 TO 3
kcontrole = 0
PRINT "Execution : "; kvaleur
PROC_Recursive
NEXT kvaleur
END
REM --- fonction récursive ---
DEF PROC_Recursive
LOCAL klocal
PRIVATE kprive
kcontrole = kcontrole + 1
klocal = klocal + 10
kprive = kprive + 3
PRINT kcontrole; " - Variable locale : "; klocal; " - Variable prive : "; kprive
IF kcontrole <> 3 THEN PROC_Recursive
ENDPROC
retourne
Execution : 1
1 - Variable locale : 10 - Variable prive : 3
2 - Variable locale : 10 - Variable prive : 6
3 - Variable locale : 10 - Variable prive : 9
Execution : 2
1 - Variable locale : 10 - Variable prive : 12
2 - Variable locale : 10 - Variable prive : 15
3 - Variable locale : 10 - Variable prive : 18
Execution : 3
1 - Variable locale : 10 - Variable prive : 21
2 - Variable locale : 10 - Variable prive : 24
3 - Variable locale : 10 - Variable prive : 27
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
avec un exemple de résolution à télécharger pour vous inspirer.