うーん、ここらへんよくわかんないな。外部から呼ばれるメソッドですよね?これ。 あと、メソッドでself返しまくってるのって何か理由あるんですかね? #6

Closed
weed opened this Issue Feb 12, 2013 · 5 comments

Comments

Projects
None yet
2 participants
Owner

weed commented Feb 12, 2013

No description provided.

Owner

weed commented Feb 12, 2013

メソッドチェーンができるように、してみたのですが、変ですかねえ?

Owner

weed commented Feb 12, 2013

実はiOSアプリを作る前はYahoo Pipesをバックエンドにしてました。で、アプリができたのでバックエンドも作ろうと思って、なるべくYahoo Pipesと同じように作りました。正直言うとメソッドチェーン大好きw

Collaborator

utwang commented Feb 12, 2013

ああ、なにかお手本にしたんですね。
確かに好みもありますか。

メソッドチェーンが悪いというよりは、
何でもかんでもオブジェクトの内容を更新してselfを返すのは、いかがなものかと思いました。

Feedクラスだけ見ると、feed.uniqとかfeed.filterとかのメソッドは、
インスタンス変数の@Feedを更新した後、selfを返しているように見えるんですけど。

使う側からすると、「インスタンスの値を参照するつもりが、実は変更(破壊)していた」
という意図しない副作用に困ると思うんですよね。
なので、不必要に更新するのではなく、加工した値を返すほうが
インスタンスを使い回せて使い勝手がいいかなと。
(appendやtruncateはメソッド名からして更新される印象ありますけどね。)

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr.map{ |x| x % 2  == 0 }    #=> [2, 4, 6, 8, 10]
p arr  #=> [2, 4, 6, 8, 10]

組込みクラスのArrayで例えるなら、mapをしたら、
元々のArrayが更新されてしまったという感じですかね。

Collaborator

utwang commented Feb 12, 2013

mapじゃなくてselectですね。↑

Owner

weed commented Feb 12, 2013

なるほどー。Ruby的にはunique!とかfilter!とかってほうがいいんですかね。
わかりやすいコードが良いと思います。

weed closed this Mar 11, 2013

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment