問題タブ [immutability]

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 投票する
5 に答える
2938 参照

c# - .NET の AppDomain 間でオブジェクトを移動する

AppDomains 間で .NET オブジェクトを効率的に共有または移動する方法はありますか? AppDomains の目的は分離を提供することであることは理解していますが、計算と作成にコストがかかる比較的大きなキャッシュされた不変オブジェクトのセットを移動する必要がある場合があります。現時点では、機能するシリアル化アプローチがありますが、かなり遅いです。

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

c# - マルチスレッドの改善: 単一関数またはコレクション関数

言い方が正しかったかどうかはわかりませんが、簡単な例として、Point3 値 (1M など) のコレクションがあるとします。

これらの値に別の Point3 値を追加し、新しい Point3 値を返す Offset というメソッドがあります。メソッドが静的であるとしましょう。

Point3 型は不変です。

問題は、次のような方法が必要かどうかです。

また

私には、タスクを異なるスレッドの別々のタスクに分割するためのより良い選択のように思えます。

どう思いますか?そして、#1または#2の利点は?

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

variables - Haskellには変数がありますか?

Haskellには変数がないという主張をよく耳にします。特に、この回答はそうではないと主張しており、少なくとも9回賛成され、受け入れられました。

それで、それは変数を持っているかどうか、そしてなぜですか?

この質問は、ML、F#、OCaml、Erlang、Oz、Lava、およびすべてのSSA中間言語にも当てはまるようです。

0 投票する
13 に答える
9823 参照

language-agnostic - Allen Holub は「get/set 関数は絶対に使用しないでください」と書いていますが、彼は正しいですか?

アレン・ホルブは次のように書いています。

何らかの結合なしにプログラムを作成することはできません。それにもかかわらず、オブジェクト指向 (オブジェクト指向) の原則に従うことで、結合を大幅に最小限に抑えることができます (最も重要なのは、オブジェクトの実装を、それを使用するオブジェクトから完全に隠す必要があるということです)。たとえば、オブジェクトのインスタンス変数 (定数ではないメンバー フィールド) は、常に非公開にする必要があります。限目。例外なく。これまで。私は真剣です。(保護されたメソッドを効果的に使用できる場合もありますが、保護されたインスタンス変数は忌まわしいものです。)

それは理にかなっているように聞こえますが、彼は続けて次のように言います。

同じ理由で、 get/set 関数を使用しないでください。それらは、フィールドを public にする方法が非常に複雑であるためです (ただし、基本型の値ではなく本格的なオブジェクトを返すアクセス関数は、返されたオブジェクトがクラスは設計における重要な抽象化です)。

率直に言って、これは私には非常識に聞こえます。

情報隠蔽の原則は理解できますが、アクセサーとミューテーターがなければ、Java Bean をまったく使用できません。モデルはビューのレンダリングを担当できないため、モデルにアクセサーなしで MVC 設計に従う方法がわかりません。

しかし、私は若いプログラマーであり、オブジェクト指向設計について日々学んでいます。おそらく、経験豊富な人がこの問題に加担できるでしょう。

Allen Holub の参考記事


関連する質問:

0 投票する
3 に答える
3545 参照

functional-programming - Erlang などの関数型言語でキャッシュされたデータをどのように使用しますか?

私は最近、関数型言語について少し読んでいます。オブジェクト指向の開発に 10 年以上携わってきた私は、純粋な関数型アプローチ(つまり、同じパラメーターで呼び出された同じメソッドが同じことを行う) をどのように指すことができるのか、理解するのが難しいと感じています。 (オブジェクト指向プログラムで) データをキャッシュする必要があります。

  • 不変ではないアクター (つまりキャッシュ) がプログラムに必要になる可能性があることを認めますか。infoq で Joe Armstrong のプレゼンテーションを見たところ、彼はこの点に関してかなり独断的だったようです。

  • データの検索にコストがかかる可能性があることを認めるだけですか (データをキャッシュすることはできないため)。もしそうなら、たとえば、共有リソース(データベースなど)の負荷をどのように制御できますか

  • 私がまだ知らない魔法の妖精の粉はありますか.

確かに、「Erlang Cache」をグーグルで検索すると、かなりの数の結果が返されるようです...

0 投票する
3 に答える
1322 参照

java - オブジェクトを不変にする可能な方法

Java の String クラスのように、不変クラスを効率的に構築する方法を探しています。

0 投票する
3 に答える
300 参照

c# - 不変性は非並列アプリケーションで役立ちますか?

私は不変性の概念が好きですが、アプリケーションが並列であることを意図していない場合、物事を不変にすることを避けるべきではないかと思うことがあります。

アプリケーションがマルチスレッド化されていない場合、共有状態の問題に悩まされることはありませんよね?

それとも、不変性は OOP のような概念で、常に使用するか使用しないかのどちらかですか? 使用/パフォーマンスなどに基づいて何かが不変であってはならない場合を除外します。

自分でアプリケーションを作成するときに、この質問に直面します。これは適度に大きいものです (おそらく 1 ~ 2k 行)。

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

c# - 実行時にオブジェクトを不変にする [C#]

インスタンス化されたオブジェクトをそのすべてのパブリック プロパティとともに不変にする方法はありますか (リフレクションを利用することを願っています) 。私は利用する必要がある他の誰かのコードベース (利用可能なソースがない) からのクラスを持っています。インスタンス化された後、どこかのコードがこのクラス内でパブリック セッターを呼び出そうとすると、基本的に例外がスローされます。

注: これを実装するために、クラスの周りにラッパー オブジェクトを作成したくありません。私は怠け者です。

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

c# - C#/CLR には、プロパティの戻り値を読み取り専用/不変としてマークするメカニズムが含まれていますか?

私は周りを見回してきましたが、これまでのところこれを行う良い方法を見つけることができませんでした. よくある問題ですね、きっと。

次のものがあるとします。

バイナリ ヒープを実装し、Insert() および DeleteMin() 操作のみをサポートするのではなく、最高 (場合によっては最低) の優先度値での「ピーク」をサポートしたいという考えです。スタック上。ハイゼンベルクが好きだったことは一度もありませんでした。「物事を変えることなく物事を見ることはできません」という不確定性原理. ごみ!

明らかに問題は、呼び出しコードが Top プロパティを介して MyVal (SortedCollection を想定) を変更するのを防ぐ手段が提供されていないことです。この操作では、ヒープが間違った順序で配置される可能性が明確にあります。Top プロパティを介してヒープの内部要素に変更が適用されないようにする方法はありますか? それとも、「インスタンスが挿入されてからキューから取り出されるまでの間にインスタンスを変更しない場合にのみ安定します。YMMV」という警告付きのコードを使用するだけですか。

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

.net - コレクションを持つ不変の構造体

別の不変構造体の読み取り専用コレクションを含む.Netで不変構造体を作成しています(設計全体を完全に制御できます)。変化しない Add メソッドは必要ありません。

それを行う最善の方法は何ですか?

外側の構造体に、内側の構造体を含む への参照を持たせることができますReadOnlyCollection。他のオプションはありますか?