2010-08-30 15 views
8

Eventuali duplicati (foo!):
What is the preferred way to write boolean expressions in JavaBest Practice: if (foo == false) o se

Oggi, io e il mio collega rastrellato un argomento. Quale è un modo migliore per utilizzare le variabili booleane nel codice Java insieme alle istruzioni if.

boolean foo=true 
//1. 

if(foo == false) 
    // do something 
else 
    // do something else 

//2. 

if(!foo) 
    // do something 
else 
    // do something else 

I support [1], poiché penso che sia più leggibile. Cosa ne pensate voi ragazzi ?.

+0

duplicato esatto del [Qual è il modo migliore per scrivere espressioni booleane in Java] (http://stackoverflow.com/questions/2409378/what-is-the-preferred-way-to-write -boolean-expressions-in-java) –

+0

Ok, ora devo concedere il parere del mio amico (e voi ragazzi). Grazie a tutti voi ragazzi per una rapida partecipazione. :) – pavanlimo

+2

Se supporti 1, perché fermarsi qui? La riduzione ad absurdum richiede che tu usi 'if ((((foo == false) == true) == true) == true) ...'. – paxdiablo

risposta

12

Numero 2, insieme a "pippo" avere un nome descrittivo, in modo che il codice legge bene:

if (!hasPurple) ...

+0

Sì, le variabili con un nome migliore sono decisamente la strada da percorrere Diventa più leggibile. – drekka

0

Vado per 2 perché come programmatore anche 2 è leggibile.

Immagina di avere centinaia di controlli di convalida che controlli sempre con il falso.

No

0

Se si è l'unico che sta per mantieni il tuo codice quindi sei libero di usare qualsiasi stile tu voglia.

Detto questo, foo è preferito dalla maggior parte degli sviluppatori che conosco.

0

È una questione di opinione. Preferisco il numero 2 perché è meno codice da scrivere e penso che sia leggibile.

6

Trovo # 2 più leggibile. Penso che ogni dev di Java (sono un dev di C#) saprebbe cosa! si intende. I

Anche se probabilmente non è il punto qui, preferisco mettere il mio blocco "vero" come dichiarazione. Se la condizione è generalmente sta per essere falso, allora Nomino mia variabile per rappresentare

if (notFoo) 
    // do something when 
else 
    // do something else 
+1

Non sono d'accordo. Le variabili booleane dovrebbero essere nominate in modo assertivo quando possibile. Dovresti essere in grado di leggere sempre! come "non", e se hai bisogno di foo, eviti il ​​doppio negativo confuso! notFoo. L'unica eccezione è quando foo ha un antonym (come convesso vs concavo). – ILMTitan

+0

I doppi negativi concordati sono cattivi :) Ma poi, se si usa puramente if-else,! NotFoo si chiamerebbe semplicemente Foo :) –

4

Trovo che sia una buona idea per evitare cose come

if (foo == true){}

perché a volte si potrebbe scrivere

if (foo = true){}

come errore tipografico. Spesso è un errore facile da individuare, ma sembra prestarsi bene a fare un errore veloce.

+0

'if (foo = true) {}' non è legale Java e non verrà compilato (e dovrebbe spiccano come cattiva sintassi nel tuo IDE). Avere paura delle dichiarazioni 'if (var = constant)' è un cattivo holdover da C, dove era legale (e talvolta incoraggiato) da assegnare nel condizionale. Smettila di preoccupartene e preferisci preoccuparti di ciò che è più leggibile. – Avi

+1

@Avi: Effettivamente si compila sotto JDK6. Ti ho dato il beneficio del dubbio e l'ho scritto da solo. Compilano senza avvertimenti su entrambe le linee di comando su una scatola di FreeBSD e attraverso Eclipse, e Eclipse non mostra alcun avvertimento. – JBirch

+0

sei corretto. Chiedo scusa. Ero confuso, perché la maggior parte delle espressioni di assegnazione sono illegali in condizionali, a meno che non siano di tipo booleano (poiché non esiste alcuna conversione da int-to-boolean o pointer-to-boolean in Java). Vorrei comunque andare con il più leggibile. Nel caso di numeri interi, scriverei 'if (foo == CONSTANT)'; nel caso dei booleani scriverei semplicemente "if (foo)", che è sia più leggibile che evita questo problema. – Avi

0

Quando si utilizza la variabile booleana come condizione nell'istruzione, non confrontarlo con vero.

Non un errore, ma uno stile negativo, poiché è già un valore booleano, quindi basta usarlo.

Motivi per cui "! Foo" è meglio di "foo == false".Riferimento from

  • concisione: partendo dal presupposto che ci si trova in un contesto in cui un valore booleano è
    richiesto, e "x" è un valore booleano, è meno caratteri per scrivere "x" che "x
    = = true ", o"! x "di" x == false ".

  • convenzione: condito programmatori in Java (o C, C++, C# e la maggior parte delle altre
    lingue) si aspettano di vedere "x", piuttosto
    di "x == true", e "x" piuttosto
    di "x == false".

  • Robustezza: in Java i condizionali e loop dichiarazioni tutte richiedono una
    booleana valutata espressione nella condizione
    . Se "y" non è un valore booleano,
    quindi un errore di battitura nel formato "if (y = foo) {" darà un errore di compilazione in
    Java. Ma se "y" è un booleano allora
    "if (y = foo) {" non fornisce un errore di compilazione . Quindi, evitando "==" per i booleani, si evita di impostare
    da soli per un'intera serie di bug
    risultanti da errori di battitura.

+3

-1 per ** copia di copia integrale di [risposta di Stephen] (http://stackoverflow.com/questions/1451152/difference-between-while-x-false-and-while-x-in-java/1453172 # 1.453.172).Innanzitutto, anche se esiste un collegamento, il contenuto viene visualizzato come se fosse il tuo o riformulato, mentre non lo è. Formattalo come citato in modo che non ci siano ambiguità. In secondo luogo, se la risposta incollata è appropriata, allora la domanda è molto probabilmente un duplicato e dovrebbe essere chiusa in quanto tale. Alla fine, questa è solo una cattiva pratica. –

+0

@Pascal Thivent Per la mia risposta ho aggiunto la mia vista (le prime 2 righe in grassetto) e aggiunta la sezione di riferimento di Stephen.Io ho aggiunto anche il link a cui è stato fatto riferimento. Non avevo intenzione di mostrare che la sezione di riferimento era la mia opinione. Mi dispiace se è così. Ho rimosso l'ambiguità e l'ho citata chiaramente. – YoK

+0

Grazie per aver rimosso l'ambiguità. Penso davvero che sia importante massimizzare la trasparenza e rimuoverò il mio downvote. –