問題タブ [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.
.net - .net (c#) の不変配列: 合理的なアプローチ?
おそらく次の問題をご存知でしょう: 2 つのオブジェクト A と B の間でコレクションを共有したい (または、同様にプロパティによってコレクションを公開したい) と ... まあ、これは実際には良い考えではないことに気付きます。そしてBはコレクションを変更し、何とかハルマゲドンを手に入れることができます...
しかし、コレクション全体を共有するのではなく、コレクションのアイテムを使用してオブジェクトを初期化するか、アイテムをオブジェクトのメソッドに渡したいだけであることに気付くことがよくあります。さらに、オブジェクトのアイテムはオブジェクトの存続期間中に変更されないため、多くの場合、次のようなことを行うことになります。
.ToList() と ReadonlyCollection-Wrapper の両方が問題に対する合理的な解決策を提供しますが、いくつかの問題もあります。クライアントはコレクションを変更しませんが、コレクションが変更されないという保証をクライアントに与えません。
実際、私が書くほとんどのクラス (推測: 80 - 90 %) は事実上不変であり、基本的に不変配列を表すコレクションを集約するため、これは私がよく直面する状況です (このコンテキストでは、固定サイズの不変シーケンスを意味します)。アイテムの)。私の見解では、この問題に対する適切な解決策は非常に単純です。コンストラクターで適切に初期化されることが保証されている配列のラッパー クラスを構築し、基になる配列を変更しないメソッド/プロパティのみを提供します。
簡単に言えば、不変配列の概念の次の(自明な)実装に問題はありますか?
ところで:私はシーケンスが適切な名前であると判断しました.a)それは意図を非常によく説明しています(アイテムの固定サイズの不変シーケンス)b).netで現在使用されている名前ではなく、c)それは非常に短いです私はそれを広範囲に使用することを計画しているので重要です。
c# - Xaml のシリアル化と不変の構造体?
これどうやってするの?
TypeConverter を使用してみましたが、私が考えることができたのは、型の XML を構築することだけでした。xaml シリアル化の TypeConverters は xml をエスケープし、プレーン テキストのように扱います。値コンバーターはそれほど優れているわけではありません。
今、私は ISupportInitialize に移行しており、初期化後に変更が行われた場合はスローしますが、不変のルートが好きだったでしょう...
シリアライズしたい型の例:
そしてコード
string - 各反復で「それ」を割り当てます(グルーヴィー)
ねえ、Groovy でリストの各文字列項目をトリミングしようとしています
ただし、これはクロージャー内でのみ機能し、リスト内の文字列はまだ「 foo 」、「 bar 」、および「 groovy 」です。
どうすればそれを達成できますか?
java - 不変性の影響に関する経験的データ?
今日の授業では、私の教授が授業の構成方法について話し合っていました。このコースは主にJavaを使用しており、私は教師よりもJavaの経験が豊富です(彼はC ++のバックグラウンドを持っています)。そのため、Javaでは不変性を優先する必要があると述べました。私の教授は私の答えを正当化するように私に頼みました、そして私は私がJavaコミュニティから聞いた理由を与えました:
- 安全性(特に糸脱毛の場合)
- オブジェクト数の削減
- 特定の最適化を許可します(特にガベージコレクターの場合)
教授は、これらの利点の統計的測定値を見たいと言って、私の声明に異議を唱えました。事例証拠を豊富に引用しましたが、それでも彼が正しいことに気づきました。私が知る限り、不変性が実際に実世界のコードで約束する利点を提供するかどうかについての経験的研究はありませんでした。私はそれが経験からそうすることを知っています、しかし他の人の経験は異なるかもしれません。
それで、私の質問は、実世界のコードにおける不変性の影響について行われた統計的研究はありますか?
immutability - 静的メソッドに対する不変オブジェクトの利点は何ですか?
これを次のように実装することもできます。
静的メソッドよりも不変オブジェクトを選択する必要があるのはいつですか?逆のことが当てはまる状況はありますか?
また、不変オブジェクトにはvoidメソッドを含めるべきではないように思われます。どう思いますか?
java - LCDS を使用して不変の Java クラスを actionscript にシリアライズする
LCDS DataServices データ管理によって管理され、カスタム アセンブラを使用して作成/更新されている複雑なオブジェクトがあります。オブジェクト階層の大部分は正しくシリアライズ/デシリアライズされていますが、不変の Java クラスのシリアライズに関してはつまずきました。
Java のみの世界では、この優れたブログで説明されているように、Java の writeReplace メソッドと readResolve メソッドを使用します。
これは、livecycle が writeReplace メソッドを呼び出し、シリアル化のために不変クラスを可変クラスに適切に置き換えることを期待して、私が最初に Java クラスを作成した方法です。ただし、lcds は writeReplace メソッドについて何も知らず、readResolve と writeReplace を無視して readExternal/writeExternal のみを呼び出すように見えます。
まず、他の人がこれに該当することを発見しましたか、それとも私は何かを見逃していますか?
次に、actionscript クラスを不変オブジェクトまたはシングルトンに逆シリアル化する適切な方法を思いついた人はいますか?
どうもありがとう
nhibernate - NHibernateが不変のクラスインスタンスを削除するのはなぜですか?
アプリをNHibernate1.xから2.1に移行しようとしていますが、奇妙なことに気づきました。統合テストで不変オブジェクトが削除されています。
たとえば、このテストは以前は合格していました。
タイプがmutable="false"でマップされているインスタンスを削除しようとするため、CommitChangesの呼び出しがスローされます。ただし、予期される例外タイプを更新した後、このテストは失敗します(例外がスローされないため)。データベースをチェックしてテストをトレースしたところ、レコードが作成され、インスタンスが読み込まれ、その後、レコードが再び削除されます。
問題のクラスは、別のクラスと同じテーブルにマップされます。これは、多かれ少なかれ、そのデータのサブセットの読み取り専用ビューとして意図されています。クラスマッピングは次のとおりです。
基本的なものが欠けていると思いますが、可変属性が無視される可能性がある理由でWebを精査していて、空になっています。
アップデート:
Log4Netでログを記録すると、NHibernateがデータベースに削除コマンドを送信していたことは明らかです。
python - Pythonの文字列とタプルが不変になるのはなぜですか?
文字列とタプルが不変にされた理由はわかりません。それらを不変にすることの長所と短所は何ですか?
java - Java における文字列の不変性
次の例を考えてみましょう。
現在、Java では、String オブジェクトは不変です。では、どうしてオブジェクトstr
に「ヘルプ!」という値を割り当てることができるのでしょうか。これは、Java における文字列の不変性に矛盾していませんか? 誰でも不変性の正確な概念を説明してもらえますか?
編集:
Ok。私は今それを手に入れていますが、フォローアップの質問は1つだけです。次のコードはどうでしょうか。
これは、2 つのオブジェクト ("Mississippi" と "M!ss!ss!pp!") が再度作成され、参照がメソッドstr
の後に別のオブジェクトを指していることを意味しますか?replace()
c# - フォントが不変なのはなぜですか?
フォントが不変であることは、毎回新しいインスタンスを作成する必要があるため、プログラマーと GC の両方を悩ませます。
では、なぜ Font は不変の参照型なのでしょうか?