# Ruby/Variables et constantes

Voyons maintenant comment stocker des données en Ruby dans des variables puis dans des constantes.

## Variables

Vous pouvez associer une donnée, une information, à un identificateur, un mot. Vous pouvez ensuite accéder à cette donnée et la modifier. Cet identificateur est alors une variable.
Par exemple, nous pouvons associer l'entier 4 à l'identificateur x ; x est alors une variable dont la valeur est 4.
Lorsque vous vous apprêtez à utiliser une variable, vous devez l'initialiser, c'est-à-dire lui associer une valeur (un chiffre, une chaîne de caractères, etc.), sans quoi elle se verra assigner la valeur nil (c'est l'absence de valeur).
Pour assigner une valeur à une variable, on écrit l'identificateur, suivi du signe égal = et de la valeur à lui assigner. Cette opération est appelée instruction d'affectation, = est l'opérateur d'affectation.
nom, annee, langage sont des identificateurs, des noms de variables. Leurs valeurs respectives se trouvent du côté droit de l'affectation.
Un nom de variable ne doit pas débuter par un chiffre ou contenir d'accents !
Contrairement à d'autres langages, Ruby est typé dynamiquement : vous ne devez pas spécifier le type de vos variables à leur création, il est déduit lors de l'interprétation.
Voyons maintenant les différents types de variables utilisés dans notre exemple : il y a tout d’abord un entier (2006) facilement identifiable, les deux autres sont des chaînes de caractères, elles sont délimitées par des guillemets " ".
Le typage dynamique nous permet donc d'écrire :
Dans un premier temps, nous utiliserons également trois autres types de variables :
* les flottants (nombres à virgule flottante) : ce sont des décimaux. La virgule est matérialisée par un point. Pour les nombres de la forme 0.X, le 0 ne peut être omis
* les caractères : n’importe quel caractère présent sur votre clavier, il est entouré d'apostrophes ' '
* les booléens (ou valeurs booléennes) : il en existe deux types : true et false, qui correspondent respectivement à vrai et à faux. On peut faire le rapprochement avec les deux états ON et OFF d'un interrupteur. En fait, pour placer un booléen à faux on peut lui assigner deux valeurs : false ou nil (absence de valeur). Toute autre valeur équivaut à true, tout ceci nous servira dans quelques chapitres pour les conditions et les boucles.
Déclarons par exemple ces quelques autres variables :
Pour tester ce code, ajoutons cette ligne :
Nous venons d’utiliser ce qui s’appelle une fonction. Un chapitre suivant y est consacré donc on ne s'y attardera pas davantage, sachez juste que print permet d'afficher ses paramètres sur la sortie standard (la console). On peut lui passer plusieurs arguments, séparés par des virgules, entre parenthèses ou non.
On aurait aussi très bien pu utiliser la méthode puts, qui aurait produit le même résultat avec un retour à la ligne.
Le code suivant est donc équivalent :
Ainsi que celui-ci :
Une autre façon de faire serait d'écrire le nom de la variable directement dans la chaîne de caractères. Ainsi on ne passerait qu'un seul paramètre à print. Voici un autre exemple :
En effet, #{variable} est remplacé (lorsqu’il est placé entre guillemets) par la valeur de la variable en question : ici #{note} est remplacé par 14.7.

### Récupérer une saisie au clavier

Les fonctions puts et print, que nous avons déjà rencontrées plus tôt, sont capables d'afficher une chaîne de caractères sur la sortie standard (console).
Pour effectuer l'opération inverse, c'est-à-dire saisir une chaîne de caractères sur l'entrée standard (lorsque vous tapez quelque chose au clavier), utilisez la méthode gets et placez ce qu'elle reçoit dans une variable. Pour ce faire, placez simplement gets du côté droit de l'affectation :
Ce que vous avez saisi au clavier avant d'appuyer sur la touche Entrée est désigné par gets, cette instruction : nom = gets place cette saisie dans la variable nom.
Fermons cette parenthèse et revenons à nos variables.

### Variables locales

Un nom de variable locale débute par une lettre minuscule (comme toutes les variables que nous avons utilisées dans nos exemples jusque-là) ou par un underscore _ : monOrdi et _tonOrdi sont donc des noms de variables locales corrects.
Par défaut, les variables sont locales. Leur portée est limitée au bloc dans lequel elles sont déclarées. Ce qui veut dire qu'une variable locale déclarée dans un bloc n’est pas définie en dehors. Cela peut être à l'intérieur d'une classe, d'une méthode, d'une boucle, d'une condition ou encore l’ensemble du programme. Jusque là, nous n'avons utilisé que des variables locales définies dans l’ensemble du programme.
Contrairement aux variables globales, elles ne possèdent pas la valeur nil avant initialisation.

### Variables globales

Les variables globales sont des variables dont la valeur est accessible n’importe où dans le programme. Leur nom commence par le symbole dollar : $ Déclarons par exemple cette variable globale :
Quel que soit l'endroit où l’on déclare $glob, on pourra toujours y faire référence. Il existe quelques variables globales dont le nom est réservé. En voici quelques unes (utiles pour suivre le cheminement d'un script ou pour localiser des erreurs par exemple) :
* $_ désigne la dernière chaîne lue par gets ;
* $@ désigne le lieu de l'erreur (le cas échéant) ;
* $. désigne la dernière ligne lue par l'interpréteur ;
* $* désigne les arguments de la ligne de commande.
Vous verrez à l'usage qu’il est dangereux d'abuser des variables globales (sauf des 4 ci-dessus).

## Constantes

Les constantes remplissent la même fonction que les variables, à la différence près que vous ne devez pas modifier leur valeur tout au long du programme. Si vous le faites, vous n'obtiendrez pas d'erreur, mais un simple avertissement. Espérons que cela suffise à vous décourager.
L'identificateur d'une constante débute par une majuscule. Vous pouvez également les écrire intégralement en majuscules pour les repérer plus facilement.
Voici une déclaration de constante :
| Structure d'un programme | Opérateurs |