Découvrez quelques facettes cachées du Ruby avec cette série d'articles, et devenez un vrai développeur ninja. Pour ce second article, nous allons nous pencher sur les différents aspects des Hash et des Array.
Pour bien commencer, présentons les protagonistes.
Les tableaux sont semblables aux tableaux de presque tous les langages et s'écrivent comme suit :
tab = ["bonjour", "hello", "hola"]
On accède au contenu de la même manière que pour les autres langages aussi :
tab[1] #=> "hello"
Les Hash sont des tableaux associatifs. Certains langages ne font pas de différence entre les tableaux indexées et les associatifs, mais Ruby si. Ils se créent de cette façon : hash = {:fr => "bonjour", :en => "hello", :es => "hola"}. Là aussi, on accède au contenu de manière standard: hash[:fr] => "bonjour"
Maintenant que nous savons de quoi nous parlons, posons quelques petits trucs, connus ou pas, à propos des tableaux et des hash.
Avec Active Record et Rails, il vous est sûrement déjà arrivé de remplir l'écran/historique dans irb de l'affichage d'un tableau. Pour éviter ça, il est possible de modifier la méthode Array#inspect, pour lui faire afficher à la place uniquement le nombre d'éléments si il dépasse un certain seuil.
class Array
alias inspect_old inspect
def inspect
if self.length > 10
"[...#{self.length} elements...]"
else
inspect_old
end
end
end
Libre à vous d'étendre aux hash, ou de modifier, selon les besoins.
Il est aussi possible de convertir les Array et les hash (entre autre) en un affichage plus sympa simplement en les précédant e 'y'.
y {:fr => "bonjour", :en => "hello", :es => "hola"}
#=>
---
:fr: bonjour
:en: hello
:es: hola
Donner un index négatif au tableau permet de rechercher un objet depuis la fin du tableau et non le début. tab[-1] donnera donc le dernier élément du tableau.
["a", "b", "c", "d", "e", "f"][-2] #=> "e"
Quand nous créons notre tableau depuis sa classe, il est possible de lui donner une taille de départ, voir de le pré-remplir.
Array.new(2) #=> [nil, nil]
Array.new(2, "bonjour") #=> ["bonjour","bonjour"]
Array.new(4){|i| "ce texte est à l'index #{i}"}
Comme dans beaucoup de langage, << est un alias de push.
tab = [] #=> []tab << "mon objet" #=>["mon objet"]
Depuis Ruby 1.9, il est possible d'écrire ce hash:
{:fr => "bonjour", :en => "hello", :es => "hola"}
comme cela, comme en Javascript.
{fr:"bonjour", en:"hello", es:"hola"}
(les clés seront des symboles, et non des string comme en js, par contre)
À la création, les Hash peuvent accepter un block, qui vas définir le comportement en cas de clé manquante.
hash = Hash.new{|h, k| ... } # Le h est le hash lui même, et k la clé demandée.
De cette manière, nous pouvons définir un retour d'erreur personnalisé, un failback vers une valeur par défaut, ou bien des choses étonnantes comme une nouvelle façon d'écrire des dates, ou encore un cache pour données web ! (pour ces derniers exemples, je vous recommande cet excellent article. Lisez les commentaires aussi, ils sont vraiment intéressants).

Ces quelques astuces ne vous permettrons pas de briller en société (quoi que...), et vous connaissiez certainement la plupart, ils font partie des fonctions "de base" des Array et des Hash. Ils sont donc d'autant plus importants à bien maîtriser, car leur utilisation sera souvent naturelle, donc pas forcément commentée.
Rejoignez la communauté des créatifs du web !
- Partagez vos créations
- Gagnez en visibilité
- Créez votre blog facilement
> En savoir plus
le 01/12/11| #1
Sympa ces astuces ! Concernant les tableaux, rien sur le slicing ? C'est pourtant bien pratique, je suis nouveau en Ruby/Rails mais j'utilisais ça avec plaisir en Python :)
Sinon, une petite coquille, un ":" de trop semble s'être glissé dans cette ligne : {fr:"bonjour", en:"hello", :es:"hola"}