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 »