問題タブ [mutable]

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

string - 文字列に関して、「変更可能」という言葉は「変更可能」という言葉と同じですか?

文字列が変更可能であると話すとき、これは「変更可能」または「変更可能」という言葉を使用することと同義ですか、それとも「変更可能」のような単純な言葉の代わりにこの専門用語が使用される理由を説明する追加のニュアンスがありますか?

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

cocoa - NSMutableArray を他のクラスに渡す

I have created an NSMutableArray in the implementation of my class loginController. The mutable array contains a set of strings. I want to pass the mutable array with its objects to other classes within my cocoa-project. What is the best way to pass the array?

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

language-design - 可変または不変のクロージャ

命令型のオブジェクト指向言語では、ミュータブルまたはイミュータブルなクロージャーを持つ方が理にかなっていますか?

例えば:

クロージャーが変更可能な場合、これは次のように出力されます。

不変の場合は、次のように出力されます。

不変のクロージャーを使用しても、これを実行できることを認識しています。

では、ミュータブルまたはイミュータブルなクロージャーを用意した方がよいでしょうか、それとも両方のオプションを用意したほうがよいのでしょうか? イミュータブル クロージャは実装しやすいように思われるので、現時点では、そうしない正当な理由がない限り、それを使用すると思います。

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

reference - 可変値オブジェクト / 状態の共有 (そしてビール醸造!)

私はさびついたプログラマーで、再び現場で学ぼうとしています。ふさわしく、独学と正式な教育の両方がいくつかの悪い習慣を引き起こしていることを発見しました. そういうわけで、私は良いデザイン パターン、ひいては、それらが間違っている場合について頭を悩ませようとしています。言語はJavaで、これが私の問題です:

ビール醸造を支援するソフトウェアを作成しようとしています。醸造では、レシピで求められているものを特定の種類のホップで代用しなければならないことがあります. たとえば、「アマリロ」ホップを必要とするレシピがあるかもしれませんが、代わりに十分に類似した香りを持つ「カスケード」しか得られません。ホップには(所定の質量あたりの)アルファ酸量があり、2 つのホップ間の比率は置換式の一部です。私は自分のプログラムでこれを(適切に)モデル化しようとしています。

私の最初の目的は、2 つのオブジェクトを持つことです。1HopVarietyつはさまざまなホップに関する一般的な説明情報を含む a で、もう 1 つHopIngredientは a の特定のインスタンス化であり、特定のHopVarietyレシピで使用される量も含まれます。HopIngredientその多様性についての知識が必要であり、そのHopVariety代わりに何が使用できるかについての知識が必要です (すべての置換が対称的であるとは限りません)。これは良いOOPのようです。

問題はこれです: 私は良い習慣に従い、値オブジェクトを不変にしようとしています。(私の頭では、 and を「アクター」ではなく値オブジェクトとして分類HopVarietyHopIngredientています。)ただし、ユーザーが特定の HopVariety を新しい実行可能な置換で更新できるようにする必要があります。不変性に従うと、これらの変更は個々の成分に伝播しません。可変性を選択した場合、可変値オブジェクトを共有することで副作用が発生する可能性があるため、動作がおかしくなりました。

したがって、オプション B: ある種の VarietyCollection を導入し、名前または一意の識別子を使用して材料と品種を緩やかに結合します。そして、VarietySubstitutionManager は、品種が他の品種への参照を保持せず、ID のみを保持するようにします。多様性オブジェクトへの参照を保持することは直感的に理にかなっているため、これは私がやりたいこととは反対です。そして今、過剰なレベルの抽象化のように感じるものを導入し、関数をデータから分離しています。

では、特定のインスタンスに相当するものの間で状態を適切に共有するにはどうすればよいでしょうか? 問題を解決するための適切な、または少なくとも最も健全な方法は何ですか?

0 投票する
7 に答える
2118 参照

c++ - この場合、適切な C++ ミュータブル?

ここでミュータブルの使用が適切かどうかお尋ねしたいと思います。

Base クラスはサードパーティのライブラリです。私はそれを拡張して、独自の NoMod() を提供しています。ライブラリ独自の NoMod() を const として宣言しています。

私の NoMod() は、独自のメンバー変数を変更する必要があるという点で Base とは異なります。

したがって、自分の NoMod() をコンパイルして、Draw() が呼び出されたときに呼び出されるようにするには、

1) Derive::NoMod() を const として実装し
ます。 2) int y を変更可能にします。

これは私ができる最善のことですか?

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

ruby - RubyはC++Constと同等ですか?

暇なときにRubyを学んでいますが、定数の言語構成について質問があります。Rubyには、変数が変更されないようにするためのC ++ constキーワードに相当するものがありますか?次にいくつかのサンプルコードを示します。

column_countをconstとして宣言したいのは、以下のプログラムで使用していて、誤って変更したくないためです。Rubyはこれを行うための言語構造を提供しますか、それとも私はそれを吸い上げて、私の変数が常に可変であることを理解する必要がありますか?

コメントへの回答:

「変数の「偶発的な」上書きの最も可能性の高い原因は、おそらく、コードの長いブロックです。」私はあなたの主張の精神に同意しますが、手紙には同意しません。コードの長いブロックや不要な状態を回避することについてのあなたのポイントは良いものですが、定数については、実装内のコードの設計を説明するのにも役立ちます。コード内のconstの値の大部分は、変更する必要がある変数と変更しない変数に注釈を付けることで得られるため、来年コードに戻っても変更したくありません。これは、適切な変数名と明確なインデントのために短いコメントを使用するコードが、詳細なコメントで説明される厄介に書かれたコードよりも優れていることを示唆するのと同じ感情です。

もう1つのオプションは、Rubyの#freezeメソッドのようです。これも、見た目が気に入っています。みなさん、ありがとうございました。

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

memory - 変更可能な状態値がヒープから解放されるのはいつですか?

F# WikiBook のEncapsulating Mutable Stateセクションには、次のコード スニペットがあります。

最初は、変更可能な値が呼び出されるたびにcounterインクリメントされるという事実を飲み込むのは簡単に思えました。incr

しかし、しばらく考えた後、私が理解できなかったのは、いつcounterヒープから解放され、counterインクリメントされる前に以前の値をどのように参照しているのかということでした。counter関数スコープ内での生活は、incr複数の関数呼び出しを通じてどのように生き残るのでしょうか?

主な質問は次のとおりです。

  • いつcounterヒープから解放されますか?
  • counterメモリリークじゃない?
0 投票する
4 に答える
780 参照

c++ - C++ クラスでの遅延計算の処理

クラスがあるとしましょう:

insert()に要素を追加する場所easySet_difficultSet_のメンバーは のメンバーによって変わりeasySet_ます。

私が抱えている問題は、複数の挿入difficultSet_が常に再計算されることを意味することです。difficultSet_そのため、遅延計算を行いたい(つまり、 difficultBegin()difficultEnd()、またはdifficultSize()が呼び出された場合のみ)。問題は、それ以外の場合は操作できないため、実際に作成する必要があることですdifficultSet_mutabledifficultSize()

だから今、私のクラス宣言は次のようになります

ただ、これはデザインが悪い気がします。より良い方法はありますか?

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

c# - 並列アプリケーションの可変と不変

私が作成しているアプリケーションでは、不変である可能性が高い多くの基本型を作成する必要があります。しかし、可変型と不変型が並列アプリケーションでどのように比較されるのか疑問に思っています。

変更可能なオブジェクトでロックを使用できますよね? 並列アプリケーションで不変型に使用される他の手法と比べてどうですか?

少なくとも、不変型のロックを使用することから離れていますよね?

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

reflection - F# ミュータブルからイミュータブルへ

皆様、

私は最近、いくつかの F# に手を出していて、いくつかの C# コードから移植した次の文字列ビルダーを思いつきました。属性で定義された正規表現を渡す場合、オブジェクトを文字列に変換します。目の前のタスクにはおそらくやり過ぎですが、学習目的のためです。

現在、BuildString メンバーは変更可能な文字列変数 updatedTemplate を使用しています。私は、可変オブジェクトなしでこれを行う方法を見つけ出すために頭を悩ませてきましたが、役に立ちませんでした。それが私の質問につながります。

変更可能なオブジェクトなしで BuildString メンバー関数を実装することは可能ですか?

乾杯、

マイケル