2011-01-13 14 views
8

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.

+1

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

+1

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

risposta

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

o in questo caso particolare, ovviamente, si potrebbe semplicemente scrivere

vData.equals("S") 
+1

** Specialmente ** il secondo bit. Non è così ovvio per molte persone. –

+1

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

+0

@Gabe: VB non supporta la valutazione di cortocircuito in generale. Anche se VB.NET fa – sblundy

5

Sì, l'op ternario ? :

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

grazie per la rapida risposta ... – seba123neo

2

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.

+0

grazie per la risposta. – seba123neo

3

La differenza principale tra l'operatore ternario Java e IIf è che valuta le IIfsia 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 ifFalsedevono essere dello stesso tipo in Java, sia utilizzando l'operatore ternario o usando questo generico alternativa.)

+0

grazie, capisco, simile alla funzione AndAlso, OrElse in VB NET, giusto? – seba123neo

+0

Sì, questo è un altro esempio di cortocircuito. – dkarp