2010-03-09 8 views
5

ho sempre scritto le mie espressioni booleane come questo:Qual è il modo migliore per scrivere espressioni booleane in Java

if (!isValid) { 
    // code 
} 

Ma il mio nuovo datore di lavoro insiste sulla seguente stile:

if (false == isValid) { 
    // code 
} 

È uno stile preferito o standard?

+5

Wow, un'altra domanda da porre ai potenziali datori di lavoro. (Il confronto esplicito con le costanti booleane è stupido.) – Pointy

+5

Direi che il secondo è preferibile ....... se e solo se sei un codice offuscatore –

+3

Mentre preferisco il primo, probabilmente vuoi restare con lo standard del tuo datore di lavoro – basszero

risposta

10

Preferisco il primo stile perché è più naturale per me leggere. È molto inusuale vedere il secondo stile.

Un motivo per cui alcune persone potrebbero preferire il secondo su un'altra alternativa:

if (isValid == false) { ... } 

è che con quest'ultimo accidentalmente scrive un singolo = invece di == allora si sta assegnando a isValid invece di testarlo, ma con la costante prima otterrà un errore di compilazione.

Ma con il tuo primo suggerimento questo problema non è nemmeno un problema, quindi questo è un altro motivo per preferire il primo.

+0

In realtà, non c'è errore di compilazione per quell'errore se isValid è una variabile (a meno che isValid non sia finale). Che è veramente, * veramente * cattivo. Ovviamente, meno di un problema se è valido un metodo o un'espressione, ma come un'abitudine ... – Carl

+2

Credo che questo sia il motivo dell'inversione dell'ordine. "if (false = isValid)" è un errore. – DJClayworth

2

IMO il primo è molto più leggibile mentre il secondo più dettagliato.

avrei sicuramente andare per il 1 ° uno

+0

+1 per la leggibilità. –

4

Era discussed per C# diverse ore fa.

Il costrutto false == isValid è un residuo di C-world, in cui il compilatore consente di eseguire assegnazioni nell'istruzione if. Credo che i compilatori Java ti avviseranno in tal caso.

Nel complesso, la seconda opzione è troppo prolissa.

+0

L'assegnazione booleana in un'espressione non presenta alcun errore o avviso del compilatore in Eclipse. – Carl

+0

L'assegnazione booleana generale non lo fa, ma un tentativo di assegnare un valore alla costante incorporata 'falso' non fa - quindi l'ordine. Nei vecchi codici C (e intendo OLD) FALSE era tipicamente una variabile assegnata e poteva essere sovrascritta. – DJClayworth

2

Si sta valutando la variabile, non false in modo che quest'ultima non sia corretta dal punto di vista della leggibilità. Quindi, personalmente, resterei fedele alla prima opzione.

1

Il secondo stile non richiede di negare l'espressione da soli (che potrebbe essere molto più complicato del semplice "isValid"). Ma scrivere "isValid == false" può portare a un incarico involontario se si dimentica di digitare two = 's, quindi l'idioma è di mettere sul lato destro ciò che non può essere un valore.

Il primo stile sembra essere preferito tra le persone che sanno quello che stanno facendo.

8

Assolutamente il primo. Il secondo tradisce una mancanza di comprensione della natura delle espressioni e dei valori, e come parte dello standard di codifica, implica che il datore di lavoro si aspetta di assumere programmatori molto incompetenti - non un buon auspicio.

+0

Mi stai uccidendo. Ma almeno significa che non sono pazzo. – Timothy

7

Tutti riconoscono questo frammento:

if (isValid.toString().lenght() > 4) { 
    //code 
} 

Penso che il tuo secondo esempio guarda nella stessa direzione.

+0

Rifiuta l'offuscamento? – Timothy

2

Ho intenzione di tentare una risposta completa qui che incorpora tutte le risposte di cui sopra.

Il primo stile è sicuramente da preferire per le seguenti ragioni:

  • è più breve
  • è più leggibile, e quindi più facile da comprendere
  • viene più utilizzato, il che significa che i lettori riconosceranno il modello più rapidamente
  • "false == ..." piuttosto che "... == false" è ancora un'altra violazione dell'ordine naturale, che fa pensare al lettore "c'è qualcosa di strano in corso che io bisogno di prestare attenzione a ", quando non c'è.

L'unica eccezione è quando la variabile è booleana anziché booleana. In questo caso il secondo è un'espressione diversa dalla prima, che valuta false quando isValid è null e quando è booleano.FALSE. Se questo è il caso ci sono buoni argomenti per usare il secondo.

0

Voglio solo dire che ho imparato C venti anni fa a scuola e hanno di passare a Perl e Java e ora C#, che hanno tutti la stessa sintassi e ...

penso (! Myvar) è la più popolare

penso (myvar == false) è bene troppo

a 20 anni ho mai visto

(false==myvar) 

credo che il vostro capo è il fumo something-- sono scusate ma prenderei questo come segno che il vostro capo è una specie di maniaco del controllo o numbskull.

Problemi correlati