問題タブ [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.

0 投票する
2 に答える
223 参照

ruby - YARV Rubyでスレッドを作成することは、一般的にFPの観点から副作用と見なされますか?

Rubyメソッドがスレッドを作成するが、メソッド内でそれらを結合する場合でも、関数型プログラミングの観点からは副作用と見なされますか?私が使用している実装はYARVRubyで、GVL(Global VM Lock)を使用していても、オペレーティングシステムによってスレッドが作成されます。

スレッドが作成される理由はsystem、とにかく副作用である呼び出しを行うためですが、スレッドが副作用であるかどうかを言う人に出会ったことはありません。

このための簡略化された擬似コードは、次のようになります。

0 投票する
1 に答える
93 参照

iphone - iPhoneアプリの副作用

他のアプリのパフォーマンスに対するiPhoneアプリの副作用を測定する方法はありますか?少なくともブラックボックスフォーカスを使用します。

このオリエンテーションの監視アプリについて何か提案はありますか?

私のアプリは他のアプリについて何も知らないことがわかりましたが、他のアプリケーションに対するアプリの何らかの影響を測定したいのですが、それが不可能な場合は、システム全体のパフォーマンスを見積もることができます。

ご協力いただきありがとうございます

0 投票する
1 に答える
406 参照

c++ - 「volatileQualifiedExpr + volatileQualifiedExpr」が C では必ずしも UB ではなく C++ である理由は?

私が今日C標準を読んだとき、それは副作用について述べています

揮発性オブジェクトへのアクセス、オブジェクトの変更、ファイルの変更、またはこれらの操作のいずれかを行う関数の呼び出しはすべて副作用です

そしてC++標準は言う

volatile glvalue (3.10) で指定されたオブジェクトへのアクセス、オブジェクトの変更、ライブラリ I/O 関数の呼び出し、またはこれらの操作のいずれかを実行する関数の呼び出しはすべて副作用です。

したがって、どちらも同じスカラー オブジェクトでシーケンス化されていない副作用が発生することを禁止しているため、C では次のことが許可されますが、C++ では未定義の動作になります。

仕様を正しく読んでいますか?また、もしそうなら、その不一致の理由は何ですか?

0 投票する
2 に答える
436 参照

python - なぜ副作用のある奇妙なリスト内包表記の動作ですか?

Pythonリスト内包表記で副作用を使用することは良い習慣ではないことを私は知っています。しかし、なぜ次のようなことが起こるのか理解できません。

これが良い習慣であるかどうかにかかわらず、リスト内包表記の内部は予測可能な何かをするべきではありませんか?上記予測可能である場合、なぜ3つの操作しかremove発生しなかったのか、そしてなぜ偶数のエントリが残っているのかを誰かが説明できますか?

0 投票する
2 に答える
615 参照

macros - マクロには副作用がありますか?

マクロ展開には副作用がありますか (またはすべきですか)? たとえば、コンパイル時に実際に Web ページのコンテンツを取得するマクロを次に示します。

その後、私は行うことができ(foo "http://www.pointlesssites.com/")、それはに置き換えられます"\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\r\n\t <and so on>"

これは良い習慣ですか?Racket がこのコードを 1 回だけ実行することを保証しますか? マクロに行を追加する(display "running...")と、一度だけ出力されますが、1 つの例から一般化するのは嫌です...

追伸 - 私が尋ねている理由は、実際にこれが時々本当に役立つと思うからです. たとえば、これは、(コンパイル時に) Google API Discovery サービスからディスカバリー ドキュメントをロードし、そのラッパーを自動的に作成できるライブラリです。ライブラリがローカル ファイルからではなく、実際に Web からディスカバリー ドキュメントをフェッチするようになれば、本当にすばらしいと思います。

また、別の種類の副作用を持つマクロの例を挙げると、Racket の小さなサブセットを (eta 拡張された) ラムダ計算 (もちろん、Racket で実行可能) に変換するマクロを作成したことがあります。マクロが関数の変換を終了するたびに、その結​​果を辞書に格納して、後でマクロを呼び出したときにその関数定義を独自の変換で使用できるようにします。

0 投票する
1 に答える
506 参照

javascript - JavaScriptでの複合代入演算子の連鎖

C#では、

書き込みabcabcabc(http://ideone.com/pFNFX2)。C#仕様では、セクション7.16.2で次のように明示的に記述されているため、これは問題ありません。

xが1回だけ評価されることを除いて、操作はx = xopyとして評価されます。

ただし、ECMAScript 5.1言語仕様のセクション11.3.2にある複合代入演算子の説明を読んでいると、この演算子のセマンティクスにそのような「1回だけ」の修飾子がありません。代わりに、私が見るのは次のとおりです。

  1. lrefをLeftHandSideExpressionの評価結果とします。
  2. lvalをGetValue(lref)とします。
  3. rrefをAssignmentExpressionの評価結果とします。
  4. rvalをGetValue(rref)とします。
  5. rをlvalとrvalに演算子@を適用した結果とします。
  6. 次の条件がすべて当てはまる場合は、SyntaxError例外をスローします。(snipped)
  7. PutValue(lref、r)を呼び出します。
  8. rを返します。

したがって、(とにかく)次のJavaScriptコードが表示されます

警告abcabcabcabcしますが(括弧で囲まれた式の7行目のPutValueのため)、とにかくChrome22では警告しabcabcabcます。

だから私の質問は:私は仕様を読み間違えているのか、それともChrome(V8はおそらく?)が独自のことを仕様外で行っているのか?

0 投票する
1 に答える
530 参照

c++ - C ++では副作用と観察可能な動作はどのように関連していますか?

C++03標準1.9/6は、観察可能な動作を定義しています。

抽象マシンの観察可能な動作は、揮発性データへの読み取りと書き込みのシーケンス、およびライブラリI/O関数の呼び出しです。

そして、1.9 / 7は副作用を定義します:

揮発性左辺値(3.10)で指定されたオブジェクトへのアクセス、オブジェクトの変更、ライブラリI / O関数の呼び出し、またはこれらの操作のいずれかを実行する関数の呼び出しはすべて副作用であり、実行環境の状態の変化です。

副作用は観察可能な行動ですか?それらはどのように相互に関連していますか?

0 投票する
1 に答える
8057 参照

php - PSR-1 2.3 副作用規則

PHP Basic Coding Standards PSR1 について質問があります。PSR 1 ルール 2.3 には次のように記載されています。

ルール 2.3 副作用

ファイルは、新しいシンボル (クラス、関数、定数
など) を宣言し、他の副作用を引き起こさないようにする必要があります。または、
副作用のあるロジックを実行する必要がありますが、両方を行うべきではありません。

「副作用」という用語は、ファイルをインクルードするだけで
、クラス、関数、定数などの宣言に直接関係しないロジックの実行を意味します。

「副作用」には、出力の生成、
「require」または「include」の明示的な使用、外部サービスへの接続、ini
設定の変更、エラーまたは例外の発行、グローバル変数または静的変数の変更、
読み取りまたは書き込みが含まれますが、これらに限定されません。ファイルなど。

誰かがこの規則の使用を支持する議論を私に与えることができますか? または、このルールの利点と、なぜそれが重要なのか、または実装するのが良い考えなのかを説明してください。これは、PSR 1 の完全な実装をサポートし、適切なケースを作成するのに役立ちます。

0 投票する
5 に答える
2255 参照

ruby - ハッシュからキーを削除する非破壊的な方法

ハッシュからキーと値のペアを削除する非破壊的な方法はありますか?

たとえば、あなたがした場合

また

その後、変更されoriginal_hashず、new_hash変更されますが、少し冗長です。ただし、

それからoriginal_hash変更されますが、それは私が望んでいることではありません。

私が望むことを行う単一の方法はありますか?

0 投票する
2 に答える
123 参照

c++ - 抽象型オブジェクトとして渡されるオブジェクトの作成

ポリモーフィズムを使用するために、メモリフットプリントが異なるいくつかの具象クラスによって実装された抽象クラスがあります。

最初の具体的なクラス:

別の具体的なクラス:

私がやりたいのは、抽象型のオブジェクトを宣言し、それを関数のパラメーターとして渡して、具象型またはabstractFooのいずれかのオブジェクトとして作成することです。私は最初に通常の方法を使用し、パラメーターにポインターを渡します。concreteFoo1concreteFoo2

出力は次のとおりです。

問題はfoo、抽象型のオブジェクトとして初期化できないことconcreteFoo1です。この例のように、として初期化すると、メソッドfooを呼び出した後でも、ポインターはそれを指しますcreateFoo

それを機能させるために、私はパラメータのポインタにポインタを渡すように言われました:

出力:

このソリューションは機能しますが、あまり満足していません。抽象型へのポインタを作成できないため、使用しないオブジェクトを作成する必要があり、astractFoo* foo = new concreteFoo1()それに割り当てられたメモリが解放されることはありません。 、だから私はメモリリークで終わると思います。

AbstractFoo**オブジェクトを作成せずに、抽象型へのポインターへのポインターを作成する方法はありますか?

それで、ダブルポインターが私の問題の厳密な解決策であることを確認できますか?もしそうなら、私の2つの問題に答えることができますか?そうでない場合は、どうすればよいですか?