Icone_actu Actu Icone_creative Creative Icone_bdw Blog Du Webdesign Icone_emploi Emploi BDW

Devenez un ninja avec Ruby #2

by SANCHEZ Benjamin - le 01/12/2011

  • Partager l'article en 1 clic !

    N'hésitez pas à aider le BlogDuWebdesign
  • 0

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.

Introduction

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.

# Socle commun

## Se simplifier la vie sur irb

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

# Les tableaux

## parcourir le tableau en sens inverse

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"

## Pré-remplir un tableau


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}"}

## Insérer un objet dans un tableau

Comme dans beaucoup de langage, << est un alias de push.

tab = [] #=> []tab << "mon objet" #=>["mon objet"]

# Les hash

## Une nouvelle façon d'écrire nos hash.


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)

## Donner un comportement par défaut en cas d'absence de la clé recherchée

À 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).

 #Conclusion

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.


Devenez membre !

Rejoignez la communauté des créatifs du web !
- Partagez vos créations
- Gagnez en visibilité
- Créez votre blog facilement
> En savoir plus

Créer mon compte
  • Partager l'article en 1 clic !

    N'hésitez pas à aider le BlogDuWebdesign
  • 0
2 Auteur : SANCHEZ Benjamin voir son blog

Développeur autodidacte depuis quelques années, déjà, je suis le développeur du blog du webdesign, où mon rôle est de concretiser les différentes idées et maquettes.

2commentaires

  • F59e58f783e114ff34a333a7da3fcdf3
    Pierre-Adrien

    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"}

  • 2
    Benjamin SANCHEZ

    le 01/12/11| #2

    Oups, merci pour la correction.

Ecrire un commentaire