特定のタイプの機能に適切な用語が必要です。
入力と出力がデータベース トランザクションのスコープ内に含まれる関数を SQL データベースに記述するとします。
つまり、この関数をデータベース トランザクションのスコープ内で呼び出すと、関数によって使用されるすべてのデータが同じスコープ内で使用可能になります。データベース テーブルにクエリを実行できますが、ファイル システムからファイルを読み取ったり、Web サイトに ping を実行したりすることはできません。REPEATABLE READ
分離を使用して 1 つのトランザクション内で関数を 2 回呼び出すと、同じ結果が得られるはずです。クライアントはデータベースに変更を加えています。
同様に、同じトランザクション スコープ内を除いて、この関数には副作用がありません。データベース トランザクションの範囲外での状態の変更は許可されていません。関数は、電子メールを送信したり、ファイルシステムに書き込んだり、値を に保存したりすべきではありませんmemcached
。関数がデータベース内のデータを変更する場合、それは問題ありません。呼び出し元のトランザクションがロールバックされた場合、関数の効果があまりにも大きくなるためです。 .
関数の引数は、基本的に定数として使用されるため、問題ありません。
このタイプの関数の適切な用語は何ですか? 「決定論的」は実際には十分に具体的ではないようです。このクラスの機能をどのように説明しますか?
ご回答ありがとうございます。冪等性が最も近くなるので、それを受け入れられた回答としてマークしました。しかし、あなたのそれぞれは、関係なく私から賛成票を獲得しました。
純粋な関数には副作用がなく、その結果は引数のみに基づいています。同じ引数が与えられた結果は常に同じです。私が考えているデータベース関数はデータの状態に基づいている可能性があり、関数はデータの状態にも影響を与える可能性があるため、これは機能しません。
べき等関数は、データの状態に基づいて結果を返すことができ、データの状態が同じであれば、結果は常に同じになります。しかし、これは私が念頭に置いていることには正確には機能しません。冪等関数の効果は、関数が何回呼び出されても結果が変わらない必要があります。ただし、トランザクションの分離内で行われた変更と、その範囲外で行われた変更の間に区別はありません。