2011-01-13 27 views
8

पर समतुल्य प्रश्न सरल है, जावा में प्रसिद्ध आईआईएफ का कार्यात्मक समतुल्य है?जावा आईआईएफ फ़ंक्शन

उदाहरण के लिए:

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

अग्रिम धन्यवाद।

+1

JJnguy: नहीं, 'iif' एक है इनलाइन-अगर फ़ंक्शन जो बूलियन वैल्यू को अपने पहले पैरामीटर के रूप में लेता है, और जब सत्य दूसरे पैरामीटर को देता है, और जब झूठा तीसरा पैरामीटर देता है। – Gabe

+1

वंशावली के लिए: कृपया ध्यान दें कि स्वीकृत उत्तर वास्तव में शॉर्ट सर्किटिंग के संबंध में सही नहीं है। इसके बजाय http://stackoverflow.com/questions/822810/iif-equivalent-in-c पढ़ें ... – dkarp

उत्तर

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

या इस विशेष मामले में स्पष्ट रूप से एक बस

vData.equals("S") 
+1

** विशेष रूप से ** दूसरा बिट। यह बहुत से लोगों के लिए इतना स्पष्ट नहीं है। –

+1

यह बिल्कुल वही बात नहीं है। 'आईआईएफ (एक्स, वाई, जेड) 'का उपयोग हमेशा' y' और 'z' का मूल्यांकन करेगा (दोनों दिखाई देने के दुष्प्रभावों का कारण बनता है), जबकि' x?y: z' केवल 'y' xor' z' को उजागर करेगा (केवल एक के दृश्य प्रभाव को दिखाई देगा)। – Gabe

+0

@Gabe: वीबी सामान्य रूप से शॉर्ट-सर्किट मूल्यांकन का समर्थन नहीं करता है। हालांकि वीबीएनईटी – sblundy

5

हाँ, त्रिगुट सेशन ? :

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

त्वरित प्रतिक्रिया के लिए धन्यवाद ... – seba123neo

2

लिख सकता है अगर तार्किक iff के समान है।

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

या

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

या

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

संपादित करें: हालांकि इसकी काफी संभावना है कि आप एक चर की जरूरत नहीं है के बजाय आप परिणाम पर कार्य कर सकते हैं। जैसे

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

BTW यह

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

अंतर उपयोग करने के लिए किया जा रहा है अच्छा अभ्यास माना जा सकता है कि vData अशक्त पहला उदाहरण एक अपवाद फेंक होगा जबकि दूसरा झूठी हो जाएगा है। आपको खुद से पूछना चाहिए कि आप क्या करना पसंद करेंगे।

+0

उत्तर के लिए धन्यवाद। – seba123neo

3

जावा त्रिगुट ऑपरेटर और IIf के बीच मुख्य अंतर यह है कि IIf का मूल्यांकन करता है दोनों दिए गए मान और नहीं लौटाए गए मूल्य, जबकि त्रिगुट ऑपरेटर शॉर्ट सर्किट और केवल मान दिया आकलन करती है। यदि मूल्यांकन के दुष्प्रभाव हैं, तो दोनों बराबर नहीं हैं।

आप निश्चित रूप से IIf को स्थिर जावा विधि के रूप में पुन: कार्यान्वित कर सकते हैं। उस स्थिति में, दोनों पैरामीटर का मूल्यांकन कॉल समय पर किया जाएगा, जैसे IIf के साथ। लेकिन कोई अंतर्निहित जावा भाषा सुविधा नहीं है जो बिल्कुल IIf के बराबर होती है।

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

(ध्यान दें कि ifTrue और ifFalse तर्क जावा में एक ही प्रकार का होना चाहिए, या तो त्रिगुट ऑपरेटर का उपयोग या इस सामान्य विकल्प का उपयोग कर।)

+0

धन्यवाद, मैं समझता हूं, समारोह के समान और भी, वीबी नेट में OrElse, है ना? – seba123neo

+0

हां, यह शॉर्ट सर्किटिंग का एक और उदाहरण है। – dkarp