Nous allons étudier dans cette section la classe Hash.
Les hachages ne sont rien d'autre que des tableaux spécialisés. Au lieu de n'accepter que des indices représentés par des nombres entiers (comme dans mon_tableau[3]), les hachages acceptent n'importe quel objet comme «index». Par exemple, vous pouvez écrire mon_hachage["une_chaine_de_caractères"].
Supposons que nous voulons enregistrer des informations concernant un ami. Nous pourrions utiliser un tableau, comme ceci:
ami = [ "Jean-Paul", "Goret", "Rue de l'église, 26", "Houtsiplou", "Liège" ]
Évidemment, ceci fonctionnera. Mais nous allons devoir nous souvenir que ami[0] pointe vers le prénom, ami[1] vers le nom de famille, et ainsi de suite. Ceci peut se révéler fort compliqué par la suite.
C'est exactement le type de problème qu'un hachage peut résoudre. Voici la définition d'un hachage en Ruby:
ami = { "prénom" => "Jean-Paul", "nom de famille" => "Goret", "adresse" => "Rue de l'église, 26", "ville" => "Houtsiplou", "province" => "Liège" }
Avertissement | |
---|---|
Remarquez bien qu'il faut utiliser des accolades pour créer un hachage. Les tableaux, quant à eux, se définissent par l'intermédiaire de crochets. |
Comme les tableaux, il est tout à fait possible de rajouter par la suite des champs à un hachage:
ami["pays"] = "Belgique"
Comme les hachages n'utilisent pas que des indices numériques, on utilise le mot clef (en anglais: «key») pour les identifier. Un objet représenté à travers une clef est appelé valeur (en anglais: «value»).
Donc, dans l'exemple précédent, «prénom», «nom de famille» et «pays» sont des clefs. Leurs valeurs respectives sont «Jean-Paul», «Goret» et «Belgique».
Évidemment, les hachages possèdent des itérateurs. En voici quelques uns:
A l'instar des tableaux, les hachages ont également une méthode each. Cependant, elle nous donne à la fois la clef et la valeur de l'entrée. En voici un exemple:
amis.each do |clef, valeur| puts clef + " => " + valeur end
Et voici son résultat à l'écran:
ville => Houtsiplou nom de famille => Goret pays => Belgique adresse => Rue de l'église, 26 province => Liège prénom => Jean-Paul
Ceci illustre un des plus gros défauts des hachages. Les données contenues dans un hachage ne sont pas classées dans un ordre particulier. Comment Ruby pourrait-il savoir que «prénom» doit venir avant «adresse»?
Le meilleur moyen de résoudre ce type de problème est de créer sa propre classe. Ruby est excellent pour ça. Mais avant d'étudier cette technique, il y a encore quelques notions que nous devons voir. Le prochain chapitre vous expliquera comment créer vos propres classes et méthodes.
Note | |
---|---|
Hash#each_pair est un synonyme de Hash#each |
Le nom de cette méthode nous dit tout. Elle permet de parcourir toutes les clefs d'un hachage, un peu de la même façon que Hash#each:
>> ami.each_key do |clef| ?> puts clef >> end ville nom de famille pays adresse province prénom