Ruby : Bonnes pratiques
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