- 戻り値が複数ある時 ⇒ 戻り値オブジェクト
- 戻り値が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で設計していなくても、人間が認識できるものはすべてオブジェクトです!!)