Ruby idiomatique #1

Un truc vraiment bien avec le pair-programming c’est l’échange entre les deux pairs. J’en fais depuis peu mais cela m’a permis de me rendre compte que tout un tas de choses qui me semblent naturelles en Ruby ne le sont pas forcément pour tout le monde. Cela a surtout à voir avec le fait que cela fait maintenant quelques années (huit ans déjà !) que je programme dans ce langage et que je lis pas mal de littérature sur le sujet.

Du coup ça m’a donné envie d’essayer de partager quelques petits trucs et astuces simples qui permettent d’écrire du code Ruby ressemblant à du Ruby et pas du C ou un autre langage ;)

Je vais tenter d’écrire un billet pour chaque petite chose de ce style que je vois et qui pourrait donc profiter à tout le monde.

Utiliser #map

Quand on découvre les itérateurs et les blocks Ruby pour la première fois c’est un peu magique et pour peu qu’on s’arrête à #each (le premier qu’on apprend), on passe à côté de tout un tas de choses intéressantes et efficaces.

Par exemple j’ai vu ce genre de code à plusieurs reprise :

def values_to_strings(array)  
  new_array = []
  array.each do |value|
    new_array << value.to_s
  end
  new_array
end  

On a ici une méthode qui convertit les objets contenus dans un tableau en chaines de caractères dans un nouveau tableau et qui renvoie ce dernier.

Bien que cela fonctionne, ce n’est absolument pas efficace et c’est trop long !
On peut réécrire la même chose de manière très simple comme ceci :

def values_to_strings(array)  
  array.map do |value|
    value.to_s
  end
end  

La méthode #map va itérer tout comme #each mais elle va utiliser chaque valeur renvoyée pour en faire un nouveau tableau. On verra dans un prochain billet comment écrire de manière encore plus efficace cette méthode #values_to_strings.