2017-12-03 8 views
0

iは、コードのこの部分がありますJava:新しい変数を作成するか、同じ計算を何度も繰り返しますか?

// ... 
if (result[1]/(abs ? res[0] : 1 > highest) { 
    highest = result[1]/(abs ? res[0] : 1); 
} 

をし、それが同じ計算の繰り返しを避けるために、変数を作成するためにenought価値がある場合、私は思ったんだけど:

// ... 
double temp = result[1]/(abs ? res[0] : 1; 
if (temp > highest) highest = temp; 

も最高solutonとあります一般的に、コードの最初の部分を使用する方が良い場合と、2番目の部分を使用する方が良い場合があります。

+4

第2のもの。あなたは自分自身を繰り返すことはしません。 –

+1

後者はおそらく読みやすくなります。しかし、この論理をより明確にするためには、実際には 'Math.max'を使用するべきです。 –

+1

可読性のために、たとえパフォーマンスを改善しないとしても、説明変数を追加してください。そして、三項式の使用を減らしてください。コードを難読化する傾向があります。 –

答えて

2

同じコードを繰り返さないように、主に重複計算を省略します。より最適なCPU使用のために同じ計算を繰り返すことは、それほど遠くない。

したがって、一時変数を作成することは絶対に価値があります。

しかし、このような状況で、あなたはMath.maxを使用して明示的に作成しないようにすることができます

highest = Math.max(highest, result[1]/(abs ? res[0] : 1)); 

ここで、max(double a, double b)の2番目のパラメータbは一時変数の代わりに使用されます。 expression引数の値は、コールサイトのパラメータ変数に設定され、max実装内で戻り値を決定し、最終的に代入を決定します。

+0

ニースですが、コードの後ろに説明を追加する前に、短くて甘いときはあなたの答えがよかったです。それは私の意見でそれを難読化するだけです。 –

+0

@ user889742「最大」を使用する能力は、OPの特定の例の副作用であり、「私は一時的な質問を使うべきか」という固有の特性ではありません。検索エンジンを通じてこのQ&Aに来る読者の多くは、その解決策が問題に適用されないため、失望します。だからこそ私は最初の段落を追加し、なぜ「temp」がより良いアプローチであるのかの論理を説明しました。 – dasblinkenlight

3

1)パフォーマンスが優れています。

2)コードの可読性が向上します。

3)計算が1回だけ発生すると、デバッグが容易になります。

4)最初のオプションは、計算をコピーするときに間違いをする可能性があるため、エラーが発生する可能性があります。

関連する問題