Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
55
Help us understand the problem. What is going on with this article?
@setsuna82001

tap 面白いよ tap

既出ネタだけどがんばる。

tap かわいいよ tap

[Qiita]tap

etc..

Object # tap

Objectクラスに定義されているので、どのクラス(いかなるオブジェクト)でも使用できる!はず...。
リファレンス

キホン

{ }ブロック内で処理を実行し、処理結果に関わらずレシーバ自身を返すメソッドです。
以下3点が解れば大丈夫かと。

①空処理
self.tap{} 
# => self
②内部処理サンプル
self.tap{ puts "hoge" } 
# => self
# `hoge`が標準出力される
③戻り値が欲しい時
self.tap{ break :hoge } 
# => :hoge

何に使うの?

{ }ブロック内の処理結果に関わらず、レシーバ自身を返すので
デバッグ等の処理を行いながらメソッドチェーンできる。

ruby
( 1 .. 5 )
  .tap{|obj| puts obj.class}
  .to_a.tap{|obj| puts obj.class}
#=> [1, 2, 3, 4, 5]
出力結果
Range
Array

デバッグ用

途中途中で出力するのも面白い

object
  .tap{|obj| p obj }
  .method1.tap{|obj| p obj }
  .method2.tap{|obj| p obj }

これに関しては tapp っていうのを見つけた。
ソースコード@Github
つかいかた@Fc2

これはひどい

1行FizzBuzz
1.upto( 100 ){| num |
  text = ''
  num
    .tap{|n| text += 'fizz' if ( n%3==0 )}
    .tap{|n| text += 'buzz' if ( n%5==0 )}
    .tap{|n| text += n.to_s if text.empty? }
    .tap{ puts text }
}

考え方は一緒だった・・・。
[Qiita]TapでFizzBuzz

個人的な使い方とか

気が向いたら追加する予定……

その1

s = 'a'
s.tap{|t| t.sub!( 'a', 'b' )}
# => 'b'

当然だけど、変数sの中身は'b'に書き変わるよ。
sub!は破壊的メソッドだからね!←

その2

n = rand( 10 )
1 / n.tap{|t| break 1 if t.zero? }

0で除算するとモチロンZeroDivisionErrorが発生するよ!
エラーを防ぐためにtapで無理矢理01に書き換えちゃえ←

最後に一言

この記事、何番煎じ?^q^

55
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
setsuna82001
凡人ぷろぐらま

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
55
Help us understand the problem. What is going on with this article?