LoginSignup
1
1

More than 3 years have passed since last update.

yield_selfでシンプルなメソッドチェーンを書く方法

Posted at

概要

コードレビューをしていて、自分の知らない記法(yield_self)にあって、便利だと思ったので紹介します。

yield_selfとは

レシーバをブロックパラメータとして取ることができ、返り値としてブロック内の実行の結果を返します。似たような挙動をするものに、tapというメソッドがあります。
tapはレシーバをブロックパラメータとして取るという点では同じですが、返り値としてはレシーバの値をそのまま返すという点で異なっています。

返り値として、ブロックの実行結果を返すことから、以下のようなコードをシンプルに書くことができます。

例: user_idのリストを複数のメソッドで絞り込んで行きたいケース

hoge_user_ids = fetch_hoge_user_ids(user_ids)
fuga_user_ids = fetch_fuga_user_ids(hoge_user_ids)

yield_selfを使うことで、以下のようなシンプルなメソッドチェーンで書き直すことができます。

some_user_ids
  .yield_self{|user_ids| fetch_hoge_user_ids(user_ids) }
  .yield_self{|user_ids| fetch_fuga_user_ids(user_ids) }

このようにただ引数として渡すために変数に代入する手間を省くことができます。

参考

tapyield_selfの違いについてシンプルに紹介されています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1