見慣れなかったメソッドの使い方

アバター
spaaaark・∀・
記事: 66
登録日時: 12年前
住所: 埼玉
連絡を取る:

見慣れなかったメソッドの使い方

投稿記事 by spaaaark・∀・ » 10年前

ふと最近Androidを始めて、基礎知識をいろいろ調べていくうちに、今まで見慣れなかった構文が出てきた。

CODE:

Hoge Fuga = new ClassName().Set(A).Set(B).Set(C).Set(D).build();
初めに見たときは全く成り立ちが分からなかったのだが、文献のソースを見れば成り立ちはすぐわかった。

CODE:

class ClassName{
  public ClassName Set(){
    /*処理*/
    return this;
  }
  public Hoge build(){
    return new Hoge(/*クラスで組み立てた引数*/);
  }
};
すごい初歩的なことなのだが、個人的にちょっと面白いなと思ったのでメモを兼ねて日記に残してみた。
参考文献:http://qiita.com/kojionilk/items/1432a50618a2defc126e
あと実際にテストもしてみたよ。 http://ideone.com/odEGCO
オフトピック
emplace_back()の使いどころこれで合ってるっけな…。
ところで皆さんお久しぶりです。忙しくてなかなか顔出せなかったのです(´・ω・`)

YuO
記事: 947
登録日時: 14年前

Re: 見慣れなかったメソッドの使い方

投稿記事 by YuO » 10年前

メソッドチェーンですね。
継承と少し相性が悪いので,それだけは注意が必要です。

C++のoperator <<などでよく問題になるのですが,一度静的型がベースクラスになると,派生クラスのメソッドを呼べなくなります。
C++やJavaは共変の戻り値によるオーバーライドを許すので,自身の型を返すメソッド/関数でオーバーライドする必要があります。
オフトピック
C#は共変の戻り値によるオーバーライドを許さないので,newで継承関係をぶった切る,というようなことをする必要が出て来てしまいます……

アバター
nullptr
記事: 239
登録日時: 13年前

Re: 見慣れなかったメソッドの使い方

投稿記事 by nullptr » 10年前

javascriptとかメソッドチェーンとコールバックの嵐になるの見てると吐き気がしてくるので最終的にはそんなの要らなかったんや!と思う。

ISLe
記事: 2650
登録日時: 14年前

Re: 見慣れなかったメソッドの使い方

投稿記事 by ISLe » 10年前

nullptr さんが書きました:javascriptとかメソッドチェーンとコールバックの嵐になるの見てると吐き気がしてくるので最終的にはそんなの要らなかったんや!と思う。
でも、いまのC++ってそこらへん目指してるんじゃないだろか。

アバター
nullptr
記事: 239
登録日時: 13年前

Re: 見慣れなかったメソッドの使い方

投稿記事 by nullptr » 10年前

ISLe さんが書きました:
nullptr さんが書きました:javascriptとかメソッドチェーンとコールバックの嵐になるの見てると吐き気がしてくるので最終的にはそんなの要らなかったんや!と思う。
でも、いまのC++ってそこらへん目指してるんじゃないだろか。
目指してるか、はわかりませんが、言語機能がそういうコードに向いた方向に進んでるのは確かですね。