2017-01-27 3 views
1

Gibt es eine Option in den Einstellungen des Android Studio-Interferenzfilters, um sicherzustellen, dass das Auftreten des booleschen '&'-Bedieners einen Fehler verursacht und nur den' '-Operator zulässt (während der &-Operator für bitweise Operationen mit Zahlen zulässig ist) ?Android Studio: Lint zu erzwingen "&&" statt "&"?

TL; DR: Wie Sie wahrscheinlich wissen, in Java der ‚&‘ Bediener beiden Operanden auswertet, bevor es die AND-Operation durchführt, während der ‚& &‘ Operator stoppt Operanden an dem ersten Operanden Auswertung zu falscher Auswertung.

Ich persönlich finde diese Unterscheidung sowohl verwirrend als auch sinnlos. Mit dem ‚& &‘ Betreiber können Sie tun Dinge wie:

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

was bedeutet, dass fn sollte nie mit einem Wert von null aufgerufen werden. Wenn ich versehentlich schreibe:

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

der ganze Test ist völlig bedeutungslos. Ich möchte sicherstellen, dass diese Art von Tippfehlern niemals auftreten kann. Eine Linter-Regel wäre der perfekte Weg, dies durchzusetzen.

Die linter-Regel sollte zwischen den Typen der Operanden unterscheiden. Wenn & mit Zahlen verwendet wird, ist seine Bedeutung ein bitweiser und Operator. Ich möchte das natürlich nicht ablehnen, da es sehr nützlich ist. Außerdem verhalten sich die OR-Operatoren | und || in ähnlicher Weise, und ich möchte | für boolesche Werte verbieten und gleichzeitig numerische Operationen zulassen. Also im Grunde:

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

'&' ist in den richtigen Umständen nützlich und ist weit davon entfernt, sinnlos oder nutzlos zu sein. – AntonH

+0

Es ist alles persönlicher Geschmack, schätze ich. Da ich von C++ und JavaScript komme, bin ich an && gewöhnt und sehe keinen Bedarf für den anderen. –

+0

@digorydoo \t Weil Sie manchmal auf Bits arbeiten möchten? –

Antwort

0

Gibt es eine Option in Android Studio-Linter-Einstellungen, um sicherzustellen, jedes Vorkommen des boolean '&' Operators bewirkt ein Fehler und das nur die '& &' Betreiber?

Die kurze Antwort ist "nein".

Sie können immer Ihre eigenen Lint-Regeln schreiben (für ein Beispiel siehe here), dies ist jedoch keine Standardoption in IntelliJ.

Dies ist auch keine Frage des "persönlichen Geschmacks". & und && beide existieren aus einem Grund, genau wie | und ||.

Wenn es um boolesche Aussagen geht, haben Sie den Unterschied richtig. Der grundlegende Unterschied ist jedoch, dass & ein bitweises "und" ist, während && ein logisches "und" ist.

Es gibt viele Situationen, in denen jemand ein bitweises "und" haben möchte, also ist es keine gute Idee, einen pauschalen Fehler zu verwenden. Der häufigste Anwendungsfall ist die Verwendung als Maske.

Zum Beispiel gibt die Methode getAction() von MotionEvent eine Ganzzahl mit dem Zeigerindex und der Aktion zurück.Um die Aktion zu erhalten, müssen Sie den Rückgabewert wie folgt maskieren: getAction() & ACTION_MASK.

+0

Ich habe die Frage aktualisiert, um sicherzustellen, dass ich nur & für boolesche Operanden verbieten möchte. Meiner Meinung nach gibt es keinen Nutzen für & _mit booleschen Operanden_, aber natürlich ist der bitweise Operator sehr nützlich. –

Verwandte Themen