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

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

8
不変とはどういう意味ですか?
文字列が不変である場合、それはそれが意味することを意味しますか?...(JavaScriptと仮定しましょう) var str = 'foo'; alert(str.substr(1)); // oo alert(str); // foo 文字列のメソッドを呼び出すと、変更された文字列が返されますが、最初の文字列は変更されません。 文字列が変更可能だった場合、2番目も同様にalert()返さooれるということですか?

10
整数は不変
これはおそらく非常に愚かであることは知っていますが、多くの場合、JavaのIntegerクラスは不変であると主張していますが、次のコードは Integer a=3; Integer b=3; a+=b; System.out.println(a); 問題なく実行され、(期待される)結果が得られます。つまり、aの値が実質的に変更されています。それは、整数が変更可能であることを意味しませんか?二次的な質問とちょっとした話題:「不変のクラスはコピーコンストラクタを必要としません」。誰もが理由を説明してくれませんか?

5
Scalaのval-mutableとvar-immutableの比較
可変コレクションでvalを使用する場合と、不変コレクションでvarを使用する場合について、Scalaにガイドラインはありますか?それとも、不変のコレクションでvalを本当に目指すべきでしょうか? 両方の種類のコレクションがあるという事実は、私に多くの選択肢を与えてくれます、そして私はしばしばその選択をする方法を知りません。

9
長いパラメーターリストを持つコンストラクターを使用せずに大きな不変オブジェクトを構築する
私はいくつかの大きな(3つ以上のフィールド)オブジェクトを持っていますが、それらは不変である必要があります。そのような場合に遭遇するたびに、長いパラメーターリストを使用してコンストラクターのabominationを作成する傾向があります。 違和感があり、使いづらく、読みやすさが低下します。 フィールドがリストのようなある種のコレクション型である場合はさらに悪いことです。simple addSibling(S s)はオブジェクトの作成を非常に簡単にしますが、オブジェクトを変更可能にします。 このような場合、皆さんは何を使用しますか? 私はScalaとJavaを使用していますが、言語がオブジェクト指向である限り、問題は言語にとらわれないものだと思います。 私が考えることができるソリューション: 「長いパラメーターリストによるコンストラクターの嫌悪感」 ビルダーパターン
96 java  oop  scala  immutability 

8
変更なしでオブジェクトから値を削除します
元のオブジェクトを変更せずに、特定のキーのオブジェクトから値を削除するための良い方法は何ですか? 私は次のようなことをしたいと思います: let o = {firstname: 'Jane', lastname: 'Doe'}; let o2 = doSomething(o, 'lastname'); console.log(o.lastname); // 'Doe' console.log(o2.lastname); // undefined そのようなタスクのための多くの不変性ライブラリーがあることは知っていますが、ライブラリーなしで済ませたいです。しかし、これを行うには、メソッドをユーティリティ関数として抽象化せずに、コード全体で使用できる簡単で短い方法が必要です。 たとえば、値を追加するには、次のようにします。 let o2 = {...o1, age: 31}; これは非常に短く、覚えやすく、ユーティリティ関数を必要としません。 値を削除するためにこのようなものはありますか?ES6は大歓迎です。 どうもありがとうございました!

7
Swiftの不変/可変コレクション
Swift言語での可変/不変オブジェクト(配列、辞書、セット、データ)の作成を理解するために、AppleのSwiftプログラミングガイドを参照していました。しかし、Swiftで不変のコレクションを作成する方法を理解できませんでした。 Objective-Cで次のSwiftに相当するものを見たいです 不変の配列 NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; 可変配列 NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; [mArray addObject:@"Fourth"]; 不変の辞書 NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; 可変辞書 NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; [mDictionary setObject:@"Value3" forKey:@"Key3"];

8
C#で複数の文字列要素を置き換える
これを行うためのより良い方法はありますか... MyString.Trim().Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace("/", "").ToLower(); 文字列クラスを拡張して1つのジョブに抑えましたが、もっと速い方法はありますか? public static class StringExtension { public static string clean(this string s) { return s.Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace(".", "") .Replace("eacute;", "é").ToLower(); } } 楽しみのために(そしてコメントの議論を止めるために)、以下のさまざまな例のベンチマークの要点を示しました。 https://gist.github.com/ChrisMcKee/5937656 正規表現オプションのスコアはひどいです。辞書オプションが最も速く表示されます。stringbuilder replaceの長巻きバージョンは、速記よりもわずかに高速です。

13
不変のクラス?
Javaクラスを不変にするにはどうすればよいですか?不変性の必要性は何ですか?これを使用する利点はありますか?

1
Reduxは単にグローバルな状態を称賛しただけではありませんか?
そのため、1週間前にReactの学習を開始しましたが、必然的に状態の問題と、コンポーネントがアプリの他の部分とどのように通信するかという問題に直面しました。探し回ったところ、Reduxが今月の味のようです。私はすべてのドキュメントを読みましたが、実際にはかなり革新的なアイデアだと思います。これが私の考えです: 州は一般的にかなり邪悪であり、プログラミングのバグの大きな原因であることに同意しています。アプリ全体に分散させるのではなく、Reduxは、変更するアクションを発行する必要があるグローバル状態ツリーにすべてを集中させないのはなぜですか?面白そう。すべてのプログラムには状態が必要なので、1つの不純なスペースに貼り付け、そこからのみ変更して、バグを簡単に追跡できるようにします。次に、個々の状態の断片をReactコンポーネントに宣言的にバインドし、それらを自動再描画させることもできます。すべてが美しいです。 ただし、このデザイン全体について2つの質問があります。まず、状態ツリーが不変である必要があるのはなぜですか?タイムトラベルのデバッグやホットリロードは気にせず、アプリに元に戻す/やり直しをすでに実装しているとします。これをしなければならないのはとても面倒に思えます: case COMPLETE_TODO: return [ ...state.slice(0, action.index), Object.assign({}, state[action.index], { completed: true }), ...state.slice(action.index + 1) ]; これの代わりに: case COMPLETE_TODO: state[action.index].completed = true; 言うまでもなく、私は学ぶためだけにオンラインホワイトボードを作成しています。すべての状態変更は、コマンドリストにブラシストロークを追加するのと同じくらい簡単かもしれません。しばらくすると(数百のブラシストローク)、このアレイ全体を複製すると、非常に費用と時間がかかるようになる可能性があります。 アクションを介して変更されるUIから独立したグローバル状態ツリーで問題ありませんが、本当に不変である必要がありますか?このような単純な実装(非常にラフなドラフト。1分で記述)の何が問題になっていますか? var store = { items: [] }; export function getState() { return store; } export function addTodo(text) { store.items.push({ "text": text, "completed", false}); …



11
Javaで不変クラスfinalを宣言するのはなぜですか?
クラスをJavaで不変にするために、次のことを行う必要があることを読みました。 セッターを提供しないでください すべてのフィールドをプライベートとしてマークする クラスを最終にする ステップ3が必要なのはなぜですか?なぜクラスにマークを付ける必要があるのfinalですか?

9
ハッシュ可能、不変
最近のSOの質問(リストでインデックス付けされたPythonでの辞書の作成を参照)から、Pythonでのハッシュ可能オブジェクトと不変オブジェクトの意味について間違った概念を持っている可能性があることに気付きました。 実際のハッシュ可能とはどういう意味ですか? ハッシュ可能と不変の関係は何ですか? ハッシュ可能である可変オブジェクトまたはハッシュ可能ではない不変オブジェクトはありますか?

6
System.Drawing.Color値を設定します
こんにちはR G B値を設定する方法System.Drawing.Color.G? System.Drawing.Color.G=255;読み取り専用であるため、これは許可されていません Property or indexer 'System.Drawing.Color.G' cannot be assigned toit is read only ColorカスタムR G B値を割り当ててオブジェクトを作成する必要があります

1
キーによるImmutableSortedDictionary範囲列挙
私はC#のについて読んでいたImmutableSortedDictionary中でSystem.Collections.Immutable、私のプログラムでそれを適用する方法を考えます。私はC ++ lower_boundとupper_bound(ここを参照)をかなり気に入っており、範囲検索のようなものを見たいと思っていました。ただし、同様のメソッドがドキュメントに不思議に欠けているようです。何か不足していますか?または、MSはソートされた範囲への効率的なアクセスなしにソートされた辞書を本当に提供しますか?それはIEnumerable、拡張メソッドのように、キーに対して実行できることとまったく同じではないようです。そのため、コレクションから直接提供されるものを見ていません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.