Usando o método tap em Ruby

Dicas - 15/Mar/2020 - por Henrique Morato

Uma das características mais úteis do Ruby é a possibilidade de encadear chamadas de métodos em sequência para manipular dados, por exemplo:

[4, 1, 5, 2, 3].sort
               .map { |n| n * 3 }
               .select { |n| n.even? }
=> [6, 12]

Agora, usando tap dentro do encadeamento de métodos, note como podemos agir sobre o objeto sem afetar o resultado:

[4, 1, 5, 2, 3].tap{ |n| puts "Array: #{n}" }
               .sort
               .map { |n| n * 3 }
               .select { |n| n.even? }
=> Array: [4, 1, 5, 2, 3]
=> [6, 12]

Isso acontece porque o tap sempre retorna o objeto no qual estamos agindo, independente se ele está sendo modificado ou não no bloco tap. Um exemplo mais próximo de uso real desse método poderia ser:

User.new.tap do |user|
  user.build_profile
  user.process_credit_card
  user.send_confirmation_email
end

Referências

  • https://ruby-doc.org/core-2.7.0/Object.html#method-i-tap
  • https://medium.com/aviabird/ruby-tap-that-method-90c8a801fd6a
  • https://www.assertnotmagic.com/2017/12/29/tap-and-yield-self/
Foto de perfil do autor
Henrique Morato

Dev