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

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

27
Pythonの文字列から特定の文字を削除する
Pythonを使用して文字列から特定の文字を削除しようとしています。これは私が今使っているコードです。残念ながら、それは文字列に対して何もしないようです。 for char in line: if char in " ?.!/;:": line.replace(char,'') これを正しく行うにはどうすればよいですか?



17
不変とはどういう意味ですか?
これはこれまでに尋ねられた最も馬鹿げた質問かもしれませんが、Javaの初心者にはかなり混乱していると思います。 誰かが不変の意味を明確にできますか? なぜString不変ですか? 不変オブジェクトの利点/欠点は何ですか? StringBuilderString などの可変オブジェクトを優先する必要があるのはなぜですか? (Javaでの)良い例は本当にありがたいです。

15
Java文字列は本当に不変ですか?
StringJavaでは不変であることは誰もが知っていますが、次のコードを確認してください。 String s1 = "Hello World"; String s2 = "Hello World"; String s3 = s1.substring(6); System.out.println(s1); // Hello World System.out.println(s2); // Hello World System.out.println(s3); // World Field field = String.class.getDeclaredField("value"); field.setAccessible(true); char[] value = (char[])field.get(s1); value[6] = 'J'; value[7] = 'a'; value[8] = 'v'; value[9] = 'a'; value[10] = '!'; …

17
JavaScriptでのconst:いつそれを使用し、それは必要ですか?
最近const、JavaScriptでこのキーワードを見つけました。私が知ることができることから、それは不変の変数を作成するために使用され、それが再定義できないことを確認するためにテストしました(Node.jsで): const x = 'const'; const x = 'not-const'; // Will give an error: 'constant 'x' has already been defined' すべてのブラウザーでまだ標準化されていないことに気づきましたが、私はNode.js V8のコンテキストにのみ関心があり、特定の開発者/プロジェクトは、varキーワードを同じ効果。 だから私の質問は: const代わりにvarいつ使用するのが適切ですか? 再割り当てされない変数が宣言されるたびに使用する必要がありますか? のvar代わりに使用した場合、constまたはその逆の場合、実際に違いは ありますか?

30
不変コレクションの非変更「追加」メソッドに最適な名前は何ですか?
気まずいタイトルで申し訳ありません-簡潔なタイトルを思い付くことができれば、質問する必要はありません。 不変のリストタイプがあるとします。Foo(x)最後に追加の要素として指定された引数を持つ新しい不変のリストを返す操作があります。したがって、値が「Hello」、「immutable」、「world」の文字列のリストを作成するには、次のように記述します。 var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (これはC#コードであり、言語が重要だと思う場合は、C#の提案に最も興味があります。これは基本的に言語の問題ではありませんが、言語のイディオムは重要かもしれません。) 重要なことは、既存のリストはによって変更されないFooため、empty.Count0を返すことです。 最終結果に到達する別の(より慣用的な)方法は次のとおりです。 var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); 私の質問は、Fooの最高の名前は何ですか? 編集3:後で明らかにするように、型の名前は実際にImmutableList<T>はとは限らないため、位置が明確になります。代わりに、それがTestSuite不変であることを想像してください。それが含まれているフレームワーク全体が不変だからです... (編集終了3) これまでに思いついたオプション: Add:.NETで一般的ですが、元のリストの変更を意味します Cons:これは関数型言語では通常の名前だと思いますが、そのような言語の経験がない人には無意味です Plus:これまでのところ私のお気に入り、それは私に突然変異を意味するものではありません。どうやらこれはHaskellでも使用されているようですが、期待が少し異なります(Haskellプログラマーは、単一の値を他のリストに追加するのではなく、2つのリストを一緒に追加することを期待するかもしれません)。 With:他の不変の慣例と一致していますが、IMOとまったく同じ「追加機能」はありません。 And:あまり説明的ではない +の演算子のオーバーロード:本当にこれが好きではありません。一般に、演算子は下位レベルのタイプにのみ適用する必要があると思います。でも、私は説得されても大丈夫です! 私が選択に使用している基準は次のとおりです。 メソッド呼び出しの結果の正しい印象を与える(つまり、追加の要素を含む元のリストである) 既存のリストを変更しないことを可能な限り明確にする 上記の2番目の例のように連結すると妥当な音 はっきりしない場合は、詳細を尋ねてください... EDIT 1:ここに好むのための私の推論ですPlusしAdd。次の2行のコードを検討してください。 list.Add(foo); list.Plus(foo); 私の見解では(これは個人的なことですが)後者は明らかにバグがあります-「x + …

3
コメント「frozen_string_literal:true」は何をしますか?
これはrspec私のプロジェクトディレクトリのbinstubです。 #!/usr/bin/env ruby begin load File.expand_path("../spring", __FILE__) rescue LoadError end # frozen_string_literal: true # # This file was generated by Bundler. # # The application 'rspec' is installed as part of a gem, and # this file is here to facilitate running it. # require "pathname" ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) …

26
Javaにおける文字列の不変性
次の例を考えてみましょう。 String str = new String(); str = "Hello"; System.out.println(str); //Prints Hello str = "Help!"; System.out.println(str); //Prints Help! 現在、Javaでは、Stringオブジェクトは不変です。次に、オブジェクトにstr値「Help!」を割り当てることができる理由を説明します。これは、Javaの文字列の不変性と矛盾していませんか?不変性の正確な概念を誰かに説明してもらえますか? 編集: OK。私はそれを得ています、しかしただ一つのフォローアップ質問。次のコードはどうですか: String str = "Mississippi"; System.out.println(str); // prints Mississippi str = str.replace("i", "!"); System.out.println(str); // prints M!ss!ss!pp! これは、2つのオブジェクト( "Mississippi"および "M!ss!ss!pp!")が再度作成され、参照がメソッドのstr後の別のオブジェクトを指すことを意味しreplace()ますか?


11
JavaScriptで不変性がそれほど重要(または必要)なのはなぜですか?
私は現在、React JSとReact Nativeフレームワークに取り組んでいます。途中、FacebookのFluxとReduxの実装について読んでいたときに、ImmutabilityまたはImmutable-JSライブラリに遭遇しました。 問題は、なぜ不変性がそれほど重要なのかということです。オブジェクトの変更の何が問題になっていますか?それは物事を単純にしませんか? 例を挙げて、オープニング画面がニュースの見出しのリストビューである単純なニュースリーダーアプリを考えてみましょう。 最初に値を持つオブジェクトの配列と言うと、最初は操作できません。それは不変性の原則が言っていることですよね?(間違っている場合は修正してください。)しかし、更新する必要がある新しいNewsオブジェクトがある場合はどうなりますか?通常の場合は、オブジェクトを配列に追加するだけで済みます。この場合、どうすれば達成できますか?ストアを削除して再作成しますか?オブジェクトを配列に追加する方が安価な操作ではありませんか?

16
不変型と可変型
不変型とは何なのか混乱しています。私のfloatオブジェクトが不変であると考えられていることを知っています。 class RoundFloat(float): def __new__(cls, val): return float.__new__(cls, round(val, 2)) これは、クラスの構造/階層のために不変であると見なされていますか?つまりfloat、クラスの最上位にあり、独自のメソッド呼び出しです。このタイプの例と似ています(たとえ私の本にdict変更可能とありますが): class SortedKeyDict(dict): def __new__(cls, val): return dict.__new__(cls, val.clear()) これに対して、次のタイプの例では、ミュータブルにはクラス内にメソッドがあります。 class SortedKeyDict_a(dict): def example(self): return self.keys() また、最後のについて、class(SortedKeyDict_a)このタイプのセットをそれに渡した場合: d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2)) exampleメソッドを呼び出さずに、辞書を返します。エラーとしてフラグを立てます。クラスに整数を渡してみましたが、エラーは報告されませんでした。SortedKeyDict__new__RoundFloat__new__

24
Pythonで不変オブジェクトを作成する方法は?
私はこれを必要としたことは一度もありませんが、Pythonで不変オブジェクトを作成するのは少し注意が必要かもしれないと思いました。をオーバーライドすることはできません。これ__setattr__は、で属性を設定することもできないためです__init__。タプルのサブクラス化はうまくいくトリックです: class Immutable(tuple): def __new__(cls, a, b): return tuple.__new__(cls, (a, b)) @property def a(self): return self[0] @property def b(self): return self[1] def __str__(self): return "<Immutable {0}, {1}>".format(self.a, self.b) def __setattr__(self, *ignored): raise NotImplementedError def __delattr__(self, *ignored): raise NotImplementedError しかし、その後、あなたはへのアクセス持っているaとb変数スルーをself[0]してself[1]迷惑しています、。 これはPure Pythonで可能ですか?そうでない場合は、C拡張機能でどうすればよいですか? (Python 3でのみ機能する回答は許容されます)。 更新: したがって、タプルをサブクラス化することは、Pure Pythonでそれを行う方法であり[0]、[1]などによってデータにアクセスする追加の可能性を除いてうまく機能します。したがって、この質問を完了するには、Cで「適切に」行う方法だけです。geititemor setattributeなどを実装しないだけで、非常に単純になると思います。しかし、自分で行うのではなく、怠惰なので、そのための報奨金を提供します。:)


11
可変オブジェクトと不変オブジェクト
私は、可変オブジェクトと不変オブジェクトの両方を理解しようとしています。可変オブジェクトを使用すると、多くの悪い結果(たとえば、メソッドから文字列の配列を返すなど)が発生しますが、これによる悪影響について理解できません。可変オブジェクトの使用に関するベストプラクティスは何ですか?可能な限り回避する必要がありますか?

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