2012-06-08 12 views
20

Non riesco a vedere il vantaggio di questa pratica di codifica. Il progetto con cui sto lavorando ora è pieno di queste affermazioni quindi non è un singolo errore.Perché usare `return x == 5? vero: falso; `?

Un altro esempio:

return getNumberOfBooks() > 5 ? true : false; 

E un altro:

return isRed() ? true : false; 
+10

:-D questo molto muc assomiglia a quello che facevano i miei compagni di classe al nostro corso di programmazione al liceo. Come per esempio 'for (i = 0; i <3; i ++) {if (i == 1) puts (" 1 "); else if (i == 2) puts ("2"); else puts ("3"); } '. Ergo, mi sembra l'incomprensione di qualcuno che un valore booleano che viene fuori dal confronto sia altrettanto buono di quello dato dalle costanti. – Imp

+1

Qualcuno ha avuto il fascino delle espressioni ternarie. –

+9

@Imp: ironicamente, l'output sarebbe "3", "1", "2". – Makoto

risposta

48

Non c'è assolutamente alcuna ragione per farlo.

È ridondante e rende il codice più difficile da leggere.

Di seguito sono di gran lunga più facile da leggere:

return (getNumberOfBooks() > 5); 

return isRed(); 
+2

Anche le parentesi '(...)' nel primo ritorno non sono necessarie. – Nawaz

+0

Non trovo che * più * leggibile. Sono sicuro che molti non lo farebbero nemmeno. – Nawaz

+0

Ovviamente non è _needed_, ma credo che renda il codice più leggibile. – jahroy

2

operatore ternario rende il codice quasi illeggibile, suo pensiero un modo intelligente di codifica, ma non dovrebbero essere incoraggiati a meno che davvero bisogno

+0

Concordato ...L'abuso dell'operatore ternario mi fa impazzire! – jahroy

+2

sì ... hai ragione ... Qualsiasi pazzo può scrivere un codice che un computer può leggere, ma solo grandi programmatori scrivono codici che l'umano può leggere –

+0

... E per qualche motivo, tonnellate di programmatori sono orgogliosi scrivere codice ingannevole, difficile da leggere. La leggibilità è la cosa più importante # 1 quando si scrive codice (una volta che si ottiene il corretto funzionamento). – jahroy

5

Sembra che stai lavorando a un progetto con programmatori principianti. Inizia refactoring dove mai si vede:

return getNumberOfBooks() > 5 ? true : false; 
return isRed() ? true : false; 

modificarlo:

return getNumberOfBooks() > 5; 
return isRed(); 
+1

Ancora meglio: 'return (getNumberOfBooks()> 5);' Questo è ancora più leggibile (secondo me e secondo le convenzioni di codifica). – jahroy

+0

@jahroy hai ragione ma questo è solo un dettaglio: P –

2

Chiaramente questa è la ridondanza inutile.

Suggerisco di farlo in Eclipse:

  1. trovare tutti che soddisfa le regexp "di ritorno (qualcosa) vere:? False" e sostituirlo con un solo something
  2. e tutto quello che soddisfa regexp "di ritorno (qualcosa) falso: true" con (qualcosa)

È possibile delegare a scrivere questa espressione regolare a chi ha scritto questo progetto!: D

Problemi correlati