2017-01-27 19 views
1

ブール型の '&'演算子がエラーを起こし、 '& &'演算子のみを許可する(数字のビット演算に対して&演算子を許可している)ことを確認するオプションがありますか? ?Android Studio: '&'の代わりに '&&'を強制するlint?

TL; DR:あなたはおそらく知っているように「& &」演算子はfalseと評価する最初のオペランドでオペランドの評価を停止しながら、それは、AND演算を実行する前に、Javaで「&」演算子は、両方のオペランドを評価します。

私は個人的にこの区別を混乱と無意味の両方を見つける。 fnヌルの値で呼び出さないでくださいという意味

if (a != null && fn (a)) { ... } 

:「& &」演算子を使用すると、のようなものを行うことができます。私が誤って次のように書いているとします。

if (a != null & fn (a)) { ... } 

すべてのテストは完全に無意味です。このようなタイプミスが起こり得ないようにしたい。リンタールールはこれを実行するのに最適な方法です。

リンター規則では、オペランドの種類を区別する必要があります。 &に数字を使用すると、その意味はビット単位での演算子です。私はもちろんこれを禁止したくはありませんが、それは非常に便利です。さらに、OR演算子|||も同じように動作し、数値演算のために許可しながらブール値を|にする必要がありません。だから、基本的には:

int a = (3 & 4);    // OK 
boolean b = (true && false); // OK 
boolean c = (true & false); // linter error, hopefully 
int d = (5 | 7);    // OK 
boolean e = (true || false); // OK 
boolean f = (true | false); // linter error, hopefully 
+1

「&」は適切な状況で便利であり、無意味でないか無駄ではありません。 – AntonH

+0

それはすべての個人的な味だと思います。 C++やJavaScriptから来て、私は&&に慣れていて、もう片方の必要はありません。 –

+0

@digorydoo \t時にはビットを操作したいのですが? –

答えて

0

は必ずブール「&」演算子のいずれかの発生は、エラーが発生し、唯一「& &」演算子を可能にするAndroidのスタジオリンター設定のオプションがありますか?

短い答えは「いいえ」です。

独自の糸くずルール(サンプルではhereを参照)をいつでも書くことができますが、これはIntelliJのデフォルトオプションではありません。

これは「個人的な味」の問題でもありません。 &&&の両方が理由のために存在し、ちょうど|||のように存在します。

ブールステートメントについては、その違いを正しく示しています。しかし、基本的な違いは、&はビット単位の "and"ですが、&&は論理 "and"です。

誰かがビット単位の「と」を必要とする状況がたくさんあり、そのためにブランケットエラーを使用するのは良い考えではありません。最も一般的な使用例は、マスクとして使用しています。

たとえば、MotionEventのgetAction()メソッドは、ポインタインデックスとアクションの両方を持つ整数を返します。アクションを取得するには、戻り値をマスクする必要があります(getAction() & ACTION_MASK)。

+0

質問を更新してブール型オペランドに対して&を禁止したいだけであることを確認しました。私の意見では、&_with boolean operands_の使用はありませんが、当然のことながらビット演算子は非常に便利です。 –

関連する問題