Ich habe kürzlich in einer Codeüberprüfung gelesen, dass beide ternary operator (condition ? foo : bar)
und die XOR operator ^
in Java selten verwendet werden. Ist es wahr?
Wenn ja, liegt das daran, dass sie weniger lesbar sind? oder aus einem anderen Grund.
java
operators
bitwise-operators
Kuldeep Jain
quelle
quelle
Antworten:
Der ternäre Operator wird gut verwendet, insbesondere für kurze Nullprüfungen / Standardeinstellungen:
Einige Leute halten dies für nicht so lesbar wie ein Wenn / Sonst, aber das war nicht die Frage.
Der bitweise XOR- Operator wird nur bei der Bitverarbeitung verwendet. Wenn Sie ein bitweises XOR benötigen, führt kein Weg daran vorbei.
Der logische XOR- Operator ist in der Tat so selten, dass ich ihn in den letzten zehn Jahren in Java in gültigen Fällen nicht gesehen habe . Dies liegt auch daran, dass das boolesche XOR nicht wie
||
oder "skaliert"&&
. Was ich meine:Im letzten Fall würde der Codierer "nur einer sollte wahr sein" bedeuten. Aber XOR ist ein Biest. Der Kodierer hat das Biest bekommen und nicht, was er wollte.
Das wäre eine interessante Interviewfrage: Was ist das Ergebnis der letzten
if
?quelle
!=
ein paar Mal Boolesche Werte verwendet, und logisches XOR ist mir noch nie in den Sinn gekommen.Früher war es schwierig, den ternären Operator zu analysieren, aber seitdem habe ich festgestellt, dass es einige Stellen gibt, an denen er sehr nützlich ist. Dies ist in der Regel keine Anwendungslogik, sondern eine Protokollierung.
Zum Beispiel:
Für mich ist das viel ordentlicher als beide
Oder
Zusammenfassend ist es eine Frage, wo es verwendet wird und dafür.
Was das Bit angeht, habe ich immer noch Probleme damit, aber das liegt daran, dass ich es gewohnt bin, auf einem hohen Abstraktionsniveau zu arbeiten, wie andere Kommentatoren vorgeschlagen haben. Wenn ich irgendwo im Code auf etwas stoße, das jemand als "effizient" bezeichnet, wird die Zeit, die verschwendet wird, während ich es herausfinde, die Vorteile zunichte machen.
quelle
foo.setParam( bool ? ClassA.method() : ClassB.method )
. Es funktioniert, aber es riecht ein bisschen, IMO.unless ( !bool ) {
. :)Dies ist eher eine meinungsbasierte Antwort, aber in meinem Fall:
Aus irgendeinem Grund finde ich den ternären Operator weniger lesbar als ein if-else-Konstrukt.
Was XOR betrifft, haben wahrscheinlich die meisten Java-Programme keine Verwendung für solche bitweisen Manipulationen auf niedriger Ebene. Zum größten Teil scheint es nur ein Relikt zu sein, das von C. geerbt wurde.
quelle