2011-01-13 33 views
8

Die Frage ist einfach, gibt es eine funktionale Entsprechung der berühmten iif in Java?Java Äquivalent zur iif-Funktion

Zum Beispiel:

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

Vielen Dank im Voraus.

+1

JJnguy: Nein, 'iif' ist ein Inline-If-Funktion, die einen booleschen Wert als ersten Parameter verwendet, und wenn true den zweiten Parameter zurückgibt, und wenn false den dritten Parameter zurückgibt. – Gabe

+1

Für die Nachwelt: Bitte beachten Sie, dass die angenommene Antwort in Bezug auf einen Kurzschluss nicht korrekt ist. Lies http://stackoverflow.com/questions/822810/iif-equivalent-in-c stattdessen ... – dkarp

Antwort

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

oder in diesem speziellen Fall offensichtlich konnte man

vData.equals("S") 
+1

** Besonders ** das zweite Bit. Das ist vielen Leuten nicht so offensichtlich. –

+1

Das ist nicht ganz dasselbe. Die Verwendung von 'IIF (x, y, z)' wird immer 'y' und' z' auswerten (wodurch die Nebenwirkungen beider sichtbar werden), während 'x?y: z' wird nur "y" x oder "z" auswerten (wodurch die Nebenwirkungen von nur einem sichtbar werden). – Gabe

+0

@Gabe: VB unterstützt im Allgemeinen keine Kurzschlussauswertung. Obwohl VB.NET tut – sblundy

5

Ja, das ternäre op ? :

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

danke für die schnelle Antwort ... – seba123neo

2

schreibt nur, wenn das gleiche wie die logische iff ist.

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

oder

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

oder

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

EDIT: Aber es ist ziemlich wahrscheinlich, dass Sie nicht über eine Variable benötigen stattdessen können Sie auf das Ergebnis wirken. z.B.

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

BTW es gute Praxis angesehen werden kann

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

Der Unterschied zu verwenden, das zu sein, ist vData null ist das erste Beispiel eine Ausnahme ausgelöst wird, während die zweite falsch sein wird. Sie sollten sich fragen, was Sie bevorzugen würden.

+0

danke für die Antwort. – seba123neo

3

Der Hauptunterschied zwischen dem Java ternären Operator und IIf ist, dass IIfbeide werten der zurückgegebene Wert und der unreturned Wert, während die ternären Operator Kurzschlüsse und kehrte nur der Wert auswertet. Wenn es Nebenwirkungen bei der Bewertung gibt, sind die beiden nicht gleichwertig.

Sie können natürlich als statische Java-Methode neu implementieren. In diesem Fall werden beide Parameter zum Zeitpunkt des Anrufs ausgewertet, genau wie mit IIf. Aber es gibt kein integriertes Java-Sprachfeature, das genau mit IIf übereinstimmt.

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

(Beachten Sie, dass die ifTrue und ifFalse Argumente müssen in Java von der gleichen Art sein, entweder den ternären Operator oder diese generische Alternative verwenden.)

+0

danke, ich verstehe, ähnlich wie die Funktion AndAlso, OrElse in VB NET, oder? – seba123neo

+0

Ja, das ist ein weiteres Beispiel für einen Kurzschluss. – dkarp