Les fonctions en général
157
Et supposons qu’on l’appelle deux fois dans un programme, de cette manière :
bizarre (vrai)
.....
bizarre (faux)
Le premier appel provoque la lecture d’une valeur et l’affiche. Le second appel, en revanche,
ne provoque pas de lecture et se contente d’afficher « la valeur de la variable locale n ».
Qu’allons-nous obtenir comme valeur ? Pour répondre, il faut savoir si la valeur de la variable locale n est conservée ou non d’un appel au suivant. Dans la plupart des langages actuels,
la réponse est non, ce qu’on traduit souvent en disant :
Ici, la valeur de n lors du deuxième appel est donc indéfinie.
Remarques
1 Cette propriété de « non rémanence » s’appliquera à tout ce qui est local à une fonction,
c’est-à-dire non seulement aux variables, mais aussi aux tableaux et aux objets.
2 Dans certains anciens langages (Fortran IV par exemple), les variables locales étaient
rémanentes. De nombreux programmes se basaient sur cette propriété pour obtenir
d’une fonction un comportement particulier lors de son premier appel...
3 Nous verrons, au paragraphe 5, page 162, que la manière dont sont gérées les variables
locales dans la plupart des langages actuels, interdit leur rémanence.
4 Dans un langage où les variables locales sont rémanentes, il n’est pas possible d’écrire
une fonction récursive.
4.1.2 Initialisation des variables locales
Les variables locales peuvent être initialisées lors de leur déclaration, comme dans cet
exemple :
fonction exemple
{ entier n := 5
// variable locale initialisée avec la valeur 5
.....
}
Bien entendu, ici, on pourrait éviter une telle initialisation en écrivant simplement :
fonction exemple
{ entier n
n := 5
.....
}
On ne perdra pas de vue que cette initialisation est effectuée à chaque appel de la fonction (et
non pas une fois pour toutes). C’est pourquoi la plupart des langages autorisent alors que l’on
utilise comme expression d’initialisation, non seulement des expressions constantes, mais
aussi des expressions utilisant les paramètres muets, comme dans cet exemple :
Les variables locales ne sont pas rémanentes
Précédent

- 180/370

Suivant