0

これが私の方法です:

public void addEmployee(Employee employee) {
if(! employees.containsKey(employee.getName())) {
      employees.put(employee.getName(), employee);
  }
}

employee.getName()ご覧のとおり、複数回呼び出されるアクセサーがあります。プログラマーは、そのような複数の呼び出しに対して個別の変数を作成する必要がありますか?このような:

public void addEmployee(Employee employee) {
String name=employee.getName();
if(! employees.containsKey(name)) {
   employees.put(name,employee);
  }
}

スタイルだけでなく、パフォーマンスの観点からも意味がありますか?

4

6 に答える 6

3

これは、スタイルの観点(より明確)とパフォーマンスの観点(2回操作を行わない)の両方の観点から意味があります。例として、getNameデータベースへのクエリが必要な場合がありますが、そのうちの2つは実行したくないでしょう。

于 2012-08-10T09:52:32.573 に答える
2

スタイルだけでなく、パフォーマンスの観点からも意味がありますか?

含まれている計算がたくさんある場合はそれを行いますgetName()

于 2012-08-10T09:52:55.723 に答える
2

確かに冗長ではありません。

パフォーマンスが問題になる可能性がありますが、そのために時期尚早に最適化することはしません。getName()ただし、将来、より複雑なことを行うためにリファクタリングされた場合、変数を事前に引き出すことで、潜在的なパフォーマンスの問題から救うことができると主張するかもしれません。プレーンゲッターは必ずしもプレーンゲッターのままではありません(これが、私がそのようなことをユニットテストすることを提唱する理由です-大雑把な方法でさえ)

ただし、考慮すべきもう1つの問題は不変性です。変更できますemployee.getName()か?また、上記の実行中に別のスレッドで変更できますか?可能であれば、マッピングロジックが壊れます。

于 2012-08-10T09:54:29.767 に答える
1

スタイルの観点から、ローカル変数を変更する場合を除いて、ローカル変数を導入する必要はないと思うので、最初のオプションを選択します。

パフォーマンスの観点からは、大きな違いがあるかどうかはわかりません。JITで何ができるかわかりません。(C ++では、getterメソッドをconstとしてマークでき、コンパイラーは簡単に最適化を行うことができます)。

于 2012-08-10T09:58:00.590 に答える
0

変数を読み取る代わりにメソッドを呼び出すと、わずかなオーバーヘッドが追加されます。パフォーマンスが大きな問題であり、このメソッドが1秒間に何度も呼び出される場合は、違いが生じる可能性があります。それ以外の場合は、スタイル設定です。

于 2012-08-10T09:55:24.170 に答える
0

1.一度だけ呼び出された場合は、別の変数に割り当てても意味がありません。

2.それが複数回使用され、の処理 getName() が膨大な場合は、後で使用するために変数に割り当てることをお勧めします。これにより、処理時間が大幅に節約されます。

于 2012-08-10T10:00:25.180 に答える