2011-01-13 25 views
8

pytanie jest proste, istnieje funkcjonalny odpowiednik słynnego iif w Javie?Java Równoważna z funkcją iif

Na przykład:

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

góry dzięki.

+1

JJnguy: Nie, to 'iif' funkcja inline-if, która przyjmuje wartość boolowską jako swój pierwszy parametr, a gdy true zwraca drugi parametr, a gdy false zwraca trzeci parametr. – Gabe

+1

Dla potomności: Należy pamiętać, że zaakceptowana odpowiedź nie jest właściwie poprawna pod względem zwarcia. Przeczytaj http://stackoverflow.com/questions/822810/iif-equivalent-in-c zamiast ... – dkarp

Odpowiedz

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

czy w tym konkretnym przypadku oczywiście można po prostu napisać

vData.equals("S") 
+1

** Zwłaszcza ** drugi bit. To nie jest tak oczywiste dla wielu ludzi. –

+1

To nie jest dokładnie to samo. Użycie 'IIF (x, y, z)' zawsze będzie oceniało 'y' i' z' (powodując widoczne efekty uboczne), podczas gdy 'x?y: z' będzie przechwytywać tylko 'y' xor' z' (powodując widoczne efekty uboczne tylko jednego). – Gabe

+0

@Gabe: VB nie obsługuje ogólnie oceny zwarć. Chociaż VB.NET robi – sblundy

5

Tak, trójoperandowy op ? :

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

dzięki za szybką odpowiedź ... – seba123neo

2

jeśli jest taka sama jak logicznego IFF.

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

lub

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

lub

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

EDIT: Jednak jest to dość prawdopodobne, nie trzeba zmienną zamiast można działać na wynik. na przykład

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

okazji może być uważana za dobrą praktyką jest stosowanie

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

tą różnicą, że jest vData jest zerowy pierwszym przykładem będzie wyjątek, podczas gdy drugi jest fałszywa. Powinieneś zadać sobie pytanie, które z nich wolisz.

+0

dzięki za odpowiedź. – seba123neo

3

Główną różnicą pomiędzy potrójnego operatora Java i IIf że IIf ocenia zarówno zwrócona wartość i wartość niezwróconych, natomiast zwarcie operatora trójskładnikowych i ocenia tylko wartość zwracana. Jeśli występują efekty uboczne w ocenie, te dwie wartości nie są równoważne.

Oczywiście można ponownie zastosować IIf jako statyczną metodę Java. W takim przypadku oba parametry będą oceniane w czasie połączenia, tak jak w przypadku IIf. Ale nie ma wbudowanej funkcji języka Java, która odpowiada dokładnie IIf.

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

(Zauważ, że ifTrue i ifFalse argumenty musi być tego samego typu w Javie, albo za pomocą operatora potrójny lub za pomocą typowego alternatywy.)

+0

dzięki, rozumiem, podobnie jak funkcja AndAlso, OrElse w VB NET, prawda? – seba123neo

+0

Tak, to kolejny przykład zwarcia. – dkarp