純粋な関数は常に戻り値の型(つまりvoid
であってはならない)である必要があり、オブジェクトの状態に関係なく同じ出力が必要であり、Impure関数はオブジェクトの状態を変更するか、またはオブジェクトの状態。
しかし、私が使用する教科書は次のように述べています:
通常、アクセサーにはreturnステートメントが含まれますが、オブジェクトの状態に関する情報を出力するメソッドもアクセサーとして分類できます。
よくわかりません。どちらが正しいか?
[〜#〜]編集[〜#〜]
少し明確にしておきますが、私に尋ねるのはこの質問です。
最後の質問は「使用する関数のタイプを与える」であり、そこにコメントした人々は、それが印刷しているので不純な関数であると述べました。
この関数は純粋ですか、それとも不純ですか?
this link から取得したコンテンツ
純関数の特性:
純粋な関数の戻り値は、その引数にのみ依存します。したがって、同じ引数のセットで純粋な関数を呼び出すと、常に同じ戻り値が返されます。
ネットワーク呼び出しやデータベース呼び出しのような副作用はありません
不純な関数の特徴
不純な関数の戻り値は、その引数にのみ依存するわけではないため、同じ引数のセットで不純な関数を呼び出すと、異なる戻り値が返される場合があります。たとえば、Math.random()、Date.now()
ネットワークやデータベースの呼び出しなどの副作用がある可能性があります
渡された引数を変更する場合があります
function impureFunc(value){
return Math.random() * value;
}
function pureFunc(value){
return value * value;
}
var impureOutput = [];
for(var i = 0; i < 5; i++){
impureOutput.Push(impureFunc(5));
}
var pureOutput = [];
for(var i = 0; i < 5; i++){
pureOutput.Push(pureFunc(5));
}
console.log("Impure result: " + impureOutput); // result is inconsistent however input is same.
console.log("Pure result: " + pureOutput); // result is consistent with same input
Wikipedia から-関数に関するこれらの両方のステートメントが次の条件を満たしている場合、関数はpure functionとして記述できます。
したがって、コードと比較したときにどちらかのステートメントがfalseの場合、それは不純です。
Mu。 アクセサは純粋な関数であると想定しているようです。これは必ずしもそうではありません- get
のget
メソッドのように、アクセサ(値を返すLinkedHashMap
- accessorでも)は不純かもしれません アクセス順序モードの場合(要求されたエントリを反復順序の最後の位置に移動します)。
両方のステートメントが正しいです。
呼び出される値を取得するためのメソッドを作成するときACCESSOR METHODS
例:
public String getName(){
return this.name;
}
そして、値を設定するために[〜#〜] void [〜#〜]と呼ばれるメソッドを使用しますMUTATOR METHODSと呼ばれます
例:
public void setName(String n){
this.name=n;
}
純粋でない関数またはミューテーターメソッドは、オブジェクトの状態を変更し、インスタンス変数に格納されている値を変更します。