はっさんブログ

やってしまったことを書きます

【Ruby】Object#tapの使いどころ

参考になったらシェアいただけると幸いです!

背景

tapは語られる

qiita.com

私はtapをスコープを狭める目的で使うことが多いです。

# before
user = User.new
user.name = 'Taro'
user.age  = 20

# after
user = User.new.tap do |u|
  u.name = 'Taro'
  u.age  = 20
end

様々な場所で、様々な人に

TapがRubyの新たな制御構造の世界を開く

tapは主としてメソッドチェーンにおける途中経過を覗き見るために使われる

それはpry-byebugでやることが多いですね。

avg = [56, 87, 49, 75, 90, 63, 65].tap { |sco| break sco.inject(:+) / sco.size } # => 69

なるほど

tapを存在演算子として使う

以下からもう難しい

Railsのコード内での使いどころ

tap かっこいい!と思うとき

オブジェクトを呼び出して途中に処理を挟むも、最後にオブジェクトを返したい時

たまにありませんか?

# before
def hoge
  apple = Fruit.find_by(name: 'apple')
  puts 'bad apple!' if apple.rotten?

  apple # 結局最後はオブジェクトを返したい
end
# after
def hoge
  Fruit.find_by(name: 'apple').tap do |apple|
    puts 'bad apple!' if apple.rotten?
  end
end
#=> 戻り値がレシーバー自身なため、appleが返ってくる

def hoge
  Fruit.find_by(name: 'apple').tap { |apple| puts 'bad apple!' if apple.rotten? }
end
# => apple
# 1行でもかける

tapという単語自体、何を表しているのか分かりづらいので乱用はやめた方が良いです。

tapの魅力はこれぐらい。

他のRuby記事

www.hassansan.me