- - PR -
配列 vs コレクション(戻り値)
投票結果総投票数:49 | |||
---|---|---|---|
配列に変換して返す | 11票 | 22.45% | |
Listのまま返す | 34票 | 69.39% | |
常に戻り値には配列を使う | 2票 | 4.08% | |
常に戻り値にはコレクションを使う | 2票 | 4.08% | |
|
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-17 13:25
Chapters自体は読み取り専用でも、
Chaptersの中身を不変にすることはできないですよね。 | ||||||||||||||||
|
投稿日時: 2008-11-17 13:28
おっしゃる通り、外からの変更を許可するのならば、メソッドではなくプロパティにしますね。 _________________ C#と諸々 | ||||||||||||||||
|
投稿日時: 2008-11-17 14:07
補足します。
「読み取り専用のプロパティ」という点についてですが、僕も同じく読み取り専用プロパティにします。 rain さんもそうなのだと思いますが、コレクションが読み取り専用かどうかに関わらずコレクションのプロパティは読み取り専用にします。(フィールドレベルで readonly を付加してます。) コレクションそのものの入れ替えができた方が好ましい場合はセッターを設けますが、そのようなケースは思い浮かばないです。 _________________ C#と諸々 | ||||||||||||||||
|
投稿日時: 2008-11-17 14:26
「Listのまま返す」に1票入れました。
理由は、「使いやすいから(個人主観で)常にList」です。 「オブジェクトの外で、コレクションの変更を認めるかどうか」で、 配列・Listを使い分けるというご意見についてですが、 たとえ配列でも、Bookのメンバをそのまま返却していれば、外部での変更が Book内部に影響を及ぼしますし、外部は、返却された配列が、 toArrayで生成されたインスタンスなのか、 Bookのメンバで保持しているインスタンスなのかは分かりません。 戻り値が配列であれ、Listであれ、 「オブジェクトの外で、コレクションの変更を認めるかどうか」は 同一インスタンスを返却するか、別インスタンスを生成して返却するか、で 決定するものと考えております。 | ||||||||||||||||
|
投稿日時: 2008-11-17 15:07
Chapters を readonly にした意図は、よこけんさんに補足してもらった通りです。
元の質問も改めて読んでみました。こっちの意味のようですね。 スレを脱線させてしまったみたいですみません。 # 私なら↓こう書くかも
| ||||||||||||||||
|
投稿日時: 2008-11-17 16:09
オブジェクトの外でのコレクションの変更を認めない、ということを厳密に示すには ReadOnlyCollection でしょうね。 (プロパティではなく) メソッドの戻り値が配列型ならば、Book内部に影響を及ぼすとはあまり考えないかなと思いますが、 これは主観でしかないかもしれませんね。 _________________ C#と諸々 | ||||||||||||||||
|
投稿日時: 2008-11-17 17:55
すみません!勝手にBookはChapterをメンバに保持している妄想をして、書いていました。 で、「返却したインスタンスが外部で変更された時、Bookの状態に影響を与えたく無い場合は配列」という 論拠であれば、これはインスタンスの扱いの違いで、シグニチャの選択基準とはチョット違うのでは? という反抗心でした。(List派が不利っぽかったので) よこけん様の言われるとおり、返却したChapter自体の変更を一切禁止する目的であれば、 ReadOnlyCollectionしかなく、これも、配列 or Listのシグニチャ選択とは少し別問題かと思いますので、 やはり私は、Listが好きという主観と便利さで、「Listのまま」に1票です・・ (低レベルな意見でゴメンナサイ) | ||||||||||||||||
|
投稿日時: 2008-11-17 23:49
あれ?スレ主さんの最初の投稿を見るに、「Book は Capter をメンバに保持している」で良いのでは?
僕は「Book は Capter をメンバに保持している」を前提にレスしていまして、スレ主さんが最初に挙げた例はシグネチャ選択以前の問題と捉えています。 また、次のような特定の条件を満たす要素を抽出して返すメソッドなどについては、僕は言及していません。
んー、外部からの変更を想定していない (≒変更されると困る) 場合でも List を (コピーせず) そのまま返すのですか? されると困るのに禁止しないのは危険であり不便だと僕は思います。 _________________ C#と諸々 |