2010-05-12 14 views
5

He escrito el siguiente if -statement en Java:Operador condicional en if-statement?

if(methodName.equals("set" + this.name) || 
    isBoolean() ? methodName.equals("is" + this.name) : 
        methodName.equals("get" + this.name)) { 
    ... 
} 

¿Es esta una buena práctica para escribir tales expresiones en if, para separar el estado de la condición? ¿Y se puede simplificar esta expresión?

+0

¿Conoce las herramientas de mapeo de Javabean existentes? Hay ** mucho ** :) – BalusC

+0

No tengo nada particularmente sustancial para contribuir, pero incluso como alguien que ama al operador ternario, debo señalar que algunas personas creen firmemente que debería usarse muy raramente. Esas personas probablemente desconfiarían de tu uso. –

+0

@BalusC: gran conjetura de mi actividad JavaBean. Lo estoy implementando solo para el hobby y el uso personal, limpiando la sintaxis dentro de Beans por 'super.property (newValue)' en cada setter. ;-) pero estoy al tanto de ellos, gracias por mencionarlos. – Pindatjuh

Respuesta

8

que cambiaría a

if (methodName.equals("set" + this.name) 
|| methodName.equals((isBoolean() ? "is" : "get") + this.name)) { 
    ... 
} 
+0

Y dejaría caer el '' redundante'' –

+1

@Software Monkey: ese es mi estilo de código, lo siento si te molesta. – Pindatjuh

+0

@Pindatjuh: Muy bien, dije "lo haría", no "deberías". A cada cual lo suyo. No me molesta, es solo un tipeo extra. –

2

¿Es una buena práctica? Es bueno si hace que sea más fácil de leer. Hace que sea más fácil de leer si (1) sí y (2) el tipo de persona que estaría confundida no lo leerá. ¿Quién lo va a leer?

2

¿No sería algo así como el siguiente trabajo?

if (methodName.equals("set" + this.name) 
    || methodName.equals("get" + this.name) 
    || (isBoolean() && methodName.equals("is" + this.name))) { 
    ... 
} 

Es más legible que la forma en que usó el operador ternario y, desde luego, es más fácil de entender. También tiene la ventaja de que puede evitar una llamada innecesaria al método isBoolean (tiene 1, 2 o 4 llamadas a métodos, mientras que la suya siempre tiene 1 o 3, la ganancia/pérdida de rendimiento es probablemente demasiado pequeña para darse cuenta).

También hay una pregunta similar aquí titulado "Is this a reasonable use of the ternary operator?" Un usuario tenía the following to say:

El operador ternario está destinado a un valor de retorno.

IMO, no debe mutar el estado, y se debe usar el valor de retorno.

En el otro caso, use las sentencias if. Si las declaraciones están destinadas a ejecutar bloques de código .

hacer la nota que incluí paréntesis alrededor de la expresión que contenga '& &' para facilitar la lectura. No son necesarios porque x && y se evalúa antes de m || n.

Si decide usarlo, depende de usted, pero tiendo a evitarlo en favor de la legibilidad.

+0

Su reescritura es muy práctica, ya que también pasará el método "getSomeBooleanProperty". Sin embargo, no es tan legible como el de SLaks (subjetivo). – Pindatjuh

2

me inclinaría a cambiarlo a

if (methodName.equals(setterForThis()) 
    || methodName.equals(getterForThis())) { 
    ... 
} 

con algunas funciones extraídos:

private String setterForThis() { 
    return "set" + this.name; 
} 

private String getterForThis() { 
    return (isBoolean() ? "is" : "get") + this.name; 
} 

Es más largo, por supuesto, pero no estoy realmente en el golf de todos modos.