2017-05-10 13 views
2

私のオブジェクトのコンストラクタに文字列配列を渡していますが、それらは関連していますが、コレクションを操作する必要はありません(並べ替えやその他の配列操作)受信クラスの変数私は簡単に6文字列ではなく、配列を渡すと便利だとわかります。これはパフォーマンスの問題につながりますか?文字列配列または6文字列をコンストラクタに渡す方が効率的ですか?

+1

メソッドが呼び出される頻度などを知らなくてもパフォーマンスの問題が発生するかどうかを知ることは難しいです。私にとって、これはマイクロ最適化の匂いです。最も明白なことを正しく実行します(つまり、少なくとも驚きの原則に違反しないでください)。あなたが何年もの間にコードに戻ったとき、それはまだ意味をなさないでしょうか?特に、固定数のパラメータが必要なときに配列を渡すと、 'var something = someArray [0]'のようなコードを書くことになります。 – spender

+0

@spenderあなたの意見は答えがあるはずだと思います – jfs

答えて

2

パフォーマンスは本当に問題ですか?小さな視点の場合はEric Lippert's performance rantとお読みください。

さらに重要なことはデザインです。あまりにも多くのパラメータを持つメソッドを避けたいので、値が本当に類似した型の独立した値の集合である場合は配列を渡すか、これらの値が論理的に何らかの "形式"に属する場合はプロパティを持つクラスを作ります私はここで "クラス"という言葉を避けようとしていますが、それは実際にそれを最もよく表しています)。

+0

リンクをありがとう、私はそれが非常に有用であることを発見しました。 –

4

わずか6つのオブジェクトの配列では、パフォーマンス上の問題はありません。

コードの可読性と保守性が最も重要です。6つの明確に名前が付けられたパラメータを持つコンストラクタは、文字列の配列をとるコンストラクタよりも読みやすくなります。

は、これらの2つの例を考えてみましょう:

Employee1(string first, string last, string position) { 
    ... 
} 

Employee2(string[] args) { 
    ... 
} 

Employee2の呼び出し側がでどの位置になっている引数を知る必要があるだろうが、各パラメータの目的を説明するIDEプロンプトを取得しますEmployee1の呼び出し元アレイ。コンストラクタに名前付きパラメータを渡す

代替のみEmployee1のユーザに利用可能である:また

var manager = new Employee1(position:"manager", first:"Vincent", last:"Nwonah"); 

Employee2の実装は、より少ない三つの要素又は有する配列を渡す発信者を心配する必要があります3つ以上の要素を持つ配列

簡潔に言えば、Employee1は、はるかに読みやすくメンテナンス可能な代替品です。

+0

私はあなたの意見を得るが、私の状況では、渡す配列は、私が渡すことのない値が変わることはありません。私は、ユーザーを認証し、そのユーザーの詳細をデータベースから 'userDetailsArray'と読みます。ユーザがセッション中に使用する他のすべてのクラスは、自分の特権、ユーザ名、年などを知る必要があります。どのディテールがどの配列のインデックスに入るかに関して、詳細を配列に書き込んだ気がします。パフォーマンスの問題がなければ、配列を渡すことはこの特定の状況でより読みやすくなると思います。 –

関連する問題