- PR -

メソッドの引数にをプリミティブ変数ではなくクラスを渡す理由

投稿者投稿内容
sand
大ベテラン
会議室デビュー日: 2007/01/15
投稿数: 247
投稿日時: 2008-03-31 10:10
メソッドの引数にをプリミティブ変数ではなくクラスを渡す理由を知りたいです。
個人的には下記のように考えていますが、その他の理由があれば知りたいです。
・プリミティブ変数だと引数の数が多い場合、可読性が落ちる。クラスだと少ない引数で多くの情報(クラス内のメンバ分)を渡すことができる
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-03-31 10:27
プリミティブ型とそうでないものとの区別をつける理由が、
そもそもありません、に1票。
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-03-31 11:11
プリミティブ型は安定してるのでプリミティブ型を引数にすると
安定度の高いメソッドになります。

逆にクラス(ユーザー定義の)の場合は不安定なので
不安定なメソッドになりますが、クラスによる抽象化の恩恵を受けることができます。

どちらを選ぶかといわれれば
引数が変わらないという前提があり、クラスへの依存性を少なくしたい場合はプリミティブ型で
そうでない場合はクラスですね
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-03-31 11:14
可読性というよりは拡張性?
渡すパラメータが増えたとき
呼び出し元と呼び出し先の両方の宣言を書き換える必要があるか
クラスの中だけを変えればいいかは結構大きいと思います

あと、あんまり意識することはありませんけど
メモリ領域の使い方も違ったりしますね

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-03-31 11:43
・ポリモフィズムを活用するため(Strategyパターンの利用など)
・型のチェックを利用するため(フラグにintではなく列挙を用いるなど)
・拡張性(Criteriaパターン)
・可読性
などでしょうね。

ですが、そもそも文字列はStringというクラスで渡すわけですし。
あまり区別する必要を感じませんね。

もし、クラスのフィールをばらしてメソッド引数にするのと、
クラスの形で渡すのを比較されているなら質問の意図も分かる気がします。

個人的には同じフィールド群を持つクラスが複数ある場合は、
継承階層を作るか、interfaceを作るなどして抽出すればよいと考えます。
フィールドが少なければ引数にばらして渡す手法でもいいですが、
渡すデータの意味からして、classとしては型が一緒だけども、
互換のないデータが渡ることを抑制するためにも型を宣言する方がよいと考えます。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-03-31 11:58
引用:

otfさんの書き込み (2008-03-31 11:11) より:
プリミティブ型は安定してるのでプリミティブ型を引数にすると
安定度の高いメソッドになります。

逆にクラス(ユーザー定義の)の場合は不安定なので
不安定なメソッドになりますが、クラスによる抽象化の恩恵を受けることができます。



安定というのはどういう意味でしょうか?

オブジェクトの参照の場合、参照先オブジェクトのフィールドが
変更されることがあることを指して「不安定」と言っているのでしょうか?
そうした意味合いであればImmutableパターンで解決できる問題です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-31 12:00
質問者さんは 「膨大な量の情報を渡すこと前提」 で考えているからの意見なのでしょうね。 プリミティブ型で事なきを得れるものはむしろプリミティブ型にすべきだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2008-03-31 12:19
こんにちは。

引用:

sandさんの書き込み (2008-03-31 10:10) より:
メソッドの引数にをプリミティブ変数ではなくクラスを渡す理由を知りたいです。



どちらが良いというわけではないでしょうが、
「リファクタリング」では次のような手引きがありますね。

・不吉な匂い「多すぎる引数」
 -> オブジェクトそのものの受け渡し
 -> 引数オブジェクトの導入
・不吉な匂い「データの群れ」
 -> クラスの抽出

スキルアップ/キャリアアップ(JOB@IT)