जावा क्या है ?: ऑपरेटर को बुलाया जाता है और यह क्या करता है?


161

मैं जावा के साथ कुछ वर्षों से काम कर रहा हूं, लेकिन हाल ही में जब तक मैं इस निर्माण में नहीं चला हूं:

int count = isHere ? getHereCount(index) : getAwayCount(index);

यह शायद एक बहुत ही सरल सवाल है, लेकिन क्या कोई इसे समझा सकता है? मैं इसे कैसे पढ़ूं? मुझे पूरा यकीन है कि मुझे पता है कि यह कैसे काम करता है।

  • अगर isHereयह सच है, getHereCount()कहा जाता है,
  • अगर isHereझूठ getAwayCount()कहा जाता है।

सही बात? इस निर्माण को क्या कहा जाता है?


2
इस प्रश्न के C ++ संस्करण के लिए stackoverflow.com/questions/795286/what-does-do-in-c भी देखें (वास्तव में कल ही पूछा है, वास्तव में)।
माइकल मायर्स

2
ध्यान रखें कि C / C ++ / Java दुनिया बहुत ही समान रूप से उन लोगों के बीच विभाजित है जो सोचते हैं कि यह बदसूरत और भ्रमित है और इसे प्लेग की तरह से बचाएगा, और जो लोग सोचते हैं कि आप वास्तव में C, C ++ या Java को जानने का दावा नहीं कर सकते हैं यदि आप सोचने के लिए बिना रुके इसे पहचान सकते हैं और इसका उपयोग कर सकते हैं।
पॉल टॉम्बलिन

3
यह आमतौर पर जावा में खराब रूप माना जाता है इसका उपयोग स्पष्ट और सरलतम मामलों से परे करने के लिए किया जाता है। यदि आप अपने आप को उन्हें घोंसले के शिकार पाते हैं, तो आप बाहर हैं। दूसरी ओर, सी संस्कृति में जहां तेज और चतुर कोड स्पष्टता से अधिक मूल्यवान है, इसे स्वीकार्य माना जाता है।
यिशै

17
answer_to_question = (पहचान_ओपरेटर)? (social_acceptance): (कृपालु_फिंगर_वाग)
दान

अधिक जानकारी के लिए आप इस संसाधन को देख सकते हैं ।
शिव

जवाबों:


189

हाँ, यह एक संक्षिप्त रूप है

int count;
if (isHere)
    count = getHereCount(index);
else
    count = getAwayCount(index);

इसे सशर्त ऑपरेटर कहा जाता है । कई लोग (ग़लती से) इसे टर्नेरी ऑपरेटर कहते हैं , क्योंकि यह जावा, सी, सी ++ और शायद कई अन्य भाषाओं में एकमात्र टर्नेरी (तीन-तर्क) ऑपरेटर है। लेकिन सैद्धांतिक रूप से एक और टर्नरी ऑपरेटर हो सकता है, जबकि केवल एक सशर्त ऑपरेटर हो सकता है ।

आधिकारिक नाम जावा भाषा विशिष्टता में दिया गया है :

§15.25 सशर्त संचालक? :

सशर्त ऑपरेटर ? :एक अभिव्यक्ति के बूलियन मूल्य का उपयोग करता है यह तय करने के लिए कि दो अन्य अभिव्यक्तियों में से किसका मूल्यांकन किया जाना चाहिए।

ध्यान दें कि दोनों शाखाओं को रिटर्न वैल्यू वाले तरीकों की ओर ले जाना चाहिए:

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

वास्तव में, अभिव्यक्ति बयानों ( ) 14.8 ) के व्याकरण द्वारा , यह सशर्त अभिव्यक्ति के लिए किसी भी संदर्भ में प्रकट होने की अनुमति नहीं है, जहां एक शून्य विधि का आह्वान दिखाई दे सकता है।

तो, अगर doSomething()और doSomethingElse()शून्य तरीके हैं, तो आप इस सेक नहीं कर सकते हैं:

if (someBool)
    doSomething();
else
    doSomethingElse();

इस मामले में:

someBool ? doSomething() : doSomethingElse();

आसान शब्द:

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 

मुझे समझ नहीं आता कि नीचे वाला क्या करता है जो गलत है। मुझे आप पर और सभी पर विश्वास है। यह मुझे मूल के रूप में ही दिखता है। क्या ऐसा इसलिए है क्योंकि वे सिर्फ एक अन्य फ़ंक्शन को कॉल करते हैं जो मान वापस नहीं कर सकता है या अगले कोड को चलाने की अनुमति दे सकता है?
जॉनी

8
मैं मान रहा हूँ doSomething () और doSomethingElse () शून्य विधियाँ हैं। कल्पना के अंतिम बिट में यह कहा गया है कि टर्नरी ऑपरेटर को एक मूल्य वापस करना होगा , इसलिए कोई भी ऑपरेंड शून्य तरीके नहीं हो सकता है।
माइकल मायर्स

यह उससे थोड़ा अधिक कहता है। यह कहता है कि सशर्त ऑपरेटर को अनुमति नहीं है जहां एक शून्य विधि COULD दिखाई देती है। इसलिए, उदाहरण के लिए, निम्नलिखित कथन: वैध: स्ट्रिंग x = (गलत)? "एक्स": "वाई"; वैध नहीं है: (झूठा)? "एक्स": "वाई";
kenj0418

4
ओबामा को "राष्ट्रपति" के रूप में संदर्भित करने के लिए इसे गलत तरीके से "टर्नरी ऑपरेटर" कहना ठीक नहीं है, क्योंकि 2016 में यह गलत नहीं है, भले ही यह संभव हो कि भविष्य में अन्य राष्ट्रपति होंगे।
दाऊद इब्न करीम

2
@DawoodibnKareem मैं माइकल जानबूझकर शामिल लगता है theकी italicisation में the ternary operator, और है कि वह क्या मतलब है गलत, वह यह है कि नहीं ternary operatorगलत है। त्रिगुट ऑपरेटर कि निकलता है, के रूप में माइकल कहते हैं, यह केवल एक ही है, बारी में एक का नेतृत्व कोई अन्य त्रिगुट ऑपरेटरों, जो माइकल कह रहा है गलत है हो सकता है ग्रहण करने के लिए कर सकता है जो, और मैं इस बात से सहमत हैं, यह होगा होना एक गलत धारणा है।
घोटी और चिप्स

32

दूसरों ने इसे उचित सीमा तक उत्तर दिया है, लेकिन अक्सर "टर्नरी ऑपरेटर" नाम के साथ।

पेडेंट होने के नाते, मैं यह स्पष्ट करना चाहता हूं कि ऑपरेटर का नाम सशर्त ऑपरेटर या "सशर्त ऑपरेटर है ?:"। यह एक टर्नरी ऑपरेटर है (इसमें इसके तीन ऑपरेंड हैं) और यह फिलहाल जावा में एकमात्र टर्नेरी ऑपरेटर है।

हालांकि, यह कल्पना बहुत स्पष्ट है कि इसका नाम सशर्त ऑपरेटर या "सशर्त ऑपरेटर ?:" बिल्कुल अस्पष्ट है। मुझे लगता है कि इसे उस नाम से पुकारना स्पष्ट है, क्योंकि यह ऑपरेटर के व्यवहार को कुछ हद तक इसके बजाय कुछ हद तक (किसी स्थिति का मूल्यांकन) करने के संकेत देता है।


3
यह उत्तर तकनीकी रूप से सही है। हालाँकि, चूंकि केवल एक ही टर्नरी ऑपरेटर है, आप अक्सर इसे टर्नरी ऑपरेटर के रूप में संदर्भित करते हैं। भले ही यह नाम ऑपरेटर के पूर्ण अर्थ को व्यक्त नहीं करता है, यह एक ऐसा नाम है जो अटक गया है। यदि आप "टर्नरी ऑपरेटर" नाम का उल्लेख करते हैं, तो प्रोग्रामर जानते हैं कि आप किस बारे में बात कर रहे हैं। आपके द्वारा उल्लेखित युक्ति भी इस ऑपरेटर को "टर्नरी कंडिशनल" के रूप में संदर्भित करती है जो अधिक जानकारीपूर्ण लगती है। java.sun.com/docs/books/jls/third_edition/html/…
गैरी

17
मुझे लगता है कि यह अपने परिभाषित नाम से कुछ कहने लायक है। विशेष रूप से, यदि जावा को कभी भी एक और टर्नरी ऑपरेटर मिलता है, जो लोग "सशर्त ऑपरेटर" शब्द का उपयोग करते हैं, तब भी वे सही और अस्पष्ट होंगे - उन लोगों के विपरीत जो "टर्नेरी ऑपरेटर" कहते हैं। हां, वाक्यांश "टर्नरी ऑपरेटर" अटक गया है - मेरा जवाब इसे "अस्थिर" करने के प्रयास का हिस्सा है, जैसे कि मैं इस दावे को सही करने की कोशिश करता हूं कि "ऑब्जेक्ट्स संदर्भ द्वारा पारित किए जाते हैं"।
जॉन स्कीट

1
क्या मैं आपको ओरेकल के इस पृष्ठ पर ले जा सकता हूं, जो तीन "सशर्त ऑपरेटरों" की बात करता है, लेकिन केवल एक "टर्नरी ऑपरेटर"? यदि आप यह स्पष्ट करना चाहते हैं कि आप किस ऑपरेटर से मतलब रखते हैं, तो संभवतः उस नाम का उपयोग करना बेहतर होगा जिसे अधिकांश लोग उपयोग करते हैं। (हां, मुझे पता है कि मैं पार्टी में दिखा रहा हूं जैसे मेजबान व्यंजन के अंतिम भाग को धो रहा है)।
दाऊद इब्न करीम

@DavidWallace: "सशर्त ऑपरेटर ?:" का उपयोग करना बेहतर है, IMO - इसे स्पष्ट करने के लिए संपादित करेगा। लेकिन मुझे लगता है कि लोगों को इसके एक पहलू (कितने ऑपरेंड हैं) पर ध्यान केंद्रित करने के बजाय ऑपरेटर के वास्तविक नाम का उपयोग करने के लिए राजी करने के लायक है, जिसका उसके व्यवहार से कोई लेना-देना नहीं है। (यह विनिर्देशन से कम सटीक होने के लिए ट्यूटोरियल के लिए भी असामान्य नहीं है, जो &&सशर्त-ऑपरेटर और ऑपरेटर, और ||सशर्त-या ऑपरेटर को कॉल करता है, लेकिन 7 के लिए सिर्फ "सशर्त ऑपरेटर" का उपयोग करता है ?:
जॉन स्कीट

मुझे नहीं पता। अगर कोई मुझे "सशर्त ऑपरेटर" कहता है, तो मुझे यकीन नहीं होगा कि उनका क्या मतलब है। जहां से मैं (आप से दुनिया के विपरीत छोर) लोग आते हैं, बस लोग इसे नहीं कहते हैं। यदि वे "टर्नरी ऑपरेटर" या "हुक ऑपरेटर" कहते हैं, तो मैं समझता हूं। मैं आपकी महत्वाकांक्षा की प्रशंसा करता हूं, लोगों के बात करने के तरीके को बदलना चाहता हूं। अगर कोई ऐसा कर सकता है, तो वह आप हैं। लेकिन मैं न तो बहुत आशा रखता हूं और न ही बहुत कुछ देखता हूं।
दाऊद इब्न करीम

17

सन जावा स्पेसिफिकेशन के अनुसार , इसे सशर्त संचालक कहा जाता है। 15.25 अनुभाग देखें। आप सही हैं कि यह क्या करता है।

सशर्त संचालक? : एक अभिव्यक्ति के बूलियन मूल्य का उपयोग यह तय करने के लिए कि दो अन्य अभिव्यक्तियों में से किसका मूल्यांकन किया जाना चाहिए।

सशर्त ऑपरेटर वाक्यात्मक रूप से दाएं-साहचर्य होता है (यह समूहों से दाएं-बाएं), ताकि a? B: c? D: e-f: g का अर्थ है a? B: (c? D: (e? F)? : छ))।

ConditionalExpression:
        ConditionalOrExpression
        ConditionalOrExpression ? Expression : ConditionalExpression

सशर्त ऑपरेटर के पास तीन ऑपरेंड भाव हैं; ? पहले और दूसरे भाव के बीच प्रकट होता है, और: दूसरे और तीसरे भाव के बीच प्रकट होता है।

पहली अभिव्यक्ति प्रकार बूलियन या बूलियन की होनी चाहिए, या एक संकलन-समय त्रुटि होती है।



5

सटीक होने के लिए बिल्कुल सही नहीं:

  1. अगर यह सच है, getHereCount () का परिणाम वापस आ गया है
  2. अन्य का परिणाम getAwayCount () लौटा दिया गया है

वह "लौटाया" बहुत महत्वपूर्ण है। इसका मतलब है कि तरीकों को एक मूल्य वापस करना चाहिए और उस मूल्य को कहीं सौंपा जाना चाहिए।

इसके अलावा, यह बिल्कुल-if संस्करण के बराबर वाक्यविन्यास नहीं है । उदाहरण के लिए:

String str1,str2,str3,str4;
boolean check;
//...
return str1 + (check ? str2 : str3) + str4;

अगर-और के साथ कोडित किया जाता है, तो हमेशा अधिक बाइटकोड का परिणाम होगा।


मेरा मानना ​​है कि एक ही बायोटेक उत्पन्न करने के लिए javac स्वतंत्रता है। यद्यपि आप सही हैं कि अस्पष्ट कोने के मामले हैं जहां वे समकक्ष नहीं हैं।
टॉम हैटिन

हां बिल्कुल। मेरे लिए, सशर्त ऑपरेटर की सही योग्यता मेरे द्वारा दिए गए उदाहरण हैं। विकल्प या तो हैं: // हांफना !! स्ट्रिंग टेम्प = str1; if (चेक) temp + = str2; और गति + = str3; अस्थायी + = str4; वापसी अस्थायी; या StringBuilder परिशिष्ट संचालन handcoding। 1 गंभीर दक्षता के मुद्दे से पीड़ित है, जबकि दूसरा भी बहुत अधिक क्रियाशील है और बहुत अधिक लाभ के बिना एक श्रमसाध्य प्रयास है।
रिचएन

4

टर्नरी, सशर्त; टमाटर, टमाटर। यह चर के लिए वास्तव में मूल्यवान है। यदि (मेरी तरह) आप उन वेरिएबल को आरम्भ करने के शौकीन हैं, जहाँ उन्हें परिभाषित किया गया है, तो सशर्त टर्नरी ऑपरेटर (इसके लिए यह दोनों है) आपको यह करने की अनुमति देता है कि ऐसे मामलों में जहाँ इसके मूल्य के बारे में सशर्तता है। विशेष रूप से अंतिम क्षेत्रों में उल्लेखनीय है, लेकिन अन्यत्र भी उपयोगी है।

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

public class Foo {
    final double    value;

    public Foo(boolean positive, double value) {
        this.value = positive ? value : -value;
    }
}

उस ऑपरेटर के बिना - जो भी नाम से - आपको क्षेत्र को गैर-अंतिम बनाना होगा या इसे प्रारंभ करने के लिए बस एक फ़ंक्शन लिखना होगा। वास्तव में, यह सही नहीं है - यह अभी भी इनिशियलाइज़ किया जा सकता है यदि / और, कम से कम जावा में। लेकिन मुझे यह क्लीनर लगता है।


4
condition ? truth : false;

यदि स्थिति है trueतो पहले अभिव्यक्ति का मूल्यांकन करें। यदि स्थिति है false, तो दूसरी अभिव्यक्ति का मूल्यांकन करें।

इसे कंडिशनल ऑपरेटर कहा जाता है और यह एक प्रकार का टर्नेरी ऑपरेशन है


1
जेएलएस के अनुसार , 15.25। सशर्त संचालक : यह "पैरामीटर" के बजाय "वापसी" और अभिव्यक्ति के बजाय मूल्यांकन है
गेरोल्ड ब्रोसर

3

इस निर्माण को कंप्यूटर विज्ञान और प्रोग्रामिंग तकनीकों में टर्नेरी ऑपरेटर कहा जाता है।
और विकिपीडिया निम्नलिखित स्पष्टीकरण का सुझाव देता है:

कंप्यूटर विज्ञान में, एक टर्नरी ऑपरेटर (कभी-कभी गलत तरीके से तृतीयक ऑपरेटर कहा जाता है) एक ऑपरेटर होता है जो तीन तर्क लेता है। तर्क और परिणाम विभिन्न प्रकार के हो सकते हैं। कई प्रोग्रामिंग भाषाएं जो सी-जैसे सिंटैक्स का उपयोग करती हैं, एक टर्नरी ऑपरेटर ;:; जो एक सशर्त अभिव्यक्ति को परिभाषित करती हैं।

जावा में ही नहीं, यह सिंटैक्स PHP, Objective-C के भीतर भी उपलब्ध है।

निम्नलिखित लिंक में यह निम्नलिखित स्पष्टीकरण देता है, जो इसे समझने के लिए अच्छा है:

एक टर्नरी ऑपरेटर कुछ ऑपरेशन 3 इनपुट पर काम कर रहा है। यह एक if-else स्टेटमेंट के लिए एक शॉर्टकट है, और इसे सशर्त ऑपरेटर के रूप में भी जाना जाता है।

पर्ल / पीएचपी में यह निम्नानुसार काम करता है:
boolean_condition ? true_value : false_value

C / C ++ में यह इस प्रकार काम करता है:
logical expression ? action for true : action for false

यह कुछ तार्किक स्थितियों के लिए पठनीय हो सकता है जो बहुत जटिल नहीं हैं अन्यथा सशर्त तर्क के संयोजन के साथ इफ-एल्स ब्लॉक का उपयोग करना बेहतर है ।

हम एक कोड स्टेटमेंट लाइन के लिए इस Ternary ऑपरेटर के साथ if -Else ब्लॉक को सरल बना सकते हैं ।
उदाहरण के लिए:

if ( car.isStarted() ) {
     car.goForward();
} else {
     car.startTheEngine();
}

निम्नलिखित के बराबर हो सकता है:

( car.isStarted() ) ? car.goForward() : car.startTheEngine();

इसलिए यदि हम आपके कथन को देखें:

int count = isHere ? getHereCount(index) : getAwayCount(index);

यह वास्तव में निम्नलिखित इफ-एल्स ब्लॉक के 100% समकक्ष है :

int count;
if (isHere) {
    count = getHereCount(index);
} else {
    count = getAwayCount(index);
}

बस!
आशा है कि यह किसी के लिए उपयोगी था!
चीयर्स!


2

सही बात। इसे टर्नरी ऑपरेटर कहा जाता है । कुछ इसे सशर्त संचालक भी कहते हैं ।


9
ऐलिस इन वंडरलैंड को उद्धृत करने के लिए, इसे टर्नेरी ऑपरेटर कहा जाता है, लेकिन इसका नाम कंडिशनल ऑपरेटर है।
पॉल टॉम्बलिन

लेकिन इसका नाम प्रश्न-चिह्न बृहदान्त्र ऑपरेटर कहलाता है।
माइकल मायर्स

1
नामकरण की ध्वनि थोड़ी सी + + + ish। कोलन ऑपरेटर पर सवालिया निशान?: (एक टोकन) एल्विस ऑपरेटर के रूप में जाना जाता है।
टॉम हॉल्टिन

2

इसका टर्नरी ऑपरेटर (?)

The ternary operator is an operator that takes three arguments. The first 
argument is a comparison argument, the second is the result upon a true 
comparison, and the third is the result upon a false comparison.

1

आप कुछ नए ऑपरेटरों के लिए एक प्रस्ताव में दिलचस्पी ले सकते हैं जो सशर्त ऑपरेटर के समान हैं। अशक्त-सुरक्षित ऑपरेटर इस तरह कोड को सक्षम करेंगे:

String s = mayBeNull?.toString() ?: "null";

यह विशेष रूप से सुविधाजनक होगा जहां ऑटो-अनबॉक्सिंग होता है।

Integer ival = ...;  // may be null
int i = ival ?: -1;  // no NPE from unboxing

इसे JDK 7 के "प्रोजेक्ट कॉइन" के तहत आगे के विचार के लिए चुना गया है ।


वह संचालक प्रोजेक्ट कॉइन से मेरा पसंदीदा नहीं है। सीमित उपयोगिता, पढ़ने के लिए सहज नहीं है, और सभी के रूप में सीधे सादे बदसूरत। शायद यह मुझ पर बढ़ेगा, हालांकि।
माइकल मायर्स

मैं वास्तव में बहुत बड़ा प्रशंसक नहीं हूं। यह एक नील गाय का प्रस्ताव है, और वह चीजों को आपके औसत जावा प्रोग्रामर से बहुत अलग तरीके से देखता है, जो आपके औसत इंसान से अलग चीजों को देखते हैं। एकमात्र स्थान जो मुझे पसंद हो सकता है, नल के साथ थोड़ी मदद एक फ़ॉरच लूप में है, यह परीक्षण करना कि क्या चलने योग्य अशक्त है, और ऑटो-अनबॉक्सिंग।
इरिकसन

IIRC <नील ने इसका प्रस्ताव नहीं किया। उन्होंने इसे केवल एक सरल उदाहरण के रूप में इस्तेमाल किया कि प्रस्ताव कैसे लिखें। प्रोजेक्ट सिक्का मेलिंग सूची संग्रह पर अधिक जानकारी।
टॉम हॉल्टिन

मैं सिर्फ प्रस्ताव को इंट्रो पढ़ता हूं, और आप सही हैं। यह जोदा का स्टीफन कोलबोर्न है और "कोई जावा 7" प्रसिद्धि नहीं है।
इरिकसन

1

दरअसल इसमें 3 से ज्यादा तर्क दिए जा सकते हैं। उदाहरण के लिए अगर हम एक संख्या को देखना चाहते हैं तो सकारात्मक, नकारात्मक या शून्य हम यह कर सकते हैं:

String m= num > 0 ? "is a POSITIVE NUMBER.": num < 0 ?"is a NEGATIVE NUMBER." :"IT's ZERO.";

जो अगर, और अगर, का उपयोग करने से बेहतर है।


0

यह सशर्त ऑपरेटर है, और यदि यह बयान करता है तो यह केवल लेखन का एक संक्षिप्त तरीका है।

चूंकि यह एक अभिव्यक्ति है जो एक मूल्य लौटाता है जिसका उपयोग अन्य अभिव्यक्तियों के हिस्से के रूप में किया जा सकता है।


0

हाँ आप सही हैं। ?: आम तौर पर "टर्नरी सशर्त ऑपरेटर" कहा जाता है, जिसे अक्सर "टर्नरी ऑपरेटर" कहा जाता है। यह मानक का शॉर्टहैंड संस्करण है यदि / और सशर्त।

टर्नेरी कंडिशनल ऑपरेटर


0

मैं वास्तव में इस ऑपरेटर को पसंद करता हूं, लेकिन पाठक को ध्यान में रखा जाना चाहिए।

आपको हमेशा इसे पढ़ते हुए समय बिताने के साथ कोड कॉम्पैक्टनेस को संतुलित करना होगा, और इसमें कुछ बहुत गंभीर खामियां हैं।

सबसे पहले, मूल पूछनेवाला का मामला है। उन्होंने इसके बारे में पोस्ट करने और प्रतिक्रियाओं को पढ़ने में सिर्फ एक घंटा लगाया। लेखक को हर लिखने में कितनी देर लगी होगी ?: एक पूरे जीवन के दौरान अगर / तो। निश्चित होने का एक घंटा भी नहीं।

दूसरी बात, सी-लाइक भाषाओं में, आपको बस यह जानने की आदत है कि लाइन में कंडीशन्स पहली चीज हैं। मैंने इस पर ध्यान दिया जब मैं रूबी का उपयोग कर रहा था और लाइनों की तरह आया:

callMethodWhatever(Long + Expression + with + syntax) if conditional

अगर मैं लंबे समय से रूबी उपयोगकर्ता था, तो शायद मुझे इस लाइन के साथ कोई समस्या नहीं थी, लेकिन सी से आने पर, जब आप "callMethodWhatever" को लाइन में पहली चीज के रूप में देखते हैं, तो आप इसे निष्पादित करने की उम्मीद करते हैं। ?:? कम गूढ़ है, लेकिन अभी भी असामान्य रूप से एक पाठक को फेंकने के लिए पर्याप्त है।

हालांकि, फायदा यह है कि आपके पेट में वास्तव में एक अच्छा अहसास होता है, जब आप 1 पंक्ति के स्थान पर कथन में 3-पंक्ति लिख सकते हैं। इस बात से इनकार नहीं किया जा सकता है :) लेकिन ईमानदारी से, 90% लोगों द्वारा इसकी पठनीयता के कारण जरूरी नहीं है।

जब यह वास्तव में एक बूलियन और मूल्यों पर आधारित एक असाइनमेंट है, तो मुझे इसमें कोई समस्या नहीं है, लेकिन इसका आसानी से दुरुपयोग किया जा सकता है।


0

सशर्त अभिव्यक्ति पूरी तरह से अलग शैली में हैं, यदि कथन में कोई स्पष्ट नहीं है।

वाक्यविन्यास है: बूलियन-एक्सप्रेशन? अभिव्यक्ति 1: अभिव्यक्ति 2;

इस सशर्त अभिव्यक्ति का परिणाम है

अभिव्यक्ति 1 अगर बूलियन-अभिव्यक्ति सच है;

अन्यथा परिणाम अभिव्यक्ति 2 है।

मान लीजिए कि आप बड़ी संख्या में चर संख्या 1 और अंक 2 को अधिकतम तक निर्दिष्ट करना चाहते हैं। आप बस सशर्त अभिव्यक्ति का उपयोग करके एक बयान लिख सकते हैं: अधिकतम = (num1> num2)? num1: num2;

नोट: प्रतीकों? और: सशर्त अभिव्यक्ति में एक साथ दिखाई देते हैं। वे एक सशर्त ऑपरेटर बनाते हैं और उन्हें एक टर्नरी ऑपरेटर भी कहा जाता है क्योंकि यह तीन ऑपरेंड का उपयोग करता है। यह जावा में एकमात्र टर्नेरी ऑपरेटर है।

से उद्धृत: Y. डैनियल लिआंग पृष्ठ 126 - 127 द्वारा जावा प्रोग्रामिंग 10 वें संस्करण में परिचय

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