3 trucs pour simplifier son code Ruby

Pour me faire la main avec Ruby, j’ai écrit un clone du célèbre jeu Sokoban. J’ai tiré des sources 3 trucs pratiques pour se simplifier la vie et rendre son code plus lisible.
Vous pouvez télécharger le jeu avec les sources sur GitHub (attention, pas d’interface graphique pour le moment, juste la console en mode texte). Pour l’installer, ou savoir comment jouer, n’hésitez pas à consulter le wiki.

1. Marquer l’intention grâce au if en ligne

version 1

if condition == A
  membre = une_valeur
elsif condition == B
  membre = autre_valeur
end

version 2

membre = une_valeur if condition == A
membre = autre_valeur if condition == B

En plus de la concision, la version 2 présente l’avantage d’augmenter la visibilité de l’action/intention
en la plaçant au début de la ligne, là où on aura le plus de chance de la lire.

2. Marquer l’intention grâce à include?

version 1

if hash[:type] == val1 or hash[:type] == val2 or hash[:type] == val3
  faire_ceci
end

version 2

if [val1, val2, val3].include?(hash[:type])
  faire_ceci
end

En plaçant les valeurs en début de ligne et en évitant la redondance, la version 2 augmente la lisibilité.

3. Utiliser le retour par défaut des méthodes

Un exemple concret tiré directement des sources de {RSokoban}[https://github.com/lkdjiin/RSokoban] :

version 1

def crate?(x, y)
  box = what_is_on(x, y)
  if box == CRATE or box == CRATE_ON_STORAGE
    return true
  else
    return false
  end
end

version 2

def crate?(x, y)
  box = what_is_on(x, y)
  box == CRATE or box == CRATE_ON_STORAGE
end

La version 2 tire partie du fait, que toute méthode, dans Ruby, renvoie obligatoirement une valeur.
Sans return() explicite, c’est la dernière évaluation qui est renvoyée.

Publicités

, ,

  1. #1 par Michel Pigassou le 07/12/2011 - 14:53

    Attention avec or utilisé à la place de || :
    http://avdi.org/devblog/2010/08/02/using-and-and-or-in-ruby/

  2. #2 par Thibaut Assus le 08/12/2011 - 10:41

    Merci pour ce blogpost en français !

    Petite remarque :
    La version 1 de ton premier truc n’est pas équivalent au 2.
    dans le premier cas, condition == B n’est jamais testé si condition == A.
    dans le 2e, condition == B est toujours testé, même si condition == A.

    => tant que tu as des tests, tu peux toujours refactor comme ça si ça pète pas tes tests,
    mais si tu n’en as pas, il vaut mieux faire attention 😉

  3. #3 par undeveloppeur le 04/01/2012 - 19:08

    @Michel et @Thibaut, merci pour ces précisions et bonne année !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :