Dans la plupart des langages, les variables locales sont des variables automatiques stockées directement sur la pile d'appels . Cela signifie que lorsqu'une fonction récursive s'appelle elle-même, les variables locales de chaque instance de la fonction reçoivent des adresses distinctes . Par conséquent, les variables de cette portée peuvent être déclarées, modifiées et lues sans risque d' effets de bord sur les fonctions situées en dehors du bloc dans lequel elles sont déclarées.
Les langages de programmation utilisant le passage par valeur fournissent à la sous-routine appelée une copie locale des arguments qui lui sont transmis. Dans la plupart des langages, ces paramètres locaux sont traités comme les autres variables locales de la sous-routine. En revanche, le passage par référence et le passage par nom permettent aux paramètres de servir d'alias des valeurs passées en arguments, autorisant ainsi la sous-routine à modifier des variables situées en dehors de sa propre portée.
Variables locales statiques
Un type particulier de variable locale, appelée variable locale statique, est disponible dans de nombreux langages courants (dont C / C++ , Visual Basic , VB.NET et PHP ). Elle permet de conserver une valeur d'un appel à l'autre de la fonction : il s'agit d'une variable statique à portée locale. Dans ce cas, les appels récursifs à la fonction ont également accès à cette variable (unique et allouée statiquement ). Dans tous les langages mentionnés, les variables statiques sont déclarées comme telles à l'aide d'un mot-clé spécifique de classe de stockage (par exemple, `static` static).
Les variables locales statiques dans les fonctions globales ont la même durée de vie que les variables globales statiques , car leur valeur reste en mémoire pendant toute la durée du programme, mais ont une portée de fonction (et non une portée globale), comme avec les variables locales automatiques.
Cela diffère des autres usages du staticmot-clé , qui a plusieurs significations différentes selon les langues.
Variables locales en Perl
Perl prend en charge les variables locales dynamiques et lexicales. Le mot-clé `new` localest utilisé pour définir des variables locales dynamiques, tandis que `new` myest utilisé pour les variables locales lexicales. La portée dynamique étant moins courante aujourd'hui, la documentation Perl précise que `new` localne correspond pas à la définition généralement admise de « variable locale ». En revanche, le localmot-clé `new` attribue une valeur temporaire et dynamique à une variable globale (de paquetage), qui persiste jusqu'à la fin du bloc englobant. Cependant, cette variable est accessible à toute fonction appelée depuis ce bloc. Pour créer des variables locales lexicales, utilisez myplutôt l'opérateur `let`.
Pour comprendre son fonctionnement, considérez le code suivant :
Ceci affichera :
1 2 1
Cela se produit car la variable globale $a est modifiée en une nouvelle signification temporaireLe langage Ruby s'inspire également de Perl, mais sa notation est simplifiée : le nom d'une variable globale doit être précédé du signe dollar ($), comme ceci : ` $variable_nameglobal`, tandis qu'une variable locale n'en est pas précédée, comme ceci : `local` variable_name(alors qu'en Perl, toutes les valeurs scalaires sont précédées d'un $). Notez que Ruby ne prend en charge nativement que les variables locales statiques, comme celles de Perl my, et non les variables locales dynamiques, comme celles de Perl local. Il existe au moins une bibliothèque Ruby qui fournit des variables dynamiques.