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.
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.
vData.equals("S") ? true : false
o en este caso particular, obviamente, uno solo podían escribir
vData.equals("S")
** Especialmente ** el segundo bit. Eso no es tan obvio para mucha gente. –
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
@Gabe: VB no admite la evaluación de cortocircuitos en general. Aunque VB.NET hace – sblundy
Sí, el op ternaria ? :
vData.equals("S") ? true : false
gracias por la respuesta rápida ... – seba123neo
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.
gracias por la respuesta. – seba123neo
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.)
gracias, entiendo, similar a la función AndAlso, OrElse en VB NET, ¿verdad? – seba123neo
Sí, ese es otro ejemplo de cortocircuito. – dkarp
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
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