Variables globales

Objectifs

  • Savoir ce que sont et à quoi servent les variables globales ;

  • Adopter les bonnes pratiques.

Mise en situation

Les variables ont généralement une portée locale, c'est à dire qu'elles ne sont accessibles que dans le bloc de code où elles ont été définies. C'est la plupart du temps largement suffisant, mais il peut arriver d'avoir besoin d'une variable soit accessible dans la totalité du programme. Par exemple une variable qui contiendrait une information de configuration régulièrement utilisé à des endroits très différents du code. Pour cela, il est possible d'utiliser une variable de portée globale, qui ne sera donc pas limitée de la même manière qu'une variable locale.

DéfinitionVariable globale en JavaScript

En JavaScript, on définit habituellement une variable avec let nameV = value.

En remplaçant le mot-clé let par le mot-clé var on change la portée de la variable.

La variable aura une portée globale et sera donc visible dans toute la partie du programme située après sa définition.

En Python le mot-clé global, suivi du nom de la variable indique que la variable à utiliser a été préalablement définie dans un autre bloc du programme et que c'est cette variable qu'il faut modifier.

Exemple

1
/** JavaScript : programme erroné */
2
const numberApple = 30
3
console.log(numberApple)
4
if(numberApple === 30)
5
{
6
  let enoughApple = true
7
  console.log(enoughApple)
8
}
9
console.log(enoughApple)
10

L’exécution de ce programme renvoie une erreur car la dernière instruction fait référence à une variable qui n'existe pas : enoughApple est locale au bloc if.

1
/** JavaScript  : programme corrigé */
2
const numberApple = 30
3
console.log(numberApple)
4
if(numberApple === 30)
5
{
6
  var enoughApple = true
7
  console.log(enoughApple)
8
}
9
console.log(enoughApple)
10

Si on remplace let par var dans la définition de enoughApple, il n'y a plus d'erreur car la variable est visible hors de la boucle if.

Ce code fonctionne, mais c'est une mauvaise pratique !

AttentionÀ consommer avec modération

Les variables globales sont source de nombreux problèmes.

En effet, une variable déclarée globale pourra être modifiée dans n'importe quelle autre partie du programme, ce qui peut provoquer des erreurs difficiles à détecter, comme l'écrasement inattendu de la valeur d'origine (on appelle cela un effet de bord).

Il est recommandé de ne jamais utiliser de variables globales par défaut, et de les utiliser avec parcimonie uniquement dans des cas bien identifiés.

Complément

Si on veut inverser la valeur de deux variables avec une fonction, on peut utiliser des variables globales (mais ce n'est pas une bonne façon de faire).

1
"""Python."""
2
fruit_1 = ' pear '
3
fruit_2 = ' pineapple '
4
5
def inversion():
6
    global fruit_1
7
    global fruit_2
8
    temp = fruit_2
9
    fruit_2 = fruit_1
10
    fruit_1 = temp
11
12
print(fruit_1 + fruit_2)
13
inversion()
14
print(fruit_1 + fruit_2)

Le programme affiche « pear pineapple » puis « pineapple pear ».

À retenir

Il est possible de créer des variables dont la portée s’étend au delà de leur bloc de définition, avec le mot-clé var en JavaScript et le mot-clé global en Python, il s'agit des variables globales. Cependant il est recommandé de les utiliser avec prudence car cela peut provoquer des résultats inattendus.