-1

具体的には、言語のすべての配列が変更可能ではないのはなぜですか?言語がそれらを持っている、または持っていない理由は何ですか (利点と欠点)?

4

1 に答える 1

1

内部では、メモリ内のすべてのバイトが「変更可能」です。配列 (たとえば、Objective-C) は、その中のある種のフラグまたは型インジケーターが不変であると述べているため、不変です。

基本的に、オブジェクトを不変にする理由は 3 つあります。

  1. セキュリティ/堅牢性 -- オブジェクトが動的に変更されないことを両側で確信して、オブジェクトをインターフェイスに渡すことができます。オブジェクトが渡された後の変更により、たとえば、パラメーターの有効性がチェックされた後に悪者がパラメーターを変更できるようになる可能性があります。
  2. 実装の容易さ -- 修正可能なオブジェクトよりも、固定された構造と内容を持つオブジェクトを構築する方が簡単かもしれません。
  3. 並行性 -- オブジェクトを動的に変更できる場合、2 つのスレッドで同時に変更を行った場合、または 1 つのスレッドで変更中に別のスレッドでアクセスした場合にどうなるかを考慮する必要があります。このような同時変更は、プログラムの誤動作やオブジェクト自体の不適切な動作の原因となる可能性があります。
于 2014-07-06T03:00:51.340 に答える