メソッド連鎖(Method chaining)パターン

あまり知られていないかもしれませんが、メソッド連鎖(Method chaining) というデザインパターンがあります。 これは別名 名前付きパラメーターイディオム(named parameter idiom) とも呼ばれ、 パターンというほど大したものではありませんが、個人的には好きな書き方です。
そこで今回はそのメソッド連鎖パターンについて紹介したいと思います。



メソッド連鎖パターンではオブジェクト指向言語で使われるパターンです。 ここでは C++ のサンプルで説明します。

セッターを書く場合、通常、戻り値を void にして、何も返さないことが多いと思います。 メソッド連鎖パターンでは、そこで自身の参照を返します


method_chaining.cpp :
class Person
{
  std::string m_name;
  int m_age;

public:
  Person() :m_age(0) {}
  
  // Getter
  const std::string &name() const { return m_name; }
  int age() const { return m_age; }
  
  // Setter
  Person &name(const std::string &name)
  {
    m_name = name;
    return *this;
  }
  Person &age(int age)
  {
    m_age = age;
    return *this;
  }
  
};
サンプルではセッターを名詞として命名していますが、 SetXxxx 形式でもかまいません。


自身の参照を返すセッターを作ると何が嬉しいかというと、セッターのメソッドをつなげて書くことができるようになります。
  Person person;
  cout << person.name("Peter").age(21) << endl;  // {"Peter"(21)}
メソッドを連鎖させて書くとちょっと見やすくなります。
逆にいうと、ただそれだけです。 好みが分かれるところですし、大したメリットもありませんが、 必要なことも *this 返すだけです。 ちょっとやっておくのもいいのではないでしょうか。



今回、 C++ のサンプルで紹介しましたが、他の言語のサンプルもたくさんあります。 ただ、 C++ と違って、C# のプロパティーや Ruby のように person.age = 21 などと書くこと多い言語で、わざわざやるほどのことでもないかなとは思います。


関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
43位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。