Operatore ternario (condizione? foo: bar) e l'operatore XOR (^)

8

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.

    
posta Kuldeep Jain 11.03.2012 - 14:02
fonte

3 risposte

8

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 ?

    
risposta data 11.03.2012 - 14:17
fonte
7

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.

    
risposta data 11.03.2012 - 14:28
fonte
3

Questa è più una risposta basata sull'opinione, ma nel mio caso:

  1. In effetti, per qualche motivo trovo l'operatore ternario meno leggibile di un costrutto if-else.

  2. 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.

risposta data 11.03.2012 - 14:06
fonte

Leggi altre domande sui tag