लघु IF - ELSE कथन


82

मैं अपने कोड को अधिक पठनीय बनाने की कोशिश कर रहा हूं, इसलिए मैंने कुछ छोटे IF स्टेटमेंट्स का उपयोग करने का निर्णय लिया।

यहाँ मेरा कोड काम नहीं कर रहा है ("स्टेटमेंट नहीं"):

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

इसमें गलत क्या है? कोष्ठक की आवश्यकता है? कहाँ पे?


2
यद्यपि मौटेटो ने इसे लिखने का एक बेहतर तरीका प्रदान किया है, लेकिन इस संरचना को आमतौर पर टर्नरी ऑपरेटर कहा जाता है। (यदि आप सोच रहे थे;))
रीस मूर

यह सशर्त ऑपरेटर है। "टर्नरी" का अर्थ है कि इसमें 3 ऑपरेंड हैं।

सशर्त ऑपरेटर के लिए भाषा विनिर्देशन से लिंक: docs.oracle.com/javase/specs/jls/se10/html/…

जवाबों:


215

"टर्नरी अभिव्यक्ति" का x ? y : zउपयोग केवल सशर्त असाइनमेंट के लिए किया जा सकता है । अर्थात्, आप कुछ ऐसा कर सकते हैं:

String mood = inProfit() ? "happy" : "sad";

क्योंकि त्रिगुट अभिव्यक्ति कुछ वापस कर रही है ( Stringइस उदाहरण में प्रकार )।

यह वास्तव में एक छोटी, इन-लाइन के रूप में उपयोग करने के लिए नहीं है if-else। विशेष रूप से, आप इसका उपयोग नहीं कर सकते हैं यदि व्यक्तिगत भागों में मान वापस नहीं आता है, या असंगत प्रकारों के मान वापस करते हैं। (इसलिए जब आप ऐसा कर सकते हैं यदि दोनों विधि समान मान लौटाने के लिए हुई है, तो आपको इसे केवल साइड-इफेक्ट प्रयोजनों के लिए नहीं करना चाहिए )।

तो ऐसा करने का उचित तरीका सिर्फ अगर-ब्लॉक के साथ होगा:

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

कौन से कोर्स को छोटा किया जा सकता है

jXPanel6.setVisible(jXPanel6.isVisible());

वे दोनों बाद के भाव हैं, मेरे लिए, अधिक पठनीय है कि वे अधिक स्पष्ट रूप से संवाद करते हैं कि आप क्या करने की कोशिश कर रहे हैं। (और वैसे, क्या आपने अपनी शर्तों को गलत तरीके से गोल कर लिया? ऐसा लग रहा है कि यह एक टॉगल के बजाय वैसे भी एक नो-ऑप है)।

पठनीयता के साथ कम वर्ण गणना मत मिलाओ । सबसे महत्वपूर्ण बात यह है कि सबसे आसानी से समझा जाता है; और हल्के से भाषा की सुविधाओं का दुरुपयोग पाठकों को भ्रमित करने के लिए एक निश्चित तरीका है, या कम से कम उन्हें मानसिक रूप से दोहरा लेने का काम करता है।


1
यह केवल सच नहीं है कि आप केवल असाइनमेंट के लिए सशर्त ऑपरेटर का उपयोग कर सकते हैं। आप इसे कहीं भी उपयोग कर सकते हैं एक अभिव्यक्ति की आवश्यकता है।

28
jXPanel6.setVisible(jXPanel6.isVisible());

या आपके रूप में:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

14
एफडब्ल्यूआईडब्ल्यू, मुझे लगता है कि लिखने की कभी जरूरत नहीं है <bool condition> ? true : falseक्योंकि यह बिल्कुल सिर्फ इसके बराबर है <bool condition>
आंद्रेज डोयले

2
जाहिर है! लेकिन monczek ने शॉर्ट इफ-एल्स स्टेटमेंट के बारे में पूछा तो मैंने इसे सिंटैक्स दिखाने के लिए कोड कर दिया।
म्यूरेटो

4

टर्नरी ऑपरेटर केवल एक असाइनमेंट का दाईं ओर हो सकता है, न कि उसका स्वयं का स्टेटमेंट।

http://www.devdaily.com/java/edu/pj/pj010018/


यह सच नहीं है कि सशर्त ऑपरेटर केवल एक असाइनमेंट के आरएचएस पर उपयोग किया जा सकता है। इसका उपयोग कहीं भी किया जा सकता है एक अभिव्यक्ति का उपयोग किया जा सकता है।

3

जैसा कि दूसरों ने संकेत दिया है, कुछ का रूप

x ? y : z

एक अभिव्यक्ति है, पूर्ण (पूर्ण) कथन नहीं। यह एक प्रतिद्वंद्विता है जिसे किसी जगह का उपयोग करने की आवश्यकता होती है - जैसे कि असाइनमेंट के दाईं ओर, या फ़ंक्शन के लिए एक पैरामीटर आदि।

शायद आप इसे देख सकते हैं: http://download.oracle.com/javase/tutorial/java/nutsandbolts/xpressions.html


2

मुझे पार्टी में थोड़ी देर है लेकिन भविष्य के पाठकों के लिए।

मैं जो बता सकता हूं, आप केवल दृश्यता स्थिति को ठीक करना चाहते हैं? सिर्फ !ऑपरेटर का उपयोग क्यों नहीं ?

jxPanel6.setVisible(!jxPanel6.isVisible);

यह एक बयान नहीं है, लेकिन मैं आपके उदाहरण से संबंधित कोड के लिए इस विधि को पसंद करता हूं।


इसके अलावा, यदि आप राज्य को टॉगल करने की कोशिश कर रहे हैं, तो मुझे लगता है कि बयान पीछे की ओर है। क्या यह काम नहीं किया? क्या यह jXPanel6.isV अदृश्य () होना चाहिए? jXPanel6.setVanish (झूठा): jXPanel6.setVouble (सच);
एंडी बॉडी

यदि यह टॉगल स्टेटमेंट नहीं है, तो मैं कुछ दृश्य बनाने के उद्देश्य को नहीं समझता हूं जो पहले से ही इस तरह सेट है। अदृश्य राज्य को पुनः प्राप्त करता है और समुच्चय राज्य को सेट करता है, है ना? यदि अदृश्य कथन सत्य हो जाता है, तो इसे फिर से सत्य पर क्यों सेट करें। क्या मैं कुछ भूल रहा हूँ?
एंडी बॉडी

1

आप इसे इस रूप में सरल कर सकते हैं, मैंने इसे प्रतिक्रिया के रूप में किया:

 (myNumber == 12) ? "true" : "false"

यह इस लंबे समय के बराबर था यदि नीचे कार्य करें:

if (myNumber == 12) {
  "true"
} else {
  "false"
}

आशा है कि यह ^ _ ^ की मदद करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.