[解決済み] 純粋関数。副作用がない」ということは「同じ入力があれば常に同じ出力が得られる」ことを意味するのか?
2023-06-01 17:26:12
質問
ある関数を定義する2つの条件とは
pure
は以下の通りです。
- 副作用がない (すなわちローカルスコープの変更のみが許可される)
- 同じ入力が与えられると、常に同じ出力を返す
第一条件が常に真である場合、第二条件が真でないことはあるのでしょうか?
つまり、本当に第一の条件しか必要ないのでしょうか?
どのように解決するのですか?
外側のスコープを変更しないが、それでも不純とみなされるいくつかの反例を紹介します。
-
function a() { return Date.now(); }
-
function b() { return window.globalMutableVar; }
-
function c() { return document.getElementById("myInput").value; }
-
function d() { return Math.random(); }
(これは確かに PRNG を変更しますが、観測可能とはみなされません)
定数でない非ローカル変数へのアクセスは、2番目の条件に違反することができるのに十分です。
私はいつも、純粋性のための2つの条件は補完的なものだと考えています。
- 評価結果が 効果を持つ 側の状態に
- 評価結果は 影響を受ける サイドステートによって
この用語は 副作用 という用語は、最初の、非ローカルな状態を変更する関数のみを指します。しかし、時には読み出し操作も副作用とみなされます:読み出し操作が 操作 であり、たとえ主目的が値へのアクセスであったとしても、同様に書き込みを伴う場合です。その例としては、ジェネレーターの内部状態を変更する疑似乱数の生成、読み取り位置を前進させる入力ストリームからの読み取り、または "測定を行うコマンドを含む外部センサーからの読み取りがあります。
関連
-
[解決済み] スクリプトタグ - 非同期と遅延
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み】JavaScript / HTML5での効果音について
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] これは純関数ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?