la domanda è semplice, esiste un equivalente funzionale del famoso iif in java?Java Equivalente alla funzione iif
Ad esempio:
IIf (vData = "S", True, False)
Grazie in anticipo.
la domanda è semplice, esiste un equivalente funzionale del famoso iif in java?Java Equivalente alla funzione iif
Ad esempio:
IIf (vData = "S", True, False)
Grazie in anticipo.
vData.equals("S") ? true : false
o in questo caso particolare, ovviamente, si potrebbe semplicemente scrivere
vData.equals("S")
** Specialmente ** il secondo bit. Non è così ovvio per molte persone. –
Questa non è esattamente la stessa cosa. L'uso di 'IIF (x, y, z)' valuterà sempre 'y' e' z' (causando la visibilità di entrambi gli effetti collaterali), mentre 'x?y: z' mostrerà solo 'y' xor' z' (facendo sì che gli effetti collaterali di uno solo siano visibili). – Gabe
@Gabe: VB non supporta la valutazione di cortocircuito in generale. Anche se VB.NET fa – sblundy
Sì, l'op ternario ? :
vData.equals("S") ? true : false
grazie per la rapida risposta ... – seba123neo
se è lo stesso del sse logico.
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: Tuttavia la sua molto probabile che non è necessario una variabile invece si può agire sul risultato. per esempio.
if (vData.equals("S")) {
// do something
} else {
// do something else
}
proposito può essere buona norma utilizzare
if ("S".equals(vData)) {
La differenza è che è vData è nullo il primo esempio sarà un'eccezione mentre il secondo sarà falso. Dovresti chiederti quale preferiresti accadere.
grazie per la risposta. – seba123neo
La differenza principale tra l'operatore ternario Java e IIf
è che valuta le IIf
sia il valore restituito e il valore unreturned, mentre l'operatore ternario cortocircuiti e valuta solo il valore restituito. Se ci sono effetti collaterali per la valutazione, i due non sono equivalenti.
È possibile, ovviamente, reimplementare IIf
come metodo Java statico. In tal caso, entrambi i parametri verranno valutati al momento della chiamata, proprio come con IIf
. Ma non esiste una funzionalità di linguaggio Java integrata che corrisponda esattamente a IIf
.
public static <T> T iif(boolean test, T ifTrue, T ifFalse) {
return test ? ifTrue : ifFalse;
}
(Si noti che gli argomenti ifTrue
e ifFalse
devono essere dello stesso tipo in Java, sia utilizzando l'operatore ternario o usando questo generico alternativa.)
grazie, capisco, simile alla funzione AndAlso, OrElse in VB NET, giusto? – seba123neo
Sì, questo è un altro esempio di cortocircuito. – dkarp
JJnguy: No, 'iif' è un funzione inline-if che accetta un valore booleano come primo parametro e quando true restituisce il secondo parametro e quando false restituisce il terzo parametro. – Gabe
Per i posteri: Si prega di notare che la risposta accettata non è effettivamente corretta rispetto al cortocircuito. Leggi http://stackoverflow.com/questions/822810/iif-equivalent-in-c invece ... – dkarp