LoginSignup
3
3

More than 5 years have passed since last update.

戻り値が複数ある時、あと戻り値がイミディエイタリな時

Last updated at Posted at 2014-05-15
  • 戻り値が複数ある時 ⇒ 戻り値オブジェクト
  • 戻り値がimmediatelyな時 ⇒ メッセージ

 オブジェクト指向上の別物を匿名関数を引数にするという一つの方法で実装します。

//これを
Tuple<int, string> hogefunction(int arg) {...}
//こう
bool hogefunction(int arg, Action<int, string> setter) {...}
//これを
foreach (var result in hoge.hagefunc(k)) Debug.Print(result);
//こう
hoge.hagefunc(arg, (result) =>  Debug.Print(result));

 なので次のような実装で「副作用が~」とか「生存期間が~」と言う話題になりますよね?

errorflg = hogefunction(arg, ( k , j ) => {
    effectCounter++; // 実行回数が1回とは限らない。
    effectObj.A = k;
    effectObj.B = j;});
void hagefunc(int arg, Action<String> immediateAct)
{
    this.MessageOutput = immediateAct; // 他の処理で使う用に取っておく。
    // 関数内のインスタンスが既に失われていても実行できてしまう。
}

 型優先と匿名型(関数型プログラミング)は別のパラダイムだけど、概念とか?
抽象的な上位にはオブジェクト指向が残ってるのが感じとれて面白くないですか。

 こういった設計と実装のミスマッチが起こりうるので、人力で不具合を探す時は
設計をイメージしましょう。
(OOPで設計していなくても、人間が認識できるものはすべてオブジェクトです!!)

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3