🖥
Ruby | tap がよく分かってなかったので基本を調べてみた
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オープンチャットもご利用ください。
公開日時
2016-08-20
Discussion