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.
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.
vData.equals("S") ? true : false
czy w tym konkretnym przypadku oczywiście można po prostu napisać
vData.equals("S")
** Zwłaszcza ** drugi bit. To nie jest tak oczywiste dla wielu ludzi. –
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
@Gabe: VB nie obsługuje ogólnie oceny zwarć. Chociaż VB.NET robi – sblundy
Tak, trójoperandowy op ? :
vData.equals("S") ? true : false
dzięki za szybką odpowiedź ... – seba123neo
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.
dzięki za odpowiedź. – seba123neo
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.)
dzięki, rozumiem, podobnie jak funkcja AndAlso, OrElse w VB NET, prawda? – seba123neo
Tak, to kolejny przykład zwarcia. – dkarp
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
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