ウィキペディアの冪等性の説明を読みました。関数の出力がその入力によって決定されることを意味することを私は知っています。しかし、非常によく似た概念である純粋関数を聞いたことを覚えています。私はそれらをグーグルで検索しましたが、それらの違いを見つけることができません...
それらは同等ですか?
ウィキペディアの冪等性の説明を読みました。関数の出力がその入力によって決定されることを意味することを私は知っています。しかし、非常によく似た概念である純粋関数を聞いたことを覚えています。私はそれらをグーグルで検索しましたが、それらの違いを見つけることができません...
それらは同等ですか?
べき等関数は、べき等の副作用を引き起こす可能性があります。
純粋関数はできません。
たとえば、テキストボックスのテキストを設定する関数はべき等です(複数の呼び出しで同じテキストが表示されるため)が、純粋ではありません。
同様に、(カウントではなく)GUIDでレコードを削除することはべき等です。これは、後続の呼び出しの後も行が削除されたままになるためです。(追加の呼び出しは何もしません)
純粋関数は、出力が入力によってのみ決定されるという副作用のない関数です。つまり、呼び出しf(x)
を何度呼び出しても同じ結果が得られます。
べき等関数は、結果を変更せずに複数回適用できる関数です。つまりf(f(x))
、と同じf(x)
です。
関数は、純粋、べき等、両方、またはどちらでもない場合があります。
いいえ、べき等関数はプログラム/オブジェクト/マシンの状態を変更します-そしてその変更を1回だけ行います(繰り返しの呼び出しにもかかわらず)。純粋関数は何も変更せず、呼び出されるたびに(戻り)結果を提供し続けます。
機能的純度とは、副作用がないことを意味します。一方、冪等性とは、関数が複数の呼び出しに対して不変であることを意味します。
純粋関数は複数回呼び出されても副作用を生成しないため、すべての純粋関数は副作用冪等です。ただし、戻り値の冪等性は、純度の影響を受けない f(f(x)) = f(x) を意味します。