23181


いまtwitterのようなサイトを作っています。

他の人のコードを参考にしていると、`show` メソッドの所に

[code]

    @tweets = @user.tweets.paginate(page: params[:page]).order('created_at DESC')
    
[/code]

というコードがありました。

`tweets.paginate(page: params[:page]).order('created_at DESC')`
のように機能させたいコードを何個でも `.xxx.yyy`
のように連続して書けるのですか？そして１つずつ機能をもつコードを独立させて書かないで、連続させて書くメリットとは何ですか？


CC BY-SA 3.0
2016-03-12T07:34:43.650
23051
2016-03-16T00:58:34.947
2016-03-12T11:17:14.583
76
14754
question
ruby
メソッドの書き方についての質問


Ruby では

[code]

    str = " abc "
    str2 = str.strip #=> "abc"
    str2.length #=> 3
    
[/code]

これを

[code]

    "abc".trim.length #=> 3
    
[/code]

と書くことが出来ます。`"abc".strip`の戻り値は`String`なので、`String`の`#length`メソッドを続けて書くことが出来ます。

冗長な括弧を付けると

[code]

    ("abc".trim).length
    
[/code]

になります。

このようにメソッドをつなげて書く手法はメソッドチェインと呼ばれます。これができるかどうかは言語仕様次第です。

どのようなメソッドが書けるかは、一つ前のメソッドの戻り値次第です。

上記の例だと

[code]

    " abc ".length.strip
    
[/code]

とメソッドを逆にすると`NoMethodError`になります。`" abc ".length`
の戻り値は`Fixnum`(数値)で、`Fixnum`には`#strip`というメソッドはないからです


CC BY-SA 3.0
2016-03-16T00:58:34.947
23181
2016-03-16T00:58:34.947
5793
23051
answer