Ruby : Bonnes pratiques

21 juin 2025

Itération & alteration sur liste

Anti-pattern

table = ["Romain", "Camille","Pierre"]  
nouvelle_table = []  
table.each {|prenom| nouvelle_table.push prenom.capitalize }

Pattern

Etape 1

table = ["Romain", "Camille","Pierre"]  
nouvelle_table = table.map {|prenom| prenom.capitalize }  

Etape 2

table = ["Romain", "Camille","Pierre"]  
table.map!  {|prenom| prenom.capitalize }  
 

Etape 3

table = ["Romain", "Camille","Pierre"]  
table.map!(&:capitalize)  

Affectation

Anti-pattern

un = 1   
deux = 2  
trois = 3 

Pattern

une,deux,trois = 1,2,3  

Hash et valeur par défaut

Anti-pattern

hash = { un: "un", deux: "deux", trois: "trois" }  
valeur = hash[:quatre] ? hash[:quatre] : "non défini"  

Pattern

Etape 1

hash = { un: "un", deux: "deux", trois: "trois" }  
valeur  = hash[:quatre] || 4  
 

Etape 2

valeur = hash.fetch(:quatre, "non défini")  

Etape 3

hash = Hash.new("non défini").merge({un: "un", deux: "deux", trois: "trois"})  
valeur  = hash[:quatre]  

Boolean Getter

Anti-pattern

def role(admin)  
  if admin == "admin"  
    return true  
  else  
    return false  
  end  
end  

Pattern

Etape 1 : ternaire

def role(admin)  
  admin == "admin" ? true : false  
end  

Etape 2

def role(admin)  
  (admin == "admin")  
end  

Méthode & exception catching

Anti-pattern

def x  
  begin  
    raise "boom"  
  rescue => e  
    puts e.message  
  end  
end  

Pattern

def x  
  raise "boom"  
rescue => e  
  puts e.message  
end  

Liste params by Keyword

Anti-pattern

def convert(tableau)  
  tableau.map! do |item|  
    item.to_s(2)  
  end  
end 

Pattern

def convert(*args)  
  args.map { |item| item.to_s(2)) }  
end  

Romain GEORGES

Open Source evangelist & Ruby enthousiast