2012-02-26 9 views
38

मैं सोच रहा था कि एक टर्नरी ऑपरेशन करना संभव था लेकिन कुछ भी वापस किए बिना।जावा: बिना वापसी के टर्नरी। (विधि कॉलिंग के लिए)

यदि जावा में यह संभव नहीं है तो क्या यह अन्य भाषाओं में संभव है, यदि ऐसा लागू होता है?

name.isChecked() ? name.setChecked(true):name.setChecked(false); 
+1

यह, उदाहरण के लिए यहाँ जावास्क्रिप्ट में संभव है: http://stackoverflow.com/a/6260001/320399 – blong

उत्तर

40

नहीं, आप नहीं कर सकते। लेकिन if-else कथन पर इसका क्या अर्थ है? क्या आप वाकई 7 अक्षरों को बचाने की कोशिश कर रहे हैं?

if (name.isChecked()) { 
    name.setChecked(true); 
} else { 
    name.setChecked(false); 
} 

या आप बुरा शैली पसंद करते हैं:

if (name.isChecked()) name.setChecked(true); else name.setChecked(false); 

कभी तथ्य यह है कि तुम सिर्फ कर सकते हैं (इस मामले में) मन:

name.setChecked(name.isChecked()); 

त्रिगुट या "की बात सशर्त "ऑपरेटर सशर्त को अभिव्यक्ति में पेश करना है। दूसरे शब्दों में, यह:

int max = a > b ? a : b; 

इस के लिए आशुलिपि करने के लिए है:

int max; 
if (a > b) { 
    max = a; 
} else { 
    max = b; 
} 

अगर वहाँ उत्पादन किया जा रहा कोई मूल्य नहीं है, सशर्त ऑपरेटर एक शॉर्टकट नहीं है।

0

कोड निम्नलिखित जावा में संभव नहीं करता है:

(1==1) ? System.out.println("") : System.out.println(""); 

आप निम्नलिखित प्राप्त संकलन त्रुटि:

The left-hand side of an assignment must be a variable 
+0

'(अपने-हालत)? (सत्य-बयान): (झूठी-बयान) 'जावा में संभव है लेकिन इसे एक मान वापस करना है (इसे शून्य नहीं किया जा सकता है) और आपको इसे एक चर को असाइन करना होगा। – jalv1039

5

(your-condition) ? (true-statements) : (false-statements) 

नमूने के लिए आप निम्नलिखित snipet कोड संकलन नहीं कर सकते

कभी-कभी, आप अपने अनुरोध को हल करने के लिए विधि तर्कों पर टर्नरी ऑपरेशन का उपयोग कर सकते हैं।

name.setChecked(name.isChecked() ? true : false); 

माध्यम से अपने peoblem लिए सबसे अच्छा समाधान

name.setCecked(name:isChecked()); 
10

I was wondering if it was possible to do a ternary operation but without returning anything.

नहीं है यह संभव नहीं है:

  1. 2 और 3 ऑपरेंड गैर होना भी आवश्यक है अभिव्यक्ति अभिव्यक्ति; यानी उन्हें कुछ वास्तविक मूल्य देना चाहिए।

    "It is a compile-time error for either the second or the third operand expression to be an invocation of a void method." - JLS 15.25 .

  2. एक त्रिगुट अभिव्यक्ति एक अभिव्यक्ति है, और एक बयान के रूप में इस्तेमाल नहीं किया जा सकता।

    "Certain kinds of expressions may be used as statements by following them with semicolons." ... and the ternary expression is not one of those kinds - JLS 14.8 .

तुम सच में, सच में एक त्रिगुट अभिव्यक्ति का उपयोग करने के लिए, लेकिन अभिव्यक्ति के मूल्य का उपयोग नहीं चाहते हैं, तो सबसे आसान बात एक डमी चर के लिए मान निर्दिष्ट करके दबाने के लिए टिप्पणी जोड़ने के लिए है परिवर्तनीय के बारे में चेतावनी का उपयोग नहीं किया जा रहा है।

लेकिन एक बेहतर विचार सादा if कथन का उपयोग करना है।

If it's not possible in Java is it possible in other languages, if so which ones apply?

मैं थोड़ा जंग लगी हूँ, लेकिन मुझे विश्वास है कि C, C++ और पर्ल सभी मनमाना भाव स्थानों में इस्तेमाल किया जा रहा है, जहां उनके मूल्यों के लिए इस्तेमाल नहीं कर रहे हैं अनुमति देते हैं।

0

आपको कुछ मूल्य वापस करना होगा और यदि आप एक शून्य विधि की तरह कार्य करना चाहते हैं तो यह काम नहीं करेगा जो किसी मूल्य को वापस किए बिना कुछ कार्य करता है।

आशा इस मदद करता है ...

+0

यह प्रश्न पहले से ही उत्तर दिया गया है। कृपया, [प्रश्नों को ठीक से पूछने के तरीके के बारे में जानने के लिए अक्सर पूछे जाने वाले प्रश्न पढ़ें] (http://stackoverflow.com/help/how-to-ask)। – zuazo

संबंधित मुद्दे