問題タブ [side-effects]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - モックされたメソッドの副作用をシミュレートする
メソッドのパラメーターに副作用を引き起こすクラスのメソッドがあります。
そして、このクラスがテストされています:
JMockit を使用した私のテスト方法:
haskell - Haskellでのピクセルベースのレンダリングをどのように想像する必要がありますか?
スプライトを後で表示されるビットマップにブリットする命令型レンダリングエンジンを想像してみてください。これは、ビットマップ内の個々のピクセルを効率的に変更する機能に大きく依存しています。副作用のない言語でそのようなことをどのように行うのでしょうか?まったく異なるデータ構造が必要だと思いますか?
functional-programming - OCaml:後で使用するためにいくつかの値を保存すると「副作用」が発生しますか?
宿題の場合、「副作用」を発生させずにタスクを完了するように指示されています。ウィキペディアで「副作用」を調べましたが、理論的には「状態を変更したり、関数の呼び出しとの相互作用を観察したりする」という意味だと思いますが、詳細を理解するのに苦労しています。
たとえば、コンパイル時以外の結果を保持する値を作成すると、副作用が発生しますか?
私が持っていたと言う(構文的に完璧ではないかもしれません):
これは副作用をもたらしますか?副作用の定義で「状態を変更する」とはどういう意味か混乱しているのではないでしょうか。
c++ - C++ でオブジェクトを関数に渡すときの副作用
C++ : The Complete Reference
私は本で次のことを読みました
オブジェクトは、理論的には呼び出し側の引数を保護および隔離する通常の値渡しパラメーターの受け渡しメカニズムを使用して関数に渡されますが、影響を与えたり、場合によっては損傷を与える可能性のある副作用が発生する可能性があります。 、引数として使用されるオブジェクト。たとえば、引数として使用されるオブジェクトがメモリを割り当て、それが破棄されるときにそのメモリを解放する場合、関数内のそのローカル コピーは、デストラクタが呼び出されるときに同じメモリを解放します。これにより、元のオブジェクトが損傷したままになり、事実上役に立たなくなります。
副作用がどのように発生するかはよくわかりません。例を使ってこれを理解するのを手伝ってくれる人はいますか?
java - 副作用を避けるには?
副作用を避けるために: メソッド内でパラメーター オブジェクトの属性値を変更したくありません。結果を表し、それを返す新しいものを作成することを好みます。
副作用を回避することは、マルチスレッド環境でのみ重要ですが、それでも実践することをお勧めします。f(X)=Y は、引数として受け取ったオブジェクトと結果として与えたオブジェクトの両方を比較できるので便利です。
つまり、IN パラメーター オブジェクトのすべての属性を、作成した OUT の新しいインスタンス オブジェクトにマップする必要があります。これにより、次のようなコードが作成されます。
私のメソッドで多くの行を作成できること:$
行を追加するだけで、それほど多くの値をマッピングせずに行うこともできます
しかし、これはDBへのアクセス、およびより多くの処理に終わります。
オブジェクトを別のオブジェクトにマップするために、リフレクションを使用して一般的な方法を実行しますか? それはパフォーマンスの面でコストがかかります。
あなたは何を選びますか?プロジェクトのニーズに応じて。保守性、拡張性を考慮して...
types - 代入以外の命令文の型推論
命令型言語の型システムに関する研究論文を探していると、変更可能な参照を持ち、複合演算子、ループ、条件などの真の命令型制御構造を持たない言語の解決策しか見つかりません。
そのため、 http://rust-lang.orgのような部分的な型推論を伴う命令型言語をどのように実装できるかは明らかではありません。
List of a
パラメータ化された型は Hindley-Milner 型システムの自明な拡張であるため、これらの論文ではパラメータ化された型について言及していません。拡張する必要があるのは統一アルゴリズムのみであり、残りの推論はそのまま機能します。ただし、パラドックスが発生するため割り当てを自明に追加することはできないため、ML 値の制限などの特別な手法を適用する必要があります。
命令型ループ、条件文、IO、および複合文を含む言語の型システムについて説明しているパーラーまたは本をお勧めできますか?
javascript - 平易な英語でのJavascriptのクロージャと副作用?(別々に)
私はJavaScriptの本を何冊か読んでいますが、クロージャと副作用について常に耳にします。どういうわけか、私は彼らが実際に何であるかを理解することができません。誰かが私に彼らが平易な英語と例で何であるかを説明できますか?(グラフィックデザイナーのプログラミングレベルの人に説明していたように)。
haskell - 遅延評価と IO 副作用の混乱
このコード ( Learn You A Haskellから取得):
どうやら脱糖する
これは、私が理解しているように、「StrLn "Andy!" を配置するには、まず putStr "I'm " が必要であり、そのためには、最初に putStr "Hey, "; が必要です」と解釈できます。
私はこの解釈に同意しません。これは、コンパイラが明らかにそうではなく、私を混乱させているため、迷惑です。私が抱えている問題は、ラムダが引数を無視することです。遅延評価中に、この種のことは認識されて短絡するはずではありませんか?
また、確かに、バインディングは IO アクションを返し、その IO アクションがメインになると実行されます。しかし、「Hey, Andy!I'm」と表示されないようにするにはどうすればよいでしょうか? 私はそれがバインドがしていることだと思います。
また、「IO ()」タイプの IO アクションは、ランタイム システムが「Hey, I'm Andy!」を出力できるようにするのに十分な情報をどのように運ぶのでしょうか? IO () は、「Hello World!」を出力するよりも IO () とどう違うのですか? またはファイルに書き込みますか?
モナドのウィキペディアのページから、別のことを考えてみましょう:
砂糖漬けバージョン:
脱糖バージョン:
似たような話はこちら。
IO の bind の定義を確認するだけで、すべてが明確になると思います。他に大いに役立つのは、プログラムが実際にどのように評価され、副作用が発生する正確な瞬間を特定するかを誰かが手伝ってくれることです。
haskell - 入力を受け取らないプログラムをコンパイルするとどうなりますか?(Haskell IOの純度の問題(再び))
putStrLn
引数を指定して呼び出すと、常にタイプの値が返されますIO ()
。私はそれが純粋であることに同意します、私はそれを扱うことができます。しかし、それは参照透過性ですか?私はそう思います。なぜなら、与えられた入力に対して、関数呼び出しをIO ()
stdoutで正しい文字列をスローするanに置き換えることができるからです。
だから私は。でかっこいいですが、引数なしで呼び出されputStrLn
たとき、それらがタイプであるならば、いくつものものを返すことができます。それは純粋でも参照透過性でもありませんよね?getLine
IO String
ばかげた衒学的な質問で、コードの書き方はおそらく変わらないでしょうが、私は本当にこれを完全に釘付けにしたいのです。(IOモナドが物事を正しくシーケンスすることを理解しています。それは私の問題ではありません)
これは私に別の質問を提起します。コンパイラは、入力を受け取らないプログラムを認識するのに十分賢いですか?たとえば、私がコンパイルするとします
IO ()
GHCは、そのプログラムを[2,3,4,5,6,7,8,9,10,11]が出力されるように減らすのに十分賢いですか?それとも、それでもうまくいき、実行時にすべてを評価/実行しますか?入力が不要な任意のプログラムについても同様です。GHCは、プログラム全体が参照透過性であり、その価値に簡単に置き換えることができるという事実を採用していますか?
functional-programming - 副作用がないことを望む場合、関数型言語でデータベースを使用するための最も一般的なパターンは?
私は関数型言語の核となる概念に頭を悩ませようとしています:
「関数型言語の中心的な概念は、関数の結果がその入力によって決定され、その入力のみによって決定されるということです。副作用はありません!」
私の質問は、関数がそのローカル環境内でのみ変更を行い、結果を返す場合、データベースまたはファイル システムとどのようにやり取りできるかということです。定義上、それは実質的にグローバル変数またはグローバル状態にアクセスすることではないでしょうか?
これを回避または対処するために使用される最も一般的なパターンは何ですか?