2016-06-28 7 views
1

IDEAは(object.method() == CONSTANT)(CONSTANT == object.method())にフリップさせることを提案しますが、理由はありません。 2番目の方法は本当に良いですか?はいの場合、なぜですか?なぜIntelliJ IDEAは比較で最初に定数を優先しますか?

短絡オペレータ&&||の注文は重要ですが、他のバイナリオペレータの場合は、その機能を評価する必要があります。私はここで何が欠けていますか?

私はIntelliJ IDEA 2016 1.3を使用します。

+1

提案を受け入れると、それをもう一度フリップするように提案されます。最も読みやすいものを見つけることはあなた次第です。そうでなければ、問題ではない。 –

+1

また、[Yoda conditions wiki page](https://en.wikipedia.org/wiki/Yoda_conditions)を見ることもできます。これには、以下の回答の中にいくつかの利点があります。 – Morfic

+0

@JBNizet 'while(tree.children()。length == 1)'の場合、それを1回ひっくり返して戻すことを提案しますが、フリップバックを受け入れることは何もしません。 –

答えて

7

IntelliJ IDEAはまず定数を優先しません。 「比較の左側の定数」と「比較の右側の定数」の2つの点検がありますが、どちらもデフォルトで無効になっています。 object.method() == CONSTANTのようなコードが警告として強調表示されている場合は、プロジェクトコードスタイルで有効になっています。いくつかのコードスタイルでは、定数を左に置く方が、==の代わりに=を誤って使用した場合、定数に割り当てることができないため、コードがコンパイルできないことがあります。

比較操作をフリップする意図のアクションもあります。意図アクションは、特定のコード編集操作を自動化するために適用できるツールです。その利用可能性は、IntelliJ IDEAの側からの優先度を示すものではありません。それらは単にコードを編集するためのツールです。

1

これは単なるチェックスタイルの可能性が高いです。私は両方のバリエーションが異なるチーム/プロジェクトで好まれているのを見ました。実際には、それは単に個人的な好みの問題です。

IntelliJが動作するように設定されているcheckstyle実装を確認します。あなたが好きなものではなく、いつも別のものをダウンロードして代わりに使うことができます。

2

多くの分析チェックは、コーディング基準を持つ開発チームに提供されます。コーディング標準は、理由の1つまたは別のものが操作の特定の順序を好むものです。組織のポリシーに従ってオン/オフを切り替えることができ、ポリシーを統一させるために開発者に配布することさえできます。このため、いくつかの分析は矛盾しています。なぜなら、ある組織は一方的な方法と他の方法とを好むからです。そのような場合に、組織が他の組織よりも優れている理由を説明するのは、組織にとっての責任です。

限り、それはデフォルトではこの方法である理由、私は==オペランドの順序で行うには持っていない、二つの理由を示唆することができますが、注文がequalsassertEquals比較に意味があるとするので、コーディング標準が必要かもしれないとして、 ==比較のために同じであるようにする。

まず、定数を最初に入れる方が安全な場合があります。 fooがnullの場合、最初の1は、NPEを取得することはできませんので、例えば、表現

if(CONSTANT.equals(foo)){...} 

if(foo.equals(CONSTANT)){...} 

よりも安全です。

第2に、コードを簡素化できます。たとえば、次は同等です:

if(foo != null && foo.equals(CONSTANT)){...} 

if(CONSTANT.equals(foo)) 

もう一つの理由は、おそらく値がテストされる前に、いくつかのAPIに「期待」値は、一般的に予想される場合には、誤った診断情報が得られるであろう、JUnitののassertEqualsのように、来ることです値はまず来ない。

私が過去に聞いた理由は、比較の期待値が最初に来るときに読みやすくなるということです。まず、式でチェックされる値を探し出す必要はありません。

関連する問題