2011-01-13 34 views
8

la pregunta es simple, ¿existe un equivalente funcional del famoso iif en java?Java Equivalente a la función iif

Por ejemplo:

IIf (vData = "S", True, False) 

Gracias de antemano.

+1

JJnguy: No, es un 'iif' función inline-if que toma un valor booleano como su primer parámetro, y cuando true devuelve el segundo parámetro, y cuando false devuelve el tercer parámetro. – Gabe

+1

Para la posteridad: tenga en cuenta que la respuesta aceptada no es realmente correcta con respecto a cortocircuitos. Lea http://stackoverflow.com/questions/822810/iif-equivalent-in-c en su lugar ... – dkarp

Respuesta

20
vData.equals("S") ? true : false 

o en este caso particular, obviamente, uno solo podían escribir

vData.equals("S") 
+1

** Especialmente ** el segundo bit. Eso no es tan obvio para mucha gente. –

+1

Esto no es exactamente lo mismo. El uso de 'IIF (x, y, z)' siempre evaluará 'y' y' z' (causando que los efectos secundarios de ambos sean visibles), mientras que 'x?y: z' solo evaluará 'y'xor' z' (causando que los efectos secundarios de solo uno sean visibles). – Gabe

+0

@Gabe: VB no admite la evaluación de cortocircuitos en general. Aunque VB.NET hace – sblundy

5

Sí, el op ternaria ? :

vData.equals("S") ? true : false 
+0

gracias por la respuesta rápida ... – seba123neo

2

si es la misma que la lógica si y sólo si.

boolean result; 
if (vData.equals("S")) 
    result = true; 
else 
    result = false; 

o

boolean result = vData.equals("S") ? true : false; 

o

boolean result = vData.equals("S"); 

EDIT: Sin embargo es bastante probable que no necesita una variable en lugar puede actuar sobre el resultado. p.ej.

if (vData.equals("S")) { 
    // do something 
} else { 
    // do something else 
} 

BTW se puede considerar buena práctica utilizar

if ("S".equals(vData)) { 

la diferencia de que es vData es nulo el primer ejemplo será una excepción mientras que el segundo será falsa. Debería preguntarse qué preferiría que ocurriera.

+0

gracias por la respuesta. – seba123neo

3

La principal diferencia entre el operador ternario Java y IIf es que IIf evalúa tanto el valor devuelto y el valor no devueltos, mientras que el operador ternario cortocircuitos y evalúa sólo el valor devuelto. Si hay efectos secundarios para la evaluación, los dos no son equivalentes.

Puede, por supuesto, volver a aplicar IIf como método estático de Java. En ese caso, ambos parámetros se evaluarán en la hora de la llamada, al igual que con IIf. Pero no hay una función de lenguaje Java integrado que equivalga exactamente a IIf.

public static <T> T iif(boolean test, T ifTrue, T ifFalse) { 
    return test ? ifTrue : ifFalse; 
} 

(Tenga en cuenta que los argumentos ifTrue y ifFalse deben ser del mismo tipo en Java, ya sea usando el operador ternario o el uso de esta alternativa genérica.)

+0

gracias, entiendo, similar a la función AndAlso, OrElse en VB NET, ¿verdad? – seba123neo

+0

Sí, ese es otro ejemplo de cortocircuito. – dkarp

Cuestiones relacionadas