Variables globales
Une variable est globale si son nom commence par $. On peut en user depuis n’importe où dans un programme. Avant initialisation, une variable globale a la valeur spéciale nil (rien).
ruby> $foo
nil
ruby> $foo = 5
5
ruby> $foo
5
Les variables globales devraient être utilisées avec parcimonie. Elles sont dangereuses parce qu’on peut écrire dedans depuis n’importe où. Un abus des variables globales peut rendre la recherche des bugs difficile ; il tend aussi à indiquer que le programme n’a pas été bien pensé. À chaque fois que vous estimez nécessaire d’utiliser une variable globale, assurez vous de lui donner un nom explicite et qui ne risque pas d’être utilisé par inadvertance pour quelque chose d’autre ailleurs (l’appeler $foo comme dans l’exemple ci-dessus est probablement une mauvaise idée).
Un aspect sympathique des variables globales est qu’on peut les tracer ; vous pouvez définir une procédure qui sera invoquée à chaque fois que la valeur de la variable sera modifiée.
ruby> trace_var :$x, proc{print "$x vaut maintenant ", $x, "\n"}
nil
ruby> $x = 5
$x vaut maintenant 5
5
Quand une variable globale est utilisée pour fonctionner comme un trigger (une gâchette) qui invoque une procédure à chaque fois qu’elle change, on l’appelle parfois une variable active. Par exemple, cela sert pour tenir à jour l’affichage d’une interface graphique.
Il y a une collection de variables spéciales dont le nom est constitué d’un signe dollar ($) suivi d’un unique caractère. Par exemple, $$ contient le process id (identifiant de processus) de l’interprète ruby, et est en lecture seule. Voici les principales variables système et leur signification (voyez le manuel de référence de ruby pour les détails) :
| $! | Dernier message d’erreur |
| $@ | Lieu de l’erreur |
| $_ | Dernière chaîne lue par gets |
| $. | Numéro de la dernière ligne lue par l’interpréteur |
| $& | Dernière chaîne trouvée par regexp |
| $ | Dernière trouvaille de regexp, en tableau |
| $n | La nième trouvaille du dernier regexp (équivaut à [n]) |
| $= | Flag de sensibilité à la casse (minuscules/majuscules) des recherches par regexp |
| $/ | Séparateur des articles en entrée |
| ’$’ | Séparateur des articles en sortie |
| $0 | Le nom du script ruby |
| $* | Les arguments de la ligne de commande |
| $$ | L’identifiant du process de l’interpréteur |
| $? | Code retour du dernier processus fils |
Dans ce qui précède, $_ et $~ ont une portée locale. Leurs noms suggèrent qu’elles sont globales, mais elles sont beaucoup plus utiles en étant locales, et ces noms sont justifiés par des raisons historiques.
Précédent : GDU : Variables Suivant : GDU : Variables d’instance


