私はこの質問を調べるつもりはないと思いますが、私は非常に経験豊富なプログラマーであり、よりオープンマインドな読者の何人かが注意を払うことを望んでいます。
値を返す手続き(VRP)が確定的で純粋であるため、オブジェクト指向プログラミング言語に適していると思います。
'VRP'は、式の一部として呼び出される関数の最新の学術名であり、式の評価中に概念的に呼び出しを置き換える戻り値を持っています。たとえばx = 1 + f(y)
、関数などのステートメント内f
VRPとしてています。
「確定的」とは、関数の結果がそのパラメーターの値のみに依存することを意味します。同じパラメーター値で再度呼び出すと、同じ結果が確実に得られます。
「純粋」は副作用がないことを意味します。関数を呼び出しても、結果の計算以外は何も行われません。これは重要ではないことを意味すると解釈できます、実際に副作用がため、たとえばVRPが呼び出されるたびにデバッグメッセージを出力する場合は、おそらく無視できます。
したがって、C#で関数が確定的ではない場合、void
関数を(つまり、VRPではなく)関数にする必要があると私は言います。out
また、返す必要がある値は、またはref
パラメーターで返す必要があります。
たとえば、データベーステーブルから一部の行を削除する関数があり、削除した行の数を返すようにする場合は、次のように宣言する必要があります。
public void DeleteBasketItems(BasketItemCategory category, out int count);
この関数を呼び出したいが、取得しない場合 count
場合は、常にオーバーロードを宣言できます。
このスタイルがオブジェクト指向プログラミングに適している理由を知りたい場合があります。大まかに言えば、これは(少し不正確に)「手続き型プログラミング」と呼ばれるプログラミングスタイルに適合し、オブジェクト指向プログラミングにより適した手続き型プログラミングスタイルです。
どうして?オブジェクトの古典的なモデルは、それらにプロパティ(別名属性)があり、それらのプロパティを読み取って更新することにより、(主に)オブジェクトに問い合わせて操作することです。プロパティの取得と設定を行う操作の間に任意のコードを実行できるため、手続き型プログラミングスタイルを使用すると、これが簡単になります。
手続き型プログラミングの欠点は、あらゆる場所で任意のコードを実行できるため、グローバル変数と副作用を介して、非常に鈍く、バグの影響を受けやすい相互作用が得られることです。
したがって、非常に簡単に言えば、関数を値以外の値に戻すことにより、関数が副作用を引き起こす可能性があることをコードを読んでいる誰かに通知することをお勧めします。