Voici deux scripts qui, à première vue, sont équivalents. Pourtant…
Script n°1 | Script n°2 |
---|---|
Ce qui donne : 3 5 0 7 0 4 |
Ce qui donne : 3 5 5 7 7 4 |
Étant donnée le corps de la fonction reinitialise
dans le script n°2, on pourrait penser que son appel aurait le même effet que la
saisie directe de l’instruction x = 0
.
Cette différence est due aux notions de variable locale et de variable globale.
Lorsqu’on exécute l’instruction de la fonction reinitialise
dans l’état « x = 5 » , on commence par créer un nouvel état qui contient
une boîte nommée aussi x
à laquelle est associée la valeur 0 car la fonction reinitialise
a une variable locale x
qui porte par hasard le même nom que la variable utilisée dans le programme principal.
Si l’on décrit l’état d’exécution de chacun de ces deux scripts, on obtient alors le résultat suivant :
Script n°1 | Script n°2 |
---|---|
![]() |
![]() |
Les variables utilisées dans une fonction sont classées en locales et globales. Sont locales les arguments formels de la fonction et les variables affectées dans la fonction qui ne sont pas explicitement déclarées globales. Sont globales les autres variables, c’est-à-dire celles qui ne sont pas un argument formel et qui sont utilisées sans être affectées ou explicitement déclarées globales.
Ainsi, pour que le script n°2 donne le même résultat que le script n°1, il faudrait écrire ceci :