2012-06-08 7 views
20

No puedo ver la ventaja de esta práctica de codificación. El proyecto con el que estoy trabajando ahora está lleno de estas declaraciones, por lo que no es un solo error.¿Por qué usar `return x == 5? true: falso; `?

Otro ejemplo:

return getNumberOfBooks() > 5 ? true : false; 

Y otro:

return isRed() ? true : false; 
+10

:-D este mismo muc h se parece a lo que mis compañeros de clase hicieron en nuestra clase de programación en la escuela secundaria. Como por ejemplo 'for (i = 0; i <3; i ++) {if (i == 1) puts (" 1 "); else if (i == 2) puts ("2"); else puts ("3"); } ' Ergo, me parece como si alguien entendiera mal que un valor booleano que se compara es tan bueno como uno dado por las constantes. – Imp

+1

Alguien tenía una fascinación con las expresiones ternarias. –

+9

@Imp: Irónicamente, la salida sería "3", "1", "2". – Makoto

Respuesta

48

No hay absolutamente ninguna razón para hacer esto.

Es redundante y hace que el código sea más difícil de leer.

Los siguientes son mucho más fáciles de leer:

return (getNumberOfBooks() > 5); 

return isRed(); 
+2

Incluso las llaves '(...)' en la primera vuelta no son necesarias. – Nawaz

+0

No me parece que * más * legible. Estoy seguro de que muchos tampoco lo harían. – Nawaz

+0

Por supuesto que no es necesario, pero creo que hace que el código sea más legible. – jahroy

2

operador ternario hace que el código casi ilegibles, su pensamiento una forma inteligente de codificación, pero no deben ser alentados a no ser que realmente se necesita

+0

De acuerdo ...¡El abuso del operador ternario me vuelve loco! – jahroy

+2

yup ..... tienes razón ... Cualquier tonto puede escribir un código que una computadora puede leer, pero solo grandes programadores escriben códigos que los humanos pueden leer –

+0

... Y por alguna razón, un montón de programadores se enorgullecen de escribiendo código complicado y difícil de leer. La legibilidad es el # 1 más importante al escribir código (una vez que lo haces funcionar correctamente). – jahroy

5

Parece que estás trabajando en un proyecto con programadores novatos. Empezar refactorización donde quiera que vea:

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

cambio por:

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

Mejor aún: 'return (getNumberOfBooks()> 5);' Eso es aún más legible (en mi opinión y según las convenciones de codificación). – jahroy

+0

@jahroy tienes razón, pero eso es solo un detalle: P –

2

Es evidente que esto es la redundancia innecesaria.

Sugiero hacerlo en Eclipse:

  1. encontrar todo lo que coincide con expresión regular "retorno (algo) cierto:? Falsa" y reemplazarlo con sólo something
  2. y todo lo que coincide con expresión regular retorno"(algo) falso:? verdadero" con (algo)

puede delegar escribir esta expresión regular para los que ha escrito este proyecto: D

Cuestiones relacionadas