Ho letto in una recente revisione del codice che sia ternary operator (condition ? foo : bar)
che XOR operator ^
sono usati raramente in Java. È vero?
Se sì, è perché sono meno leggibili? o qualche altra ragione.
Ho letto in una recente revisione del codice che sia ternary operator (condition ? foo : bar)
che XOR operator ^
sono usati raramente in Java. È vero?
Se sì, è perché sono meno leggibili? o qualche altra ragione.
L'operatore ternario è ben utilizzato, in particolare per i controlli / valori predefiniti null:
System.out.println("foo is "+(foo==null) ? "not set" : foo);
Alcune persone considerano questo non leggibile come un if / else, ma non era questa la domanda.
L'operatore XOR bitwise viene utilizzato solo nell'elaborazione bit. Se hai bisogno di un XOR bit a bit, non c'è modo di aggirarlo.
L'operatore XOR logico è davvero così raro, che non l'ho visto negli ultimi dieci anni in Java in casi validi . Ciò è dovuto anche al fatto che lo XOR booleano "non scala" come ||
o &&
. Cosa intendo:
if( a && b && c && d ) .... // it's clear what the intention is
if( a || b || c || d ) .... // here also
if( a ^ b ^ c ^ d ) .... // ???
Nell'ultimo caso direi, il programmatore voleva dire "solo uno dovrebbe essere vero". Ma XOR è una bestia. Il programmatore ha ottenuto la bestia e non cosa voleva)
Quella sarebbe un'interessante domanda dell'intervista: qual è il risultato dell'ultimo if
?
Ero abituato a trovare l'operatore ternario difficile da analizzare, ma da allora ho scoperto che ci sono alcuni posti in cui è molto utile. Questi non tendono alla logica dell'applicazione, ma alla registrazione.
Ad esempio:
log.info( "Object foo is " + ( foo.isEnabled() ? "" : "not " ) + "enabled" );
Per me, è molto più ordinato di
if ( foo.isEnabled() )
log.info( "Foo is enabled" );
else
log.info( "Foo is not enabled" );
o
log.info( "Foo is enabled : " + foo.isEnabled() );
In breve, è una questione di dove viene utilizzato e per quello.
Per quanto riguarda il bit-saggio, ho ancora difficoltà con quelli, ma è perché sono abituato a lavorare con un alto livello di astrazione, come suggerito da altri commentatori. Se mi capita di imbattermi in qualche codice, qualcuno ha deciso di usarlo per essere "efficiente", il tempo sprecato mentre lo capisco nega i benefici.
Questa è più una risposta basata sull'opinione, ma nel mio caso:
In effetti, per qualche motivo trovo l'operatore ternario meno leggibile di un costrutto if-else.
Come per XOR, probabilmente la maggior parte dei programmi Java non ha alcuna utilità per manipolazioni bitwise di basso livello. Per la maggior parte, sembra essere solo una reliquia ereditata da C.
Leggi altre domande sui tag java operators bitwise-operators