タグ付けされた質問 「immutability」

不変性とは、作成後にデータを変更できないことです。代わりに、データをコピーして変更を行います。不変データの特性は、それが*参照的に透過的*であることです。

7
不変コレクションと変更不可能なコレクション
以下からのコレクションフレームワークの概要: 変更操作をサポートしていないコレクションは、(のようなadd、removeとclear)と呼ばれている変更不可能。変更不可でないコレクションは変更可能です。 Collectionオブジェクトの変更が表示されないことをさらに保証するコレクションは、不変と呼ばれます。不変でないコレクションは変更可能です。 区別がつかない。ここで変更不可と不変の 違いは何ですか?

13
API設計で「パラメーターが多すぎる」問題を回避するにはどうすればよいですか?
私はこのAPI関数を持っています: public ResultEnum DoSomeAction(string a, string b, DateTime c, OtherEnum d, string e, string f, out Guid code) 嫌いです。パラメータの順序が不必要に重要になるからです。新しいフィールドを追加するのが難しくなります。何が渡されているかを確認するのは困難です。メソッドを小さな部分にリファクタリングすることは、サブ関数ですべてのパラメータを渡すという別のオーバーヘッドが発生するため、難しくなります。コードは読みにくいです。 私は最も明白なアイデアを思いつきました:データをカプセル化するオブジェクトを持ち、各パラメーターを1つずつ渡すのではなく、渡します。これが私が思いついたものです: public class DoSomeActionParameters { public string A; public string B; public DateTime C; public OtherEnum D; public string E; public string F; } これにより、API宣言が次のように減少しました。 public ResultEnum DoSomeAction(DoSomeActionParameters parameters, out Guid …

14
Javaの不変配列
Javaのプリミティブ配列の不変の代替はありますか?プリミティブ配列を作成finalしても、実際に次のようなことを行うことは妨げられません final int[] array = new int[] {0, 1, 2, 3}; array[0] = 42; 配列の要素を変更できないようにしたい。

14
「凍結された口述」とは何でしょうか?
フリーズセットは、フリーズセットです。 フリーズされたリストはタプルになる可能性があります。 凍結されたdictは何でしょうか?不変でハッシュ可能な辞書。 私はそれがのようなものかもしれないと思いますがcollections.namedtuple、それは凍結キー辞書(半凍結辞書)に似ています。だよね? 「frozendict」凍結された辞書である必要があり、それが持っている必要がありkeys、values、get、など、サポートin、forなど 更新: *あります:https : //www.python.org/dev/peps/pep-0603

8
エラー:「戻り値を変更できません」c#
自動実装プロパティを使用しています。以下を修正する最も速い方法は、自分のバッキング変数を宣言することだと思いますか? public Point Origin { get; set; } Origin.X = 10; // fails with CS1612 エラーメッセージ:変数ではないため、 '式'の戻り値を変更できません 中間式の結果である値タイプを変更しようとしました。値は永続化されないため、値は変更されません。 このエラーを解決するには、式の結果を中間値に格納するか、中間式の参照型を使用します。

15
オブジェクトのプロパティを不変に削除する
Reduxを使用しています。私のレデューサーでは、次のようにオブジェクトからプロパティを削除しようとしています: const state = { a: '1', b: '2', c: { x: '42', y: '43' }, } そして、私は元の状態を変更することなく、このようなものを持ちたいです: const newState = { a: '1', b: '2', c: { x: '42', }, } 私は試した: let newState = Object.assign({}, state); delete newState.c.y しかし、いくつかの理由により、両方の州からプロパティが削除されます。 それを行うのに役立ちますか?

13
ES6でのJavaScriptの列挙型
私はJavascriptで古いJavaプロジェクトを再構築していて、JSで列挙型を行う良い方法がないことに気づきました。 私が思いつくことができる最高のものは: const Colors = { RED: Symbol("red"), BLUE: Symbol("blue"), GREEN: Symbol("green") }; Object.freeze(Colors); const続けてColors再割り当てされているから、それがキーと値を変異防止凍結します。私はシンボルを使用しているので、それColors.REDはと等しくない0か、それ以外のものは何でもありません。 この処方に問題はありますか?もっと良い方法はありますか? (私はこの質問が少し繰り返されることを知っていますが、以前のすべてのQ / Aはかなり古く、ES6はいくつかの新しい機能を提供します。) 編集: シリアル化の問題を処理する別の解決策ですが、まだレルムの問題があると思います。 const enumValue = (name) => Object.freeze({toString: () => name}); const Colors = Object.freeze({ RED: enumValue("Colors.RED"), BLUE: enumValue("Colors.BLUE"), GREEN: enumValue("Colors.GREEN") }); 値としてオブジェクト参照を使用することにより、シンボルと同じ衝突回避が得られます。

8
ステートレスプログラミングの利点?
私は最近関数型プログラミングについて学んでいます(特にHaskellですが、LispとErlangのチュートリアルも行ってきました)。概念が非常に啓発的であることがわかりましたが、「副作用なし」の概念の実際的な側面はまだわかりません。それの実際的な利点は何ですか?私は関数型の考え方で考えていますが、簡単な方法で状態を保存する機能がないと、非常に複雑に見える状況もあります(Haskellのモナドは「簡単」とは考えていません)。 Haskell(または他の純粋な関数型言語)を詳細に学習し続ける価値はありますか?関数型プログラミングまたはステートレスプログラミングは、手続き型プログラミングよりも実際に生産的ですか?Haskellや他の関数型言語を今後も使用する可能性はありますか、それとも理解のためだけに学習すべきですか? 私は生産性よりもパフォーマンスを気にしません。したがって、私は主に、手続き型/オブジェクト指向/その他よりも関数型言語でより生産的になるかどうかを尋ねています。


10
状態配列にプッシュする正しい方法
データを状態配列にプッシュする際に問題が発生しているようです。私はそれをこの方法で達成しようとしています: this.setState({ myArray: this.state.myArray.push('new value') }) しかし、これは間違った方法であり、可変性の問題を引き起こすと思いますか?


6
Java不変コレクション
以下からのJava 1.6コレクションフレームワークのドキュメント: 任意の変更操作を(のようなサポートしていないコレクションはadd、removeとclear)と呼ばれている変更不可能。[...]さらに、Collectionオブジェクトの変更が表示されないことを保証するコレクションは、不変と呼ばれます。 2番目の基準は少し混乱します。最初のコレクションは変更できず、元のコレクション参照が破棄されていると仮定すると、2行目で参照されている変更は何ですか?それはコレクションに保持されている要素の変化、つまり要素の状態を参照していますか? 2番目の質問: コレクションを不変にするには、指定された追加の保証人をどのように提供しますか?コレクション内の要素の状態がスレッドによって更新される場合、状態のそれらの更新が不変のコレクションを保持するスレッドに表示されないことは不変性にとって十分ですか? コレクションを不変にするには、指定された追加の保証を提供するにはどうすればよいですか?

6
不変クラスを作成するにはどうすればよいですか?
私は不変クラスの作成に取り組んでいます。 すべてのプロパティを読み取り専用としてマークしました。 クラスのアイテムのリストがあります。 ただし、プロパティが読み取り専用の場合は、リストを変更できます。 リストのIEnumerableを公開すると、不変になります。 クラスを不変にするために従う必要のある基本的なルールは何ですか?
113 c#  .net  immutability 


2
moment.jsの可変性を回避するにはどうすればよいですか?
モーメントオブジェクトの初期値を保存する必要があるという問題に遭遇しましたが、元のオブジェクトと一緒に変数が変更されないようにするのに問題があります。 残念ながら、Object.freeze()は機能しません。moment.jsがフォーマットしようとすると、「無効な日付」エラーが返されるためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.