既出ネタですが、自分の頭を整理するためにアウトプット。
tapとは
ブロックにレシーバ自身を入れてブロックを実行。
戻り値にレシーバ自身を返す。
どんな動きか
レシーバーについて何かしたいけど,したあとそのレシーバーがほしい。
と言われてもよく分からなかったので、こちらの記事がとても分かりやすかったです。
とても分かりやすかった記事はこちら。
Ruby | tap がよく分かってなかったので基本を調べてみた
a = 1
a.tap { |i| i*3 }
put a
# => 1
このコードだと、aにいれた1をtapの中で3倍しているけど、aはなにも変わってない。
具体的になにに使えるか
こちらの記事にあった用途で、実際のプロジェクトで使いました。
Rubyのtapメソッドが便利なので紹介する
HogeModel.new(params).tap(&:save).id
saveメソッドはtrue,false返すので、そうじゃなくて保存したHogeModelオブジェクトを戻り値として欲しい時に、この1行で簡潔に書ける。
その他、ブロックの中でデバッグが便利だという話ですが、そこはまだ手を動かしてないので、自分で動作させたら追記します。