tapきらい

More than 1 year has passed since last update.


ごめん。好き

cf. http://qiita.com/annyamonnya/items/04078bc38c57059e5dd2


tapを愛する理由


  1. すべてのオブジェクトに生えている


    • tapとはrubyのobjectクラスに紐づくメソッド

    • すべての(Stringみたいな組み込み系及び自分で作成したものもそのはず)クラスはobjectクラスを継承している

    • 継承されたクラスに定義されていたメソッドは、継承したクラスで呼び出すことができる

    • Rubyで扱う値とかは一部を除きすべて何かしらのクラスから生成されている


      • 一部(Stringとか)はnewしてないだけで実際Classから生成されているのかな?よくわからない。



    • 以上から、tapメソッド(正確にはインスタンスメソッドなんだけど)はすべてのインスタンスから呼び出すことができる。




  2. コードがきれいになる




  3. メソッドチェーンを繋げられる


    • 長過ぎるものはNGですが、メソッドのチェーンでつなげたほうが統一感があるので好きです。

    • 無理やり例を作れば次の様になります。いえ、確かに途中で説明変数としておいたほうが良さそうですが、、、


      • bad:a = A.hogehoge.fugafuga.fugofugo, b = func(a).fugefugo.fango

      • good:b = A.hogehoge.fugafuga.fugofugo.tap { |a| func(a) }.fugefugo.fango






tapが嫌いな理由

操作が抽象的

- 最初何言ってんのかわかりませんでした。今でも説明がうまくいくにはどうしたらよいかわからない。慣れれば素敵なメソッドですね。


補足:数学っぽく書くとtapってこういう感じですね

$X=\rm{(ObjectClassから生成されるオブジェクト全体)}$とする。このとき$\rm{tap}$は$\rm{tap}:X\rightarrow X$を満たす写像として定義される。

- ただし、(これがプログラミングで言う関数の面白いところなのですが、)そのふるまいは逐一定義するので一定じゃないです。