LoginSignup
21
12

More than 1 year has passed since last update.

Ruby | tap がよく分かってなかったので基本を調べてみた

Last updated at Posted at 2016-08-20

tap はメソッドの評価として、まるで書かれていないのと同じ結果になる。(破壊的変更をしないかぎり)
だけど その中で色々出来る という奴だ。

確認

手順1. 文字列を大文字に変える。

'abc'.upcase
# => "ABC"

tap を使わないケース。
当たり前だが、返り値は大文字になる。

手順2. 非破壊的変更

'abc'.tap { |string| string.upcase }
# => "abc"

tapで「文字列自身」に変更を加えているのにも関わらず、メソッドの返り値は変わらず小文字のままだ。
つまり、この書き方だと何も起こらない。

手順3. 文字列の出力

'abc'.tap { |string| puts string.upcase }
# ABC
# => "abc" 

これを見るとメソッドの返り値は変わっておらず小文字のままだけれど、tap自体は動作しており大文字が出力されている ことが分かる。

手順4. 破壊的変更

upcase! では破壊的を加えると、レシーバ自身が変わるため、戻り値も変わるようだ。

"abc".tap { |string| string.upcase! }
=> "ABC"

結論

  • tapは「メソッドの中で何かしたいけど、メソッド自体の評価は変えたくない」時に使う。
  • 破壊的変更を加えることも出来る

環境

  • ruby 2.0.0

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

21
12
4

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
21
12