メソッドの連結

前置き無しでいきなり本題。
Rubyでは以下のようにメソッドを連結して書くことができます。

#!/usr/bin/ruby

str = "hello world"
length = str.reverse().length()

#しょぼいサンプルですが勘弁をw

僕は本格的にオブジェクト指向プログラミングをやり始めたのはRubyからなので、
この書き方を知ったときはすごく便利だなー、とか思っていたのです。
#昔C++,PHPをなんちゃってオブジェクト指向で触ったことはありますが。


なんでこんな話をするかというと、
最近会社でC++を触っていて、「Ruby見たいな書き方はできるんかなー」と思ったので。
そこで、以下のようなサンプルを書いてみると、

#include <sstream>

using namespace std;

int main(void)
{
  int length;
  string str="hello world";

  length = str.substr(6).length();

  return 0;
}

あっさりできちゃいましたw
Java,Perl,PHP..etcではどうなんでしょうか?
普通なんですかね?


メソッドの連結を使わずにいったん変数に代入する方法だと

#include <sstream>

using namespace std;

int main(void)
{
  int length;
  string str="hello world";

  //use assignment
  string substr;
  substr = str.substr(6);
  length = substr.length();
  //

  return 0;
}

これだと余計な変数を使うことになるし、ソースが長くなる。
ソースを読むときにも余計な変数のことを意識しなくちゃならんので、イケてないと思います。


なので、僕はなるべくメソッドの連結を使っています。
でもメソッドの連結には思いもよらない弊害があるかも。
メモリとか、速度とか。
今のところ、演算子の優先度や結合規則による弊害はありそうってことぐらいしか思いつきません。
#あとは使いすぎると横に長いプログラムになるw


ではでは。