- - PR -
配列 vs コレクション(戻り値)
«前のページへ
1|2|3|4
投票結果総投票数:49 | |||
---|---|---|---|
配列に変換して返す | 11票 | 22.45% | |
Listのまま返す | 34票 | 69.39% | |
常に戻り値には配列を使う | 2票 | 4.08% | |
常に戻り値にはコレクションを使う | 2票 | 4.08% | |
|
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-18 00:44
うーん、うまく伝えられずに申し訳ありません・・・
上記あたりの「配列に変換して返す」派の方々の根拠を、私は以下のように受け取りました。 ----------------------------------------------------------------------------- (1)BookはList<Chapter>をメンバで保持している。 (2)Listのまま(コピーせず)返却すると、外部で値変更された場合、Bookに影響を与えてしまう。 (3)ToArrayすれば、外部で値変更されても問題ない。 ⇒だから、外部で変更を認めない場合は、配列とすべきである。 ----------------------------------------------------------------------------- 上記に対して、私は、 ----------------------------------------------------------------------------- ・(2)と(3)の違いは、インスタンスの扱い方の違いであって、配列かListかのシグニチャに依存するものではない。 ・(2)と(3)のいずれも、返却したオブジェクト自体を変更不可にする制約ではない。 ⇒だから、「外部で変更を許可しない場合は配列」理論には疑問を感じる。 なので、配列・Listを混在させるより、利便性・統一性から「Listのまま」に1票。 ----------------------------------------------------------------------------- という意見です。 ですから、
については、「No」で
上記で記述したとおり、配列・Listに限らず、外部からの変更を想定していない (≒変更されると困る) 場合は、 コピーした別インスタンスを返却します。 (たぶん、この点は、よこけん様と同意見です) 認識違いで、スレを混乱させていたら、本当にゴメンナサイ。 | ||||||||||||
|
投稿日時: 2008-11-18 02:50
多分、僕の出した例があまり適切ではなかったと思います。
僕が問題として提起したかったのは、public メソッドのシグニチャに焦点を当てたもので、もっと例をシンプルにしてしまうなら、1冊の本を何らかの基準で複数の本に分割してしまうメソッド(例えば Split())のシグニチャをどうするかといったイメージです。 最初に浮かんだのは、String クラスの Split() メソッドです。実際にソースコードを読んでみましたが、String の Split() では、内部で ArrayList のコレクションを生成し、最後に配列を作成して戻り値としています。つまり今回の投票でいう「配列に変換して返す」選択肢になります。 ただ、これはどなたかがおっしゃっていたようにシステムレベルのデザインなので、アプリケーション開発レベルでのデザインとは考え方が違う気がしたので、Book というクラスでの例を挙げ皆さんに意見を伺ったという経緯です。 [ メッセージ編集済み 編集者: Shane 編集日時 2008-11-18 02:57 ] | ||||||||||||
|
投稿日時: 2008-11-18 16:17
上記の、前回の書き込みでも書きました通り、僕は主にインスタンスの扱いに着目して発言をしていました。 この時メソッドかプロパティかということもあまり考慮していません。(その結果、rain さんから質問が挙がりました。) その上で、僕が別インスタンスを用意する際は配列や ReadOnlyCollection に変換する場面が多い (ReadOnlyCollection は特にプロパティで使用することが多いです) ので最初の書き込みであのように書きました。 この時 List に変換という考えは出てこなかったのですが、TAKA さんの意見を聞いて納得しています。
そういうことでしたら、僕からは特に何もないです。 IEnumerable や IList という意見も最初に挙がっていますので、List をこのスレの結論とするのかどうかには僕は関与しませんが^^;
いえ、僕の最初の書き込みで、言葉が足りてなかったこと・List を度外視していたことが原因だと思います。 すみませんでした。 _________________ C#と諸々 | ||||||||||||
|
投稿日時: 2008-11-19 08:35
私の出した例が悪かったと思います。ポイントはスレッドのタイトルにあるように、「配列」か「コレクション」かという点です。 |
«前のページへ
1|2|3|4