Ruby - Utiliser les blocs pour faire du refactoring
Suivant le(s) langage(s) que vous pratiquiez avant de vous mettre à Ruby, les blocs peuvent vous sembler plus ou moins obscurs. Voici un exemple d’utilisation possible, lorsque vous faites du refactoring.
Prenons le programme suivant:
class Bidule
def un
puts 'Début de la méthode un'
puts 'Au milieu de la méthode un'
puts 'Fin de la méthode un'
end
def deux
puts 'Début de la méthode deux'
puts 'Au milieu de la méthode deux'
puts 'Fin de la méthode deux'
end
end
bidule = Bidule.new
bidule.un
bidule.deuxVoici ce que ça donne quand on le lance:
$ ruby test1.rb
Début de la méthode un
Au milieu de la méthode un
Fin de la méthode un
Début de la méthode deux
Au milieu de la méthode deux
Fin de la méthode deuxLe problème de la classe Bidule est que ses méthodes un et deux
sont identiques (ou presque). On aura donc intérêt à extraire une
méthode helper:
class Bidule
def un
helper('un')
end
def deux
helper('deux')
end
private
def helper(argument)
puts "Début de la méthode #{argument}"
puts "Au milieu de la méthode #{argument}"
puts "Fin de la méthode #{argument}"
end
endVoilà, c’était du refactoring classique.
Maintenant imaginons que la classe Bidule soit ainsi:
class Bidule
def un
puts 'Début de la méthode un'
puts 'Au milieu de la méthode un'
puts 'Fin de la méthode un'
end
def deux
puts 'Début de la méthode deux'
puts 'Ceci est le milieu de la méthode deux'
puts 'Fin de la méthode deux'
end
endVous avez remarqué la différence:
def un
#
puts 'Au milieu de la méthode un'
#
end
def deux
#
puts 'Ceci est le milieu de la méthode deux'
#
endCette fois les méthodes un et deux se distinguent un peu plus, bien
que la logique reste identique. On peux donc tirer avantage des blocs:
class Bidule
def un
helper('un') { puts 'Au milieu de la méthode un' }
end
def deux
helper('deux') do
puts 'Ceci est le milieu de la méthode deux'
end
end
private
def helper(argument, &block)
puts "Début de la méthode #{argument}"
block.call
puts "Fin de la méthode #{argument}"
end
endÀ demain.
/ / / / / / / / / /
« Vim - Débarassez vous des buffers inutilisés ---//---
Ruby - Utiliser les blocs pour faire du refactoring - partie 2 »