सशर्त (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Control flow statement that executes code according to some condition(s)}} {{Self reference|For Wikipedia's conditional parser functions, see Help:Condit...")
 
No edit summary
Line 1: Line 1:
{{Short description|Control flow statement that executes code according to some condition(s)}}
{{Short description|Control flow statement that executes code according to some condition(s)}}
{{Self reference|For Wikipedia's conditional parser functions, see [[Help:Conditional expressions]]}}
{{Self reference|For Wikipedia's conditional parser functions, see [[सहायता: सशर्त भाव]]}}
[[File:If-Then-Else-diagram.svg|thumb|यदि-तो-वरना प्रवाह आरेख]]
[[File:If-Then-Else-diagram.svg|thumb|यदि-तो-वरना प्रवाह आरेख]]
[[File:IF-THEN-ELSE-END flowchart.svg|thumb|right|एक नेस्टेड अगर-फिर-अन्यथा प्रवाह आरेख]][[कंप्यूटर विज्ञान]] में, सशर्त (यानी, सशर्त बयान, सशर्त अभिव्यक्ति और सशर्त निर्माण) निर्णय लेने के लिए [[प्रोग्रामिंग भाषा]] आदेश हैं। विशेष रूप से, सशर्त अलग-अलग संगणना या क्रियाएं करते हैं, जो इस बात पर निर्भर करता है कि प्रोग्रामर-परिभाषित [[बूलियन डेटाटाइप]] 'स्थिति' सही या गलत का मूल्यांकन करता है या नहीं। नियंत्रण प्रवाह के संदर्भ में, निर्णय हमेशा कुछ स्थिति के आधार पर नियंत्रण प्रवाह को चुनिंदा रूप से बदलकर प्राप्त किया जाता है ([[शाखा भविष्यवाणी]] के मामले के अलावा)।
[[File:IF-THEN-ELSE-END flowchart.svg|thumb|right|एक नेस्टेड अगर-फिर-अन्यथा प्रवाह आरेख]][[कंप्यूटर विज्ञान]] में, सशर्त (अर्थात, सशर्त कथन, सशर्त अभिव्यक्ति और सशर्त निर्माण) निर्णय लेने के लिए [[प्रोग्रामिंग भाषा]] आदेश हैं। विशेष रूप से, सशर्त अलग-अलग संगणना या क्रियाएं करते हैं, जो इस बात पर निर्भर करता है कि प्रोग्रामर-परिभाषित [[बूलियन डेटाटाइप]] 'स्थिति' सही या गलत का मूल्यांकन करता है या नहीं। नियंत्रण प्रवाह के संदर्भ में, निर्णय सदैव कुछ स्थिति के आधार पर नियंत्रण प्रवाह को वरणक्षमतापूर्वक रूप से बदलकर प्राप्त किया जाता है ([[शाखा भविष्यवाणी]] के स्थिति  के अतिरिक्त )।


हालांकि [[गतिशील प्रेषण]] को आमतौर पर सशर्त निर्माण के रूप में वर्गीकृत नहीं किया जाता है, यह रन टाइम (प्रोग्राम जीवनचक्र चरण) में विकल्पों के बीच चयन करने का एक और तरीका है।
यद्यपि  [[गतिशील प्रेषण]] को सामान्यतः  सशर्त निर्माण के रूप में वर्गीकृत नहीं किया जाता है, यह रन टाइम (प्रोग्राम जीवनचक्र चरण) में विकल्पों के बीच चयन करने की  एक और विधि है।


== शब्दावली ==
== शब्दावली ==
[[अनिवार्य प्रोग्रामिंग]] भाषाओं में, सशर्त [[बयान (प्रोग्रामिंग)]] शब्द का आमतौर पर उपयोग किया जाता है, जबकि [[कार्यात्मक प्रोग्रामिंग]] में, सशर्त [[अभिव्यक्ति (प्रोग्रामिंग)]] या सशर्त निर्माण को प्राथमिकता दी जाती है, क्योंकि इन सभी शब्दों के अलग-अलग अर्थ होते हैं।
[[अनिवार्य प्रोग्रामिंग]] भाषाओं में, सशर्त [[बयान (प्रोग्रामिंग)|कथन (प्रोग्रामिंग)]] शब्द का सामान्यतः  उपयोग किया जाता है, जबकि [[कार्यात्मक प्रोग्रामिंग]] में, सशर्त [[अभिव्यक्ति (प्रोग्रामिंग)]] या सशर्त निर्माण को प्राथमिकता दी जाती है, क्योंकि इन सभी शब्दों के अलग-अलग अर्थ होते हैं।


== अगर-फिर (-अन्य) ==
== अगर-फिर (-अन्य) ==
Line 27: Line 27:
  अगर अंत
  अगर अंत


ऊपर दिए गए उदाहरण कोड में, ''(बूलियन स्थिति)'' द्वारा दर्शाया गया भाग एक सशर्त ''अभिव्यक्ति'' का गठन करता है, जिसका आंतरिक मूल्य होता है (उदाहरण के लिए, इसे किसी भी मान द्वारा प्रतिस्थापित किया जा सकता है <code>True</code> या <code>False</code>) लेकिन कोई आंतरिक अर्थ नहीं है। इसके विपरीत, इस अभिव्यक्ति का संयोजन, <code>If</code> और <code>Then</code> इसके आस-पास, और इसके बाद के परिणाम एक सशर्त बयान का गठन करते हैं, जिसका आंतरिक अर्थ होता है (उदाहरण के लिए, एक सुसंगत तार्किक नियम व्यक्त करना) लेकिन कोई आंतरिक मूल्य नहीं।
ऊपर दिए गए उदाहरण कोड में, ''(बूलियन स्थिति)'' द्वारा दर्शाया गया भाग एक सशर्त ''अभिव्यक्ति'' का गठन करता है, जिसका आंतरिक मूल्य होता है (उदाहरण के लिए, इसे किसी भी मान द्वारा प्रतिस्थापित किया जा सकता है <code>True</code> या <code>False</code>) लेकिन कोई आंतरिक अर्थ नहीं है। इसके विपरीत, इस अभिव्यक्ति का संयोजन, <code>If</code> और <code>Then</code> इसके आस-पास, और इसके बाद के परिणाम एक सशर्त कथन का गठन करते हैं, जिसका आंतरिक अर्थ होता है (उदाहरण के लिए, एक सुसंगत तार्किक नियम व्यक्त करना) लेकिन कोई आंतरिक मूल्य नहीं।


जब एक [[दुभाषिया (कंप्यूटिंग)]] एक पाता है <code>If</code>, यह एक बूलियन डेटाटाइप स्थिति की अपेक्षा करता है - उदाहरण के लिए, <code>x > 0</code>, जिसका अर्थ है कि चर x में एक संख्या है जो शून्य से अधिक है - और उस स्थिति का मूल्यांकन करता है। यदि शर्त है <code>true</code>, निम्नलिखित बयान <code>then</code> निष्पादित किए जाते हैं। अन्यथा, निम्नलिखित शाखा में निष्पादन जारी रहता है - या तो <code>else</code> [[ब्लॉक (प्रोग्रामिंग)]] (जो आमतौर पर वैकल्पिक होता है), या यदि नहीं है <code>else</code> शाखा, उसके बाद <code>end If</code>.
जब एक [[दुभाषिया (कंप्यूटिंग)]] एक पाता है <code>If</code>, यह एक बूलियन डेटाटाइप स्थिति की अपेक्षा करता है - उदाहरण के लिए, <code>x > 0</code>, जिसका अर्थ है कि चर x में एक संख्या है जो शून्य से अधिक है - और उस स्थिति का मूल्यांकन करता है। यदि शर्त है <code>true</code>, निम्नलिखित कथन <code>then</code> निष्पादित किए जाते हैं। अन्यथा, निम्नलिखित शाखा में निष्पादन जारी रहता है - या तो <code>else</code> [[ब्लॉक (प्रोग्रामिंग)]] (जो सामान्यतः  वैकल्पिक होता है), या यदि नहीं है <code>else</code> शाखा, उसके बाद <code>end If</code>.


किसी भी शाखा के निष्पादित होने के बाद, नियंत्रण प्रवाह बिंदु पर वापस आ जाता है <code>end If</code>.
किसी भी शाखा के निष्पादित होने के बाद, नियंत्रण प्रवाह बिंदु पर वापस आ जाता है <code>end If</code>.


=== इतिहास और विकास ===
=== इतिहास और विकास ===
प्रारंभिक प्रोग्रामिंग भाषाओं में, विशेष रूप से 1980 के घरेलू कंप्यूटरों में [[BASIC]] की कुछ बोलियाँ, a <code>if–then</code> कथन में केवल शामिल हो सकता है <code>[[GOTO]]</code> बयान (एक शाखा (कंप्यूटर विज्ञान) निर्देश के बराबर)। इसने [[स्पेगेटी प्रोग्रामिंग]] के रूप में जानी जाने वाली प्रोग्रामिंग की एक कठिन-से-पढ़ने वाली शैली का नेतृत्व किया, इस शैली के कार्यक्रमों के साथ स्पेगेटी कोड कहा जाता है। नतीजतन, [[संरचित प्रोग्रामिंग]], जो (वस्तुतः) मनमाना बयानों को एक के अंदर स्टेटमेंट ब्लॉक में डालने की अनुमति देती है <code>if</code> बयान, लोकप्रियता में प्राप्त हुआ, जब तक कि यह अधिकांश बुनियादी प्रोग्रामिंग सर्किलों में भी आदर्श नहीं बन गया। इस तरह के तंत्र और सिद्धांत पुराने लेकिन अधिक उन्नत [[ALGOL]] भाषाओं के परिवार पर आधारित थे, और ALGOL जैसी भाषाएँ जैसे [[पास्कल (प्रोग्रामिंग भाषा)]] और मोडुला -2 ने कई वर्षों तक आधुनिक BASIC वेरिएंट को प्रभावित किया। जबकि यह केवल प्रयोग करते हुए ही संभव है <code>GOTO</code> बयानों में <code>if–then</code> प्रोग्राम लिखने के लिए बयान जो स्पेगेटी कोड नहीं हैं और एक संरचित प्रोग्रामिंग भाषा में लिखे गए प्रोग्राम के रूप में अच्छी तरह से संरचित और पठनीय हैं, संरचित प्रोग्रामिंग इसे आसान बनाती है और इसे लागू करती है। स्ट्रक्चर्ड <code>if–then–else</code> उपरोक्त उदाहरण जैसे बयान संरचित प्रोग्रामिंग के प्रमुख तत्वों में से एक हैं, और वे [[सी (प्रोग्रामिंग भाषा)]], [[जावा (प्रोग्रामिंग भाषा)]], [[जावास्क्रिप्ट]] और [[मूल दृश्य]] जैसी सबसे लोकप्रिय उच्च-स्तरीय प्रोग्रामिंग भाषाओं में मौजूद हैं।
प्रारंभिक प्रोग्रामिंग भाषाओं में, विशेष रूप से 1980 के घरेलू कंप्यूटरों में [[BASIC]] की कुछ बोलियाँ, a <code>if–then</code> कथन में केवल शामिल हो सकता है <code>[[GOTO]]</code> कथन (एक शाखा (कंप्यूटर विज्ञान) निर्देश के बराबर)। इसने [[स्पेगेटी प्रोग्रामिंग]] के रूप में जानी जाने वाली प्रोग्रामिंग की एक कठिन-से-पढ़ने वाली शैली का नेतृत्व किया, इस शैली के कार्यक्रमों के साथ स्पेगेटी कोड कहा जाता है। नतीजतन, [[संरचित प्रोग्रामिंग]], जो (वस्तुतः) मनमाना कथनों को एक के अंदर स्टेटमेंट ब्लॉक में डालने की अनुमति देती है <code>if</code> कथन, लोकप्रियता में प्राप्त हुआ, जब तक कि यह अधिकांश बुनियादी प्रोग्रामिंग सर्किलों में भी आदर्श नहीं बन गया। इस तरह के तंत्र और सिद्धांत पुराने लेकिन अधिक उन्नत [[ALGOL]] भाषाओं के परिवार पर आधारित थे, और ALGOL जैसी भाषाएँ जैसे [[पास्कल (प्रोग्रामिंग भाषा)]] और मोडुला -2 ने कई वर्षों तक आधुनिक BASIC वेरिएंट को प्रभावित किया। जबकि यह केवल प्रयोग करते हुए ही संभव है <code>GOTO</code> कथनों में <code>if–then</code> प्रोग्राम लिखने के लिए कथन जो स्पेगेटी कोड नहीं हैं और एक संरचित प्रोग्रामिंग भाषा में लिखे गए प्रोग्राम के रूप में अच्छी तरह से संरचित और पठनीय हैं, संरचित प्रोग्रामिंग इसे आसान बनाती है और इसे लागू करती है। स्ट्रक्चर्ड <code>if–then–else</code> उपरोक्त उदाहरण जैसे कथन संरचित प्रोग्रामिंग के प्रमुख तत्वों में से एक हैं, और वे [[सी (प्रोग्रामिंग भाषा)]], [[जावा (प्रोग्रामिंग भाषा)]], [[जावास्क्रिप्ट]] और [[मूल दृश्य]] जैसी सबसे लोकप्रिय उच्च-स्तरीय प्रोग्रामिंग भाषाओं में मौजूद हैं।


==== लटकने की समस्या ====
==== लटकने की समस्या ====
{{Main|Dangling else}}
{{Main|Dangling else}}
  <code>else</code> e> कीवर्ड एक विशिष्ट को लक्षित करने के लिए बनाया गया है <code>if–then</code> इसके पहले का बयान, लेकिन [[नेस्टिंग (कंप्यूटिंग)]] के लिए <code>if–then</code> कथन, क्लासिक प्रोग्रामिंग भाषा जैसे [[ALGOL 60]] को परिभाषित करने के लिए संघर्ष करना पड़ा कि किस विशिष्ट कथन को लक्षित किया जाए। स्पष्ट सीमाओं के बिना कौन सा कथन कौन सा है, a <code>else</code> कीवर्ड किसी भी पूर्ववर्ती को लक्षित कर सकता है <code>if–then</code> पार्स के रूप में घोंसला में बयान।
  <code>else</code> e> कीवर्ड एक विशिष्ट को लक्षित करने के लिए बनाया गया है <code>if–then</code> इसके पहले का कथन, लेकिन [[नेस्टिंग (कंप्यूटिंग)]] के लिए <code>if–then</code> कथन, क्लासिक प्रोग्रामिंग भाषा जैसे [[ALGOL 60]] को परिभाषित करने के लिए संघर्ष करना पड़ा कि किस विशिष्ट कथन को लक्षित किया जाए। स्पष्ट सीमाओं के बिना कौन सा कथन कौन सा है, a <code>else</code> कीवर्ड किसी भी पूर्ववर्ती को लक्षित कर सकता है <code>if–then</code> पार्स के रूप में घोंसला में कथन।
  अगर ए तो अगर बी तो एस और एस2
  अगर ए तो अगर बी तो एस और एस2
के रूप में विश्लेषित किया जा सकता है
के रूप में विश्लेषित किया जा सकता है
Line 44: Line 44:
या
या
  यदि ए तो (यदि बी तो एस और एस 2)
  यदि ए तो (यदि बी तो एस और एस 2)
निर्भर करता है कि क्या <code>else</code> पहले से जुड़ा है <code>if</code> या दूसरा <code>if</code>. इसे [[अन्य लटक रहा है]] समस्या के रूप में जाना जाता है, और भाषा के आधार पर (आमतौर पर <code>end if</code> बयान या <code>{...}</code> कोष्ठक)।
निर्भर करता है कि क्या <code>else</code> पहले से जुड़ा है <code>if</code> या दूसरा <code>if</code>. इसे [[अन्य लटक रहा है]] समस्या के रूप में जाना जाता है, और भाषा के आधार पर (सामान्यतः  <code>end if</code> कथन या <code>{...}</code> कोष्ठक)।


=== वरना अगर ===
=== वरना अगर ===
Line 51: Line 51:


  अगर शर्त है तो
  अगर शर्त है तो
     ''-- बयान''
     ''-- कथन''
  अन्य स्थिति तब
  अन्य स्थिति तब
     ''-- और बयान''
     ''-- और कथन''
  अन्य स्थिति तब
  अन्य स्थिति तब
     ''-- और कथन;''
     ''-- और कथन;''
Line 71: Line 71:
  अगर अंत;
  अगर अंत;


ऊपर दिए गए उदाहरण में, यदि छूट 10% है, तो पहले यदि कथन का मूल्यांकन सत्य के रूप में किया जाएगा और आपको $30 का भुगतान करना होगा, तो उसका प्रिंट आउट ले लिया जाएगा। उस पहले यदि कथन के नीचे अन्य सभी कथनों को छोड़ दिया जाएगा। <code>elseif</code> उदाहरण के लिए एडा (प्रोग्रामिंग लैंग्वेज) भाषा में ई> स्टेटमेंट, [[सिंटैक्टिक चीनी]] है <code>else</code> के बाद <code>if</code>. अदा में फर्क इतना ही है कि सिर्फ एक <code>end if</code> जरूरत है, अगर कोई उपयोग करता है <code>elseif</code> के बजाय <code>else</code> के बाद <code>if</code>. [[पीएचपी]] उपयोग करता है <code>elseif</code> कीवर्ड<ref name="php_elseif">[http://php.net/manual/control-structures.elseif.php PHP elseif सिंटैक्स] </ref> इसके कर्ली ब्रैकेट या कोलन सिंटैक्स दोनों के लिए। [[पर्ल]] कीवर्ड प्रदान करता है <code>elsif</code> बड़ी संख्या में ब्रेसिज़ से बचने के लिए जो कि एकाधिक द्वारा आवश्यक होंगे <code>if</code> और <code>else</code> बयान। पायथन (प्रोग्रामिंग लैंग्वेज) विशेष कीवर्ड का उपयोग करता है <code>elif</code> क्योंकि संरचना को ब्रेसिज़ के बजाय इंडेंटेशन द्वारा निरूपित किया जाता है, इसलिए बार-बार उपयोग किया जाता है <code>else</code> और <code>if</code> हर हालत के बाद बढ़े हुए इंडेंटेशन की आवश्यकता होगी। बेसिक के कुछ कार्यान्वयन, जैसे विज़ुअल बेसिक,<ref name="vb_elseif">[https://docs.microsoft.com/dotnet/visual-basic/language-reference/statements/if-then-else-statement Visual Basic ElseIf सिंटैक्स]</ref> उपयोग <code>ElseIf</code> बहुत। इसी तरह, पहले के UNIX शेल (बाद में POSIX शेल सिंटैक्स तक इकट्ठे हुए<ref name="posixshell">''[http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html POSIX standard shell syntax]''</ref>) elif का भी उपयोग करें, लेकिन रिक्त स्थान, लाइन ब्रेक या दोनों के साथ परिसीमन का विकल्प दें।
ऊपर दिए गए उदाहरण में, यदि छूट 10% है, तो पहले यदि कथन का मूल्यांकन सत्य के रूप में किया जाएगा और आपको $30 का भुगतान करना होगा, तो उसका प्रिंट आउट ले लिया जाएगा। उस पहले यदि कथन के नीचे अन्य सभी कथनों को छोड़ दिया जाएगा। <code>elseif</code> उदाहरण के लिए एडा (प्रोग्रामिंग लैंग्वेज) भाषा में ई> स्टेटमेंट, [[सिंटैक्टिक चीनी]] है <code>else</code> के बाद <code>if</code>. अदा में फर्क इतना ही है कि सिर्फ एक <code>end if</code> जरूरत है, अगर कोई उपयोग करता है <code>elseif</code> के बजाय <code>else</code> के बाद <code>if</code>. [[पीएचपी]] उपयोग करता है <code>elseif</code> कीवर्ड<ref name="php_elseif">[http://php.net/manual/control-structures.elseif.php PHP elseif सिंटैक्स] </ref> इसके कर्ली ब्रैकेट या कोलन सिंटैक्स दोनों के लिए। [[पर्ल]] कीवर्ड प्रदान करता है <code>elsif</code> बड़ी संख्या में ब्रेसिज़ से बचने के लिए जो कि एकाधिक द्वारा आवश्यक होंगे <code>if</code> और <code>else</code> कथन। पायथन (प्रोग्रामिंग लैंग्वेज) विशेष कीवर्ड का उपयोग करता है <code>elif</code> क्योंकि संरचना को ब्रेसिज़ के बजाय इंडेंटेशन द्वारा निरूपित किया जाता है, इसलिए बार-बार उपयोग किया जाता है <code>else</code> और <code>if</code> हर हालत के बाद बढ़े हुए इंडेंटेशन की आवश्यकता होगी। बेसिक के कुछ कार्यान्वयन, जैसे विज़ुअल बेसिक,<ref name="vb_elseif">[https://docs.microsoft.com/dotnet/visual-basic/language-reference/statements/if-then-else-statement Visual Basic ElseIf सिंटैक्स]</ref> उपयोग <code>ElseIf</code> बहुत। इसी तरह, पहले के UNIX शेल (बाद में POSIX शेल सिंटैक्स तक इकट्ठे हुए<ref name="posixshell">''[http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html POSIX standard shell syntax]''</ref>) elif का भी उपयोग करें, लेकिन रिक्त स्थान, लाइन ब्रेक या दोनों के साथ परिसीमन का विकल्प दें।


हालाँकि, कई भाषाओं में जो सीधे अल्गोल से उतरी हैं, जैसे [[सिमुला (प्रोग्रामिंग भाषा)]], पास्कल (प्रोग्रामिंग लैंग्वेज), BCPL (प्रोग्रामिंग लैंग्वेज) और C (प्रोग्रामिंग लैंग्वेज), के लिए यह विशेष सिंटैक्स <code>else if</code> निर्माण मौजूद नहीं है, न ही यह सी के कई सिंटैक्टिकल डेरिवेटिव्स में मौजूद है, जैसे कि जावा (प्रोग्रामिंग लैंग्वेज), ईसीएमएस्क्रिप्ट, और इसी तरह। यह काम करता है क्योंकि इन भाषाओं में, कोई एक कथन (इस मामले में <code>if ''cond''</code>...) एक ब्लॉक में बंद किए बिना एक शर्त का पालन कर सकता है।
हालाँकि, कई भाषाओं में जो सीधे अल्गोल से उतरी हैं, जैसे [[सिमुला (प्रोग्रामिंग भाषा)]], पास्कल (प्रोग्रामिंग लैंग्वेज), BCPL (प्रोग्रामिंग लैंग्वेज) और C (प्रोग्रामिंग लैंग्वेज), के लिए यह विशेष सिंटैक्स <code>else if</code> निर्माण मौजूद नहीं है, न ही यह सी के कई सिंटैक्टिकल डेरिवेटिव्स में मौजूद है, जैसे कि जावा (प्रोग्रामिंग लैंग्वेज), ईसीएमएस्क्रिप्ट, और इसी तरह। यह काम करता है क्योंकि इन भाषाओं में, कोई एक कथन (इस स्थिति  में <code>if ''cond''</code>...) एक ब्लॉक में बंद किए बिना एक शर्त का पालन कर सकता है।


इस डिज़ाइन पसंद की थोड़ी लागत है। प्रत्येक <code>else if</code> शाखा प्रभावी रूप से एक अतिरिक्त नेस्टिंग स्तर जोड़ती है। यह संकलक (या जो लोग संकलक लिखते हैं) के लिए नौकरी को जटिल बनाता है, क्योंकि संकलक को मनमाने ढंग से लंबे समय तक विश्लेषण और कार्यान्वित करना चाहिए <code>else if</code> चेन रिकर्सिवली।
इस डिज़ाइन पसंद की थोड़ी लागत है। प्रत्येक <code>else if</code> शाखा प्रभावी रूप से एक अतिरिक्त नेस्टिंग स्तर जोड़ती है। यह संकलक (या जो लोग संकलक लिखते हैं) के लिए नौकरी को जटिल बनाता है, क्योंकि संकलक को मनमाने ढंग से लंबे समय तक विश्लेषण और कार्यान्वित करना चाहिए <code>else if</code> चेन रिकर्सिवली।


अगर कंडीशनल के अनुक्रम में सभी पद एक एक्सप्रेशन के मान का परीक्षण कर रहे हैं (उदाहरण के लिए, <code>if x=0</code> ... <code>else if x=1</code> ... <code>else if x=2</code>...), एक विकल्प [[स्विच स्टेटमेंट]] है, जिसे केस-स्टेटमेंट या सेलेक्ट-स्टेटमेंट भी कहा जाता है। इसके विपरीत, जिन भाषाओं में स्विच स्टेटमेंट नहीं है, उन्हें अनुक्रम द्वारा निर्मित किया जा सकता है <code>else if</code> बयान।
अगर कंडीशनल के अनुक्रम में सभी पद एक एक्सप्रेशन के मान का परीक्षण कर रहे हैं (उदाहरण के लिए, <code>if x=0</code> ... <code>else if x=1</code> ... <code>else if x=2</code>...), एक विकल्प [[स्विच स्टेटमेंट]] है, जिसे केस-स्टेटमेंट या सेलेक्ट-स्टेटमेंट भी कहा जाता है। इसके विपरीत, जिन भाषाओं में स्विच स्टेटमेंट नहीं है, उन्हें अनुक्रम द्वारा निर्मित किया जा सकता है <code>else if</code> कथन।


===अगर-तो-और भाव===
===अगर-तो-और भाव===
{{See also|Statement (computer science)}}
{{See also|Statement (computer science)}}
कई भाषाएँ if एक्सप्रेशंस का समर्थन करती हैं, जो if स्टेटमेंट्स के समान हैं, लेकिन परिणाम के रूप में एक मान लौटाते हैं। इस प्रकार, वे सच्ची अभिव्यक्तियाँ हैं (जो एक मूल्य का मूल्यांकन करते हैं), बयान नहीं (जो एक मूल्य के संदर्भ में अनुमति नहीं दी जा सकती है)।
कई भाषाएँ if एक्सप्रेशंस का समर्थन करती हैं, जो if स्टेटमेंट्स के समान हैं, लेकिन परिणाम के रूप में एक मान लौटाते हैं। इस प्रकार, वे सच्ची अभिव्यक्तियाँ हैं (जो एक मूल्य का मूल्यांकन करते हैं), कथन नहीं (जो एक मूल्य के संदर्भ में अनुमति नहीं दी जा सकती है)।


==== अल्गोल परिवार ====
==== अल्गोल परिवार ====
Line 104: Line 104:


==== हास्केल ====
==== हास्केल ====
[[हास्केल (प्रोग्रामिंग भाषा)]] 98 में, केवल एक इफ एक्सप्रेशन है, नो इफ स्टेटमेंट, और <code>else</code> भाग अनिवार्य है, क्योंकि प्रत्येक व्यंजक का कुछ मान होना चाहिए।<ref name="haskell98report">''[http://www.haskell.org/onlinereport/ Haskell 98 Language and Libraries: The Revised Report]''</ref> तर्क जो अन्य भाषाओं में सशर्त के साथ व्यक्त किया जाएगा, आमतौर पर पुनरावर्ती कार्यों में [[पैटर्न मिलान]] के साथ व्यक्त किया जाता है।
[[हास्केल (प्रोग्रामिंग भाषा)]] 98 में, केवल एक इफ एक्सप्रेशन है, नो इफ स्टेटमेंट, और <code>else</code> भाग अनिवार्य है, क्योंकि प्रत्येक व्यंजक का कुछ मान होना चाहिए।<ref name="haskell98report">''[http://www.haskell.org/onlinereport/ Haskell 98 Language and Libraries: The Revised Report]''</ref> तर्क जो अन्य भाषाओं में सशर्त के साथ व्यक्त किया जाएगा, सामान्यतः  पुनरावर्ती कार्यों में [[पैटर्न मिलान]] के साथ व्यक्त किया जाता है।


क्योंकि हास्केल [[आलसी मूल्यांकन]] है, नियंत्रण संरचनाओं को लिखना संभव है, जैसे कि, सामान्य अभिव्यक्ति के रूप में; आलसी मूल्यांकन का अर्थ है कि एक if फ़ंक्शन केवल स्थिति और उचित शाखा का मूल्यांकन कर सकता है (जहाँ एक सख्त भाषा तीनों का मूल्यांकन करेगी)। इसे इस प्रकार लिखा जा सकता है:<ref name="haskell-ifthenelse-proposal">"[http://haskell.org/haskellwiki/If-then-else If-then-else Proposal on HaskellWiki]"</ref>
क्योंकि हास्केल [[आलसी मूल्यांकन]] है, नियंत्रण संरचनाओं को लिखना संभव है, जैसे कि, सामान्य अभिव्यक्ति के रूप में; आलसी मूल्यांकन का अर्थ है कि एक if फ़ंक्शन केवल स्थिति और उचित शाखा का मूल्यांकन कर सकता है (जहाँ एक सख्त भाषा तीनों का मूल्यांकन करेगी)। इसे इस प्रकार लिखा जा सकता है:<ref name="haskell-ifthenelse-proposal">"[http://haskell.org/haskellwiki/If-then-else If-then-else Proposal on HaskellWiki]"</ref>
Line 120: Line 120:
my_variable = x > 10 ? फू : बार; // सी-जैसी भाषाओं में
my_variable = x > 10 ? फू : बार; // सी-जैसी भाषाओं में
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
जिसकी तुलना अल्गोल-परिवार से की जा सकती है अगर-तो-और भाव (एक बयान के विपरीत) (और इसी तरह रूबी और स्काला में, दूसरों के बीच)।
जिसकी तुलना अल्गोल-परिवार से की जा सकती है अगर-तो-और भाव (एक कथन के विपरीत) (और इसी तरह रूबी और स्काला में, दूसरों के बीच)।


if-statement का उपयोग करके इसे पूरा करने के लिए, इसमें कोड की एक से अधिक पंक्तियां होंगी (ठेठ लेआउट सम्मेलनों के तहत), और दो बार my_variable का उल्लेख करने की आवश्यकता होगी:
if-statement का उपयोग करके इसे पूरा करने के लिए, इसमें कोड की एक से अधिक पंक्तियां होंगी (ठेठ लेआउट सम्मेलनों के तहत), और दो बार my_variable का उल्लेख करने की आवश्यकता होगी:
Line 130: Line 130:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


कुछ लोगों का तर्क है कि स्पष्ट if/then स्टेटमेंट को पढ़ना आसान है और यह टर्नरी ऑपरेटर की तुलना में अधिक कुशल कोड के लिए संकलित हो सकता है,<ref>{{cite web|url=http://embeddedgurus.com/stack-overflow/2009/02/efficient-c-tips-6-dont-use-the-ternary-operator/ |title=Efficient C Tips #6 – Don’t use the ternary operator « Stack Overflow |publisher=Embeddedgurus.com |date=2009-02-18 |access-date=2012-09-07}}</ref> जबकि अन्य तर्क देते हैं कि संक्षिप्त अभिव्यक्तियों को पुनरावृत्ति वाली कई पंक्तियों में फैले बयानों की तुलना में पढ़ना आसान है।
कुछ लोगों का तर्क है कि स्पष्ट if/then स्टेटमेंट को पढ़ना आसान है और यह टर्नरी ऑपरेटर की तुलना में अधिक कुशल कोड के लिए संकलित हो सकता है,<ref>{{cite web|url=http://embeddedgurus.com/stack-overflow/2009/02/efficient-c-tips-6-dont-use-the-ternary-operator/ |title=Efficient C Tips #6 – Don’t use the ternary operator « Stack Overflow |publisher=Embeddedgurus.com |date=2009-02-18 |access-date=2012-09-07}}</ref> जबकि अन्य तर्क देते हैं कि संक्षिप्त अभिव्यक्तियों को पुनरावृत्ति वाली कई पंक्तियों में फैले कथनों की तुलना में पढ़ना आसान है।


==== [[छोटा बेसिक]] ====
==== [[छोटा बेसिक]] ====
Line 145: Line 145:


==== विजुअल बेसिक ====
==== विजुअल बेसिक ====
विज़ुअल बेसिक और कुछ अन्य भाषाओं में, एक फ़ंक्शन कहा जाता है <code>[[IIf]]</code> प्रदान किया जाता है, जिसका उपयोग सशर्त अभिव्यक्ति के रूप में किया जा सकता है। हालांकि, यह एक वास्तविक सशर्त अभिव्यक्ति की तरह व्यवहार नहीं करता है, क्योंकि सत्य और असत्य दोनों शाखाओं का हमेशा मूल्यांकन किया जाता है; यह सिर्फ इतना है कि उनमें से एक का परिणाम फेंक दिया जाता है, जबकि दूसरे का परिणाम IIf फ़ंक्शन द्वारा वापस कर दिया जाता है।
विज़ुअल बेसिक और कुछ अन्य भाषाओं में, एक फ़ंक्शन कहा जाता है <code>[[IIf]]</code> प्रदान किया जाता है, जिसका उपयोग सशर्त अभिव्यक्ति के रूप में किया जा सकता है। यद्यपि  , यह एक वास्तविक सशर्त अभिव्यक्ति की तरह व्यवहार नहीं करता है, क्योंकि सत्य और असत्य दोनों शाखाओं का सदैव मूल्यांकन किया जाता है; यह सिर्फ इतना है कि उनमें से एक का परिणाम फेंक दिया जाता है, जबकि दूसरे का परिणाम IIf फ़ंक्शन द्वारा वापस कर दिया जाता है।


==== [[टीसीएल]] ====
==== [[टीसीएल]] ====
Line 164: Line 164:


==== जंग ====
==== जंग ====
जंग में (प्रोग्रामिंग भाषा), <code>if</code> हमेशा एक अभिव्यक्ति है। यह जो भी शाखा निष्पादित की जाती है, या इकाई प्रकार के मूल्य का मूल्यांकन करता है <code>()</code> अगर कोई शाखा निष्पादित नहीं की जाती है। यदि कोई शाखा वापसी मूल्य प्रदान नहीं करती है, तो वह इसका मूल्यांकन करती है <code>()</code> डिफ़ॉल्ट रूप से। सुनिश्चित करने के लिए <code>if</code> अभिव्यक्ति का प्रकार संकलन समय पर जाना जाता है, प्रत्येक शाखा को उसी प्रकार के मान का मूल्यांकन करना चाहिए। इस कारण से, ए <code>else</code> शाखा प्रभावी रूप से अनिवार्य है जब तक कि अन्य शाखाएँ इसका मूल्यांकन न करें <code>()</code>, क्योंकि ए <code>if</code> बिना <code>else</code> हमेशा मूल्यांकन कर सकता है <code>()</code> डिफ़ॉल्ट रूप से।<ref>{{cite web|title=If and if let expressions|url=https://doc.rust-lang.org/reference/expressions/if-expr.html|access-date=November 1, 2020}}</ref>
जंग में (प्रोग्रामिंग भाषा), <code>if</code> सदैव एक अभिव्यक्ति है। यह जो भी शाखा निष्पादित की जाती है, या इकाई प्रकार के मूल्य का मूल्यांकन करता है <code>()</code> अगर कोई शाखा निष्पादित नहीं की जाती है। यदि कोई शाखा वापसी मूल्य प्रदान नहीं करती है, तो वह इसका मूल्यांकन करती है <code>()</code> डिफ़ॉल्ट रूप से। सुनिश्चित करने के लिए <code>if</code> अभिव्यक्ति का प्रकार संकलन समय पर जाना जाता है, प्रत्येक शाखा को उसी प्रकार के मान का मूल्यांकन करना चाहिए। इस कारण से, ए <code>else</code> शाखा प्रभावी रूप से अनिवार्य है जब तक कि अन्य शाखाएँ इसका मूल्यांकन न करें <code>()</code>, क्योंकि ए <code>if</code> बिना <code>else</code> सदैव मूल्यांकन कर सकता है <code>()</code> डिफ़ॉल्ट रूप से।<ref>{{cite web|title=If and if let expressions|url=https://doc.rust-lang.org/reference/expressions/if-expr.html|access-date=November 1, 2020}}</ref>
<वाक्यविन्यास प्रकाश लैंग = जंग>
<वाक्यविन्यास प्रकाश लैंग = जंग>
// x के मान के आधार पर my_variable को कुछ मान असाइन करें
// x के मान के आधार पर my_variable को कुछ मान असाइन करें
Line 185: Line 185:


=== अंकगणित अगर ===
=== अंकगणित अगर ===
[[फोरट्रान 77]] तक, फोरट्रान भाषा में एक अंकगणित है अगर बयान जो एक गणना किए गए IF और एक केस स्टेटमेंट के बीच में है, जो [[ट्राइकोटॉमी (गणित)]] पर आधारित है। {{nowrap|''x'' < 0,}} {{nowrap|1=''x'' = 0,}} {{nowrap|''x'' > 0.}} फोरट्रान में यह सबसे पहला सशर्त बयान था:<ref name="fortran77">{{cite web |url = http://www.fortran.com/fortran/F77_std/rjcnf0001-sh-11.html#sh-11.4 |title = American National Standard Programming Language FORTRAN |access-date = 2007-09-09 |date = 1978-04-03 |archive-url = https://web.archive.org/web/20071011055359/http://www.fortran.com/fortran/F77_std/rjcnf0001-sh-11.html#sh-11.4 |archive-date = 2007-10-11 |url-status = dead }}</ref>
[[फोरट्रान 77]] तक, फोरट्रान भाषा में एक अंकगणित है अगर कथन जो एक गणना किए गए IF और एक केस स्टेटमेंट के बीच में है, जो [[ट्राइकोटॉमी (गणित)]] पर आधारित है। {{nowrap|''x'' < 0,}} {{nowrap|1=''x'' = 0,}} {{nowrap|''x'' > 0.}} फोरट्रान में यह सबसे पहला सशर्त कथन था:<ref name="fortran77">{{cite web |url = http://www.fortran.com/fortran/F77_std/rjcnf0001-sh-11.html#sh-11.4 |title = American National Standard Programming Language FORTRAN |access-date = 2007-09-09 |date = 1978-04-03 |archive-url = https://web.archive.org/web/20071011055359/http://www.fortran.com/fortran/F77_std/rjcnf0001-sh-11.html#sh-11.4 |archive-date = 2007-10-11 |url-status = dead }}</ref>
<वाक्यविन्यास लैंग = फोरट्रान>
<वाक्यविन्यास लैंग = फोरट्रान>
अगर (ई) लेबल 1, लेबल 2, लेबल 3
अगर (ई) लेबल 1, लेबल 2, लेबल 3
Line 198: Line 198:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


क्योंकि यह अंकगणितीय IF एकाधिक के बराबर है <code>GOTO</code> बयान जो कहीं भी जा सकते हैं, इसे एक असंरचित नियंत्रण कथन माना जाता है, और यदि अधिक संरचित बयानों का उपयोग किया जा सकता है तो इसका उपयोग नहीं किया जाना चाहिए। व्यवहार में यह देखा गया है कि अधिकांश अंकगणितीय <code>IF</code> बयानों ने निम्नलिखित बयानों को एक या दो लेबल के साथ संदर्भित किया।
क्योंकि यह अंकगणितीय IF एकाधिक के बराबर है <code>GOTO</code> कथन जो कहीं भी जा सकते हैं, इसे एक असंरचित नियंत्रण कथन माना जाता है, और यदि अधिक संरचित कथनों का उपयोग किया जा सकता है तो इसका उपयोग नहीं किया जाना चाहिए। व्यवहार में यह देखा गया है कि अधिकांश अंकगणितीय <code>IF</code> कथनों ने निम्नलिखित कथनों को एक या दो लेबल के साथ संदर्भित किया।


[[आईबीएम 704]] कंप्यूटर पर फोरट्रान के मूल कार्यान्वयन में यह एकमात्र सशर्त नियंत्रण बयान था। उस कंप्यूटर पर टेस्ट-एंड-ब्रांच ऑप-कोड में उन तीन राज्यों के लिए तीन पते थे। अन्य कंप्यूटरों में पिछले अंकगणितीय परिचालनों से जुड़े सकारात्मक, शून्य, नकारात्मक, सम, अतिप्रवाह, कैरी जैसे ध्वज रजिस्टर होंगे और 'शाखा यदि संचायक नकारात्मक' तो 'शाखा यदि संचायक शून्य' या इसी तरह के निर्देशों का उपयोग करेंगे। ध्यान दें कि अभिव्यक्ति का मूल्यांकन केवल एक बार किया जाता है, और पूर्णांक अंकगणित जैसे मामलों में जहां अतिप्रवाह हो सकता है, अतिप्रवाह या कैरी फ्लैग पर भी विचार किया जाएगा।
[[आईबीएम 704]] कंप्यूटर पर फोरट्रान के मूल कार्यान्वयन में यह एकमात्र सशर्त नियंत्रण कथन था। उस कंप्यूटर पर टेस्ट-एंड-ब्रांच ऑप-कोड में उन तीन राज्यों के लिए तीन पते थे। अन्य कंप्यूटरों में पिछले अंकगणितीय परिचालनों से जुड़े सकारात्मक, शून्य, नकारात्मक, सम, अतिप्रवाह, कैरी जैसे ध्वज रजिस्टर होंगे और 'शाखा यदि संचायक नकारात्मक' तो 'शाखा यदि संचायक शून्य' या इसी तरह के निर्देशों का उपयोग करेंगे। ध्यान दें कि अभिव्यक्ति का मूल्यांकन केवल एक बार किया जाता है, और पूर्णांक अंकगणित जैसे मामलों में जहां अतिप्रवाह हो सकता है, अतिप्रवाह या कैरी फ्लैग पर भी विचार किया जाएगा।


=== स्मॉलटॉक === में वस्तु-उन्मुख कार्यान्वयन
=== स्मॉलटॉक === में वस्तु-उन्मुख कार्यान्वयन


अन्य भाषाओं के विपरीत, स्मॉलटाक में सशर्त बयान एक [[भाषा निर्माण]] नहीं है बल्कि कक्षा में परिभाषित किया गया है <code>Boolean</code> एक सार विधि के रूप में जो दो पैरामीटर लेती है, क्लोजर (कंप्यूटर विज्ञान) दोनों। <code>Boolean</code> दो उपवर्ग हैं, <code>True</code> और <code>False</code>, जो दोनों विधि को परिभाषित करते हैं, <code>True</code> केवल पहला क्लोजर निष्पादित करना, <code>False</code> केवल दूसरा क्लोजर निष्पादित करना।<ref name="Smalltalk conditionals">{{cite web |url = http://wiki.cs.uiuc.edu/VisualWorks/Conditional+Processing |title = VisualWorks: Conditional Processing |date = 2006-12-16 |access-date = 2007-09-09 |archive-url = https://web.archive.org/web/20071022201949/http://wiki.cs.uiuc.edu/VisualWorks/Conditional+Processing |archive-date = 2007-10-22 |url-status = dead }}</ref>
अन्य भाषाओं के विपरीत, स्मॉलटाक में सशर्त कथन एक [[भाषा निर्माण]] नहीं है बल्कि कक्षा में परिभाषित किया गया है <code>Boolean</code> एक सार विधि के रूप में जो दो पैरामीटर लेती है, क्लोजर (कंप्यूटर विज्ञान) दोनों। <code>Boolean</code> दो उपवर्ग हैं, <code>True</code> और <code>False</code>, जो दोनों विधि को परिभाषित करते हैं, <code>True</code> केवल पहला क्लोजर निष्पादित करना, <code>False</code> केवल दूसरा क्लोजर निष्पादित करना।<ref name="Smalltalk conditionals">{{cite web |url = http://wiki.cs.uiuc.edu/VisualWorks/Conditional+Processing |title = VisualWorks: Conditional Processing |date = 2006-12-16 |access-date = 2007-09-09 |archive-url = https://web.archive.org/web/20071022201949/http://wiki.cs.uiuc.edu/VisualWorks/Conditional+Processing |archive-date = 2007-10-22 |url-status = dead }}</ref>
<वाक्यविन्यास लैंग = स्मॉलटॉक>
<वाक्यविन्यास लैंग = स्मॉलटॉक>
वार = स्थिति
वार = स्थिति
Line 220: Line 220:
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
उपरोक्त उदाहरण की सशर्त लेता है <code>Math.random() < 0.5</code> जो आउटपुट करता है <code>true</code> यदि 0 और 1 के बीच एक यादृच्छिक फ़्लोट मान 0.5 से अधिक है। बयान आउटपुट के बीच बेतरतीब ढंग से चयन करने के लिए इसका उपयोग करता है <code>You got Heads!</code> या <code>You got Tails!</code> कंसोल के लिए। Else और else-if बयानों को उनके पूर्ववर्ती कथन के कर्ली ब्रैकेट के बाद जितनी बार आवश्यक हो, उतनी बार जंजीर में बांधा जा सकता है, जैसा कि नीचे दिखाया गया है:
उपरोक्त उदाहरण की सशर्त लेता है <code>Math.random() < 0.5</code> जो आउटपुट करता है <code>true</code> यदि 0 और 1 के बीच एक यादृच्छिक फ़्लोट मान 0.5 से अधिक है। कथन आउटपुट के बीच बेतरतीब ढंग से चयन करने के लिए इसका उपयोग करता है <code>You got Heads!</code> या <code>You got Tails!</code> कंसोल के लिए। Else और else-if कथनों को उनके पूर्ववर्ती कथन के कर्ली ब्रैकेट के बाद जितनी बार आवश्यक हो, उतनी बार जंजीर में बांधा जा सकता है, जैसा कि नीचे दिखाया गया है:
<वाक्यविन्यास लैंग = जावास्क्रिप्ट>
<वाक्यविन्यास लैंग = जावास्क्रिप्ट>
वर एक्स = गणित यादृच्छिक ();
वर एक्स = गणित यादृच्छिक ();
Line 282: Line 282:


{{Main|Switch statement}}
{{Main|Switch statement}}
स्विच स्टेटमेंट (कुछ भाषाओं में, केस स्टेटमेंट या मल्टीवे ब्रांच) निर्दिष्ट स्थिरांक के साथ दिए गए मान की तुलना करते हैं और मैच के पहले स्थिरांक के अनुसार कार्रवाई करते हैं। यदि कोई मैच सफल नहीं होता है तो आमतौर पर एक डिफ़ॉल्ट कार्रवाई ('अन्य', 'अन्यथा') करने का प्रावधान है। स्विच स्टेटमेंट [[अनुकूलन संकलक]] की अनुमति दे सकते हैं, जैसे [[तालिका देखो]]। गतिशील भाषाओं में, मामले निरंतर अभिव्यक्तियों तक सीमित नहीं हो सकते हैं, और पैटर्न मिलान तक विस्तारित हो सकते हैं, जैसा कि दाईं ओर [[खोल स्क्रिप्ट]] उदाहरण में है, जहां '*)' किसी भी स्ट्रिंग से मेल खाने वाली [[नियमित अभिव्यक्ति]] के रूप में डिफ़ॉल्ट केस को लागू करता है।
स्विच स्टेटमेंट (कुछ भाषाओं में, केस स्टेटमेंट या मल्टीवे ब्रांच) निर्दिष्ट स्थिरांक के साथ दिए गए मान की तुलना करते हैं और मैच के पहले स्थिरांक के अनुसार कार्रवाई करते हैं। यदि कोई मैच सफल नहीं होता है तो सामान्यतः  एक डिफ़ॉल्ट कार्रवाई ('अन्य', 'अन्यथा') करने का प्रावधान है। स्विच स्टेटमेंट [[अनुकूलन संकलक]] की अनुमति दे सकते हैं, जैसे [[तालिका देखो]]। गतिशील भाषाओं में, स्थिति  निरंतर अभिव्यक्तियों तक सीमित नहीं हो सकते हैं, और पैटर्न मिलान तक विस्तारित हो सकते हैं, जैसा कि दाईं ओर [[खोल स्क्रिप्ट]] उदाहरण में है, जहां '*)' किसी भी स्ट्रिंग से मेल खाने वाली [[नियमित अभिव्यक्ति]] के रूप में डिफ़ॉल्ट केस को लागू करता है।


{| class="wikitable"
{| class="wikitable"
Line 333: Line 333:
नक्शा एफ (एच: टी) = एफ एच: नक्शा एफ टी
नक्शा एफ (एच: टी) = एफ एच: नक्शा एफ टी
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
यह कोड एक फ़ंक्शन मैप को परिभाषित करता है, जो दूसरे तर्क (एक सूची) के प्रत्येक तत्व के लिए पहला तर्क (एक फ़ंक्शन) लागू करता है, और परिणामी सूची देता है। इस मामले में संभव दो प्रकार के तर्कों के लिए दो पंक्तियाँ फ़ंक्शन की दो परिभाषाएँ हैं - एक जहाँ सूची खाली है (बस एक खाली सूची लौटाएँ) और दूसरी स्थिति जहाँ सूची खाली नहीं है।
यह कोड एक फ़ंक्शन मैप को परिभाषित करता है, जो दूसरे तर्क (एक सूची) के प्रत्येक तत्व के लिए पहला तर्क (एक फ़ंक्शन) लागू करता है, और परिणामी सूची देता है। इस स्थिति  में संभव दो प्रकार के तर्कों के लिए दो पंक्तियाँ फ़ंक्शन की दो परिभाषाएँ हैं - एक जहाँ सूची खाली है (बस एक खाली सूची लौटाएँ) और दूसरी स्थिति जहाँ सूची खाली नहीं है।


पैटर्न मिलान सख्ती से हमेशा एक विकल्प निर्माण नहीं बोल रहा है, क्योंकि हास्केल में केवल एक विकल्प लिखना संभव है, जिसे हमेशा मिलान करने की गारंटी दी जाती है - इस स्थिति में, इसे पसंद निर्माण के रूप में उपयोग नहीं किया जा रहा है, लेकिन बस एक तरीके के रूप में नामों को मूल्यों से बाँधने के लिए। हालाँकि, यह अक्सर उन भाषाओं में एक विकल्प निर्माण के रूप में उपयोग किया जाता है जिनमें यह उपलब्ध है।
पैटर्न मिलान सख्ती से सदैव एक विकल्प निर्माण नहीं बोल रहा है, क्योंकि हास्केल में केवल एक विकल्प लिखना संभव है, जिसे सदैव मिलान करने की गारंटी दी जाती है - इस स्थिति में, इसे पसंद निर्माण के रूप में उपयोग नहीं किया जा रहा है, लेकिन बस एक तरीके के रूप में नामों को मूल्यों से बाँधने के लिए। हालाँकि, यह अक्सर उन भाषाओं में एक विकल्प निर्माण के रूप में उपयोग किया जाता है जिनमें यह उपलब्ध है।


== हैश-आधारित सशर्त ==
== हैश-आधारित सशर्त ==

Revision as of 20:34, 24 February 2023

यदि-तो-वरना प्रवाह आरेख
एक नेस्टेड अगर-फिर-अन्यथा प्रवाह आरेख

कंप्यूटर विज्ञान में, सशर्त (अर्थात, सशर्त कथन, सशर्त अभिव्यक्ति और सशर्त निर्माण) निर्णय लेने के लिए प्रोग्रामिंग भाषा आदेश हैं। विशेष रूप से, सशर्त अलग-अलग संगणना या क्रियाएं करते हैं, जो इस बात पर निर्भर करता है कि प्रोग्रामर-परिभाषित बूलियन डेटाटाइप 'स्थिति' सही या गलत का मूल्यांकन करता है या नहीं। नियंत्रण प्रवाह के संदर्भ में, निर्णय सदैव कुछ स्थिति के आधार पर नियंत्रण प्रवाह को वरणक्षमतापूर्वक रूप से बदलकर प्राप्त किया जाता है (शाखा भविष्यवाणी के स्थिति के अतिरिक्त )।

यद्यपि गतिशील प्रेषण को सामान्यतः सशर्त निर्माण के रूप में वर्गीकृत नहीं किया जाता है, यह रन टाइम (प्रोग्राम जीवनचक्र चरण) में विकल्पों के बीच चयन करने की  एक और विधि है।

शब्दावली

अनिवार्य प्रोग्रामिंग भाषाओं में, सशर्त कथन (प्रोग्रामिंग) शब्द का सामान्यतः उपयोग किया जाता है, जबकि कार्यात्मक प्रोग्रामिंग में, सशर्त अभिव्यक्ति (प्रोग्रामिंग) या सशर्त निर्माण को प्राथमिकता दी जाती है, क्योंकि इन सभी शब्दों के अलग-अलग अर्थ होते हैं।

अगर-फिर (-अन्य)

if–then ई> निर्माण (कभी-कभी कहा जाता है if–then–else) कई प्रोग्रामिंग भाषाओं में आम है। यद्यपि सिंटैक्स भाषा से भाषा में भिन्न होता है, मूल संरचना (स्यूडोकोड रूप में) इस तरह दिखती है:
अगर (बूलियन स्थिति) तब
   (परिणामस्वरूप)
अन्य
   (विकल्प)
अगर अंत

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

अगर स्टॉक = 0 तब
   संदेश = नया स्टॉक ऑर्डर करें
अन्य
   संदेश = स्टॉक है
अगर अंत

ऊपर दिए गए उदाहरण कोड में, (बूलियन स्थिति) द्वारा दर्शाया गया भाग एक सशर्त अभिव्यक्ति का गठन करता है, जिसका आंतरिक मूल्य होता है (उदाहरण के लिए, इसे किसी भी मान द्वारा प्रतिस्थापित किया जा सकता है True या False) लेकिन कोई आंतरिक अर्थ नहीं है। इसके विपरीत, इस अभिव्यक्ति का संयोजन, If और Then इसके आस-पास, और इसके बाद के परिणाम एक सशर्त कथन का गठन करते हैं, जिसका आंतरिक अर्थ होता है (उदाहरण के लिए, एक सुसंगत तार्किक नियम व्यक्त करना) लेकिन कोई आंतरिक मूल्य नहीं।

जब एक दुभाषिया (कंप्यूटिंग) एक पाता है If, यह एक बूलियन डेटाटाइप स्थिति की अपेक्षा करता है - उदाहरण के लिए, x > 0, जिसका अर्थ है कि चर x में एक संख्या है जो शून्य से अधिक है - और उस स्थिति का मूल्यांकन करता है। यदि शर्त है true, निम्नलिखित कथन then निष्पादित किए जाते हैं। अन्यथा, निम्नलिखित शाखा में निष्पादन जारी रहता है - या तो else ब्लॉक (प्रोग्रामिंग) (जो सामान्यतः वैकल्पिक होता है), या यदि नहीं है else शाखा, उसके बाद end If.

किसी भी शाखा के निष्पादित होने के बाद, नियंत्रण प्रवाह बिंदु पर वापस आ जाता है end If.

इतिहास और विकास

प्रारंभिक प्रोग्रामिंग भाषाओं में, विशेष रूप से 1980 के घरेलू कंप्यूटरों में BASIC की कुछ बोलियाँ, a if–then कथन में केवल शामिल हो सकता है GOTO कथन (एक शाखा (कंप्यूटर विज्ञान) निर्देश के बराबर)। इसने स्पेगेटी प्रोग्रामिंग के रूप में जानी जाने वाली प्रोग्रामिंग की एक कठिन-से-पढ़ने वाली शैली का नेतृत्व किया, इस शैली के कार्यक्रमों के साथ स्पेगेटी कोड कहा जाता है। नतीजतन, संरचित प्रोग्रामिंग, जो (वस्तुतः) मनमाना कथनों को एक के अंदर स्टेटमेंट ब्लॉक में डालने की अनुमति देती है if कथन, लोकप्रियता में प्राप्त हुआ, जब तक कि यह अधिकांश बुनियादी प्रोग्रामिंग सर्किलों में भी आदर्श नहीं बन गया। इस तरह के तंत्र और सिद्धांत पुराने लेकिन अधिक उन्नत ALGOL भाषाओं के परिवार पर आधारित थे, और ALGOL जैसी भाषाएँ जैसे पास्कल (प्रोग्रामिंग भाषा) और मोडुला -2 ने कई वर्षों तक आधुनिक BASIC वेरिएंट को प्रभावित किया। जबकि यह केवल प्रयोग करते हुए ही संभव है GOTO कथनों में if–then प्रोग्राम लिखने के लिए कथन जो स्पेगेटी कोड नहीं हैं और एक संरचित प्रोग्रामिंग भाषा में लिखे गए प्रोग्राम के रूप में अच्छी तरह से संरचित और पठनीय हैं, संरचित प्रोग्रामिंग इसे आसान बनाती है और इसे लागू करती है। स्ट्रक्चर्ड if–then–else उपरोक्त उदाहरण जैसे कथन संरचित प्रोग्रामिंग के प्रमुख तत्वों में से एक हैं, और वे सी (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट और मूल दृश्य जैसी सबसे लोकप्रिय उच्च-स्तरीय प्रोग्रामिंग भाषाओं में मौजूद हैं।

लटकने की समस्या

else e> कीवर्ड एक विशिष्ट को लक्षित करने के लिए बनाया गया है if–then इसके पहले का कथन, लेकिन नेस्टिंग (कंप्यूटिंग) के लिए if–then कथन, क्लासिक प्रोग्रामिंग भाषा जैसे ALGOL 60 को परिभाषित करने के लिए संघर्ष करना पड़ा कि किस विशिष्ट कथन को लक्षित किया जाए। स्पष्ट सीमाओं के बिना कौन सा कथन कौन सा है, a else कीवर्ड किसी भी पूर्ववर्ती को लक्षित कर सकता है if–then पार्स के रूप में घोंसला में कथन।
अगर ए तो अगर बी तो एस और एस2

के रूप में विश्लेषित किया जा सकता है

अगर ए तब (यदि बी तो एस) और एस 2

या

यदि ए तो (यदि बी तो एस और एस 2)

निर्भर करता है कि क्या else पहले से जुड़ा है if या दूसरा if. इसे अन्य लटक रहा है समस्या के रूप में जाना जाता है, और भाषा के आधार पर (सामान्यतः end if कथन या {...} कोष्ठक)।

वरना अगर

का उपयोग करके else if, कई स्थितियों को जोड़ना संभव है। केवल पहली शर्त का पालन करने वाले कथन जो सत्य पाए जाते हैं, को क्रियान्वित किया जाएगा। अन्य सभी कथनों को छोड़ दिया जाएगा।

अगर शर्त है तो
   -- कथन
अन्य स्थिति तब
   -- और कथन
अन्य स्थिति तब
   -- और कथन;
...
अन्य
   -- अन्य कथन;
अगर अंत;

उदाहरण के लिए, एक दुकान के लिए जो किसी वस्तु पर 30% तक की छूट प्रदान करता है:

अगर छूट <11% तो
   प्रिंट (आपको $30 का भुगतान करना होगा)
और छूट <21% तो
   प्रिंट (आपको $20 का भुगतान करना होगा)
और छूट <31% तो
   प्रिंट (आपको $10 का भुगतान करना होगा)
अगर अंत;

ऊपर दिए गए उदाहरण में, यदि छूट 10% है, तो पहले यदि कथन का मूल्यांकन सत्य के रूप में किया जाएगा और आपको $30 का भुगतान करना होगा, तो उसका प्रिंट आउट ले लिया जाएगा। उस पहले यदि कथन के नीचे अन्य सभी कथनों को छोड़ दिया जाएगा। elseif उदाहरण के लिए एडा (प्रोग्रामिंग लैंग्वेज) भाषा में ई> स्टेटमेंट, सिंटैक्टिक चीनी है else के बाद if. अदा में फर्क इतना ही है कि सिर्फ एक end if जरूरत है, अगर कोई उपयोग करता है elseif के बजाय else के बाद if. पीएचपी उपयोग करता है elseif कीवर्ड[1] इसके कर्ली ब्रैकेट या कोलन सिंटैक्स दोनों के लिए। पर्ल कीवर्ड प्रदान करता है elsif बड़ी संख्या में ब्रेसिज़ से बचने के लिए जो कि एकाधिक द्वारा आवश्यक होंगे if और else कथन। पायथन (प्रोग्रामिंग लैंग्वेज) विशेष कीवर्ड का उपयोग करता है elif क्योंकि संरचना को ब्रेसिज़ के बजाय इंडेंटेशन द्वारा निरूपित किया जाता है, इसलिए बार-बार उपयोग किया जाता है else और if हर हालत के बाद बढ़े हुए इंडेंटेशन की आवश्यकता होगी। बेसिक के कुछ कार्यान्वयन, जैसे विज़ुअल बेसिक,[2] उपयोग ElseIf बहुत। इसी तरह, पहले के UNIX शेल (बाद में POSIX शेल सिंटैक्स तक इकट्ठे हुए[3]) elif का भी उपयोग करें, लेकिन रिक्त स्थान, लाइन ब्रेक या दोनों के साथ परिसीमन का विकल्प दें।

हालाँकि, कई भाषाओं में जो सीधे अल्गोल से उतरी हैं, जैसे सिमुला (प्रोग्रामिंग भाषा), पास्कल (प्रोग्रामिंग लैंग्वेज), BCPL (प्रोग्रामिंग लैंग्वेज) और C (प्रोग्रामिंग लैंग्वेज), के लिए यह विशेष सिंटैक्स else if निर्माण मौजूद नहीं है, न ही यह सी के कई सिंटैक्टिकल डेरिवेटिव्स में मौजूद है, जैसे कि जावा (प्रोग्रामिंग लैंग्वेज), ईसीएमएस्क्रिप्ट, और इसी तरह। यह काम करता है क्योंकि इन भाषाओं में, कोई एक कथन (इस स्थिति में if cond...) एक ब्लॉक में बंद किए बिना एक शर्त का पालन कर सकता है।

इस डिज़ाइन पसंद की थोड़ी लागत है। प्रत्येक else if शाखा प्रभावी रूप से एक अतिरिक्त नेस्टिंग स्तर जोड़ती है। यह संकलक (या जो लोग संकलक लिखते हैं) के लिए नौकरी को जटिल बनाता है, क्योंकि संकलक को मनमाने ढंग से लंबे समय तक विश्लेषण और कार्यान्वित करना चाहिए else if चेन रिकर्सिवली।

अगर कंडीशनल के अनुक्रम में सभी पद एक एक्सप्रेशन के मान का परीक्षण कर रहे हैं (उदाहरण के लिए, if x=0 ... else if x=1 ... else if x=2...), एक विकल्प स्विच स्टेटमेंट है, जिसे केस-स्टेटमेंट या सेलेक्ट-स्टेटमेंट भी कहा जाता है। इसके विपरीत, जिन भाषाओं में स्विच स्टेटमेंट नहीं है, उन्हें अनुक्रम द्वारा निर्मित किया जा सकता है else if कथन।

अगर-तो-और भाव

कई भाषाएँ if एक्सप्रेशंस का समर्थन करती हैं, जो if स्टेटमेंट्स के समान हैं, लेकिन परिणाम के रूप में एक मान लौटाते हैं। इस प्रकार, वे सच्ची अभिव्यक्तियाँ हैं (जो एक मूल्य का मूल्यांकन करते हैं), कथन नहीं (जो एक मूल्य के संदर्भ में अनुमति नहीं दी जा सकती है)।

अल्गोल परिवार

ALGOL 60 और ALGOL परिवार के कुछ अन्य सदस्य अनुमति देते हैं if–then–else एक अभिव्यक्ति के रूप में: <पूर्व>

 myvariable := यदि x > 20 तो 1 अन्य 2

</पूर्व>


लिस्प बोलियां

लिस्प की बोलियों में (प्रोग्रामिंग भाषा) - स्कीम (प्रोग्रामिंग लैंग्वेज), रैकेट (प्रोग्रामिंग भाषा) और सामान्य लिस्प – जिनमें से पहला ALGOL से काफी हद तक प्रेरित था: <वाक्यविन्यास लैंग = योजना>

योजना

(myvariable परिभाषित करें (यदि (> x 12) 1 2)); 'x' के मान के आधार पर 'myvariable' को 1 या 2 असाइन करता है </वाक्यविन्यास हाइलाइट>

<वाक्यविन्यास प्रकाश लैंग = लिस्प>

सामान्य लिस्प

(चलो ((x 10))

 (setq myvariable (यदि (> x 12) 2 4))); 2 को 'myvariable' असाइन करता है

</वाक्यविन्यास हाइलाइट>

हास्केल

हास्केल (प्रोग्रामिंग भाषा) 98 में, केवल एक इफ एक्सप्रेशन है, नो इफ स्टेटमेंट, और else भाग अनिवार्य है, क्योंकि प्रत्येक व्यंजक का कुछ मान होना चाहिए।[4] तर्क जो अन्य भाषाओं में सशर्त के साथ व्यक्त किया जाएगा, सामान्यतः पुनरावर्ती कार्यों में पैटर्न मिलान के साथ व्यक्त किया जाता है।

क्योंकि हास्केल आलसी मूल्यांकन है, नियंत्रण संरचनाओं को लिखना संभव है, जैसे कि, सामान्य अभिव्यक्ति के रूप में; आलसी मूल्यांकन का अर्थ है कि एक if फ़ंक्शन केवल स्थिति और उचित शाखा का मूल्यांकन कर सकता है (जहाँ एक सख्त भाषा तीनों का मूल्यांकन करेगी)। इसे इस प्रकार लिखा जा सकता है:[5] <वाक्यविन्यास लैंग = हैकेल> if' :: बूल -> ए -> ए -> ए अगर' सही x _ = x if' असत्य _ y = y </वाक्यविन्यास हाइलाइट>

सी जैसी भाषाएं

सी (प्रोग्रामिंग लैंग्वेज) और सी-लाइक लैंग्वेज में एक विशेष टर्नरी ऑपरेटर (? condition ? evaluated-when-true : evaluated-when-false इसका अर्थ यह है कि इसे सी-जैसी भाषाओं में, if-statement के विपरीत, भावों में इनलाइन किया जा सकता है: <वाक्यविन्यास प्रकाश लैंग = सी> my_variable = x > 10 ? फू : बार; // सी-जैसी भाषाओं में </वाक्यविन्यास हाइलाइट> जिसकी तुलना अल्गोल-परिवार से की जा सकती है अगर-तो-और भाव (एक कथन के विपरीत) (और इसी तरह रूबी और स्काला में, दूसरों के बीच)।

if-statement का उपयोग करके इसे पूरा करने के लिए, इसमें कोड की एक से अधिक पंक्तियां होंगी (ठेठ लेआउट सम्मेलनों के तहत), और दो बार my_variable का उल्लेख करने की आवश्यकता होगी: <वाक्यविन्यास प्रकाश लैंग = सी> अगर (एक्स> 10)

   my_variable = फू;

अन्य

   my_variable = बार;

</वाक्यविन्यास हाइलाइट>

कुछ लोगों का तर्क है कि स्पष्ट if/then स्टेटमेंट को पढ़ना आसान है और यह टर्नरी ऑपरेटर की तुलना में अधिक कुशल कोड के लिए संकलित हो सकता है,[6] जबकि अन्य तर्क देते हैं कि संक्षिप्त अभिव्यक्तियों को पुनरावृत्ति वाली कई पंक्तियों में फैले कथनों की तुलना में पढ़ना आसान है।

छोटा बेसिक

<वाक्यविन्यास लैंग = vbnet> एक्स = टेक्स्टविंडो। रीडनंबर () यदि (x > 10) तब

   TextWindow.WriteLine (मेरे चर का नाम 'फू' है।)

अन्य

   TextWindow.WriteLine (मेरे चर का नाम 'बार' है।)

अगर अंत </वाक्यविन्यास हाइलाइट>

सबसे पहले, जब उपयोगकर्ता प्रोग्राम चलाता है, तो एक कर्सर एक नंबर टाइप करने के लिए पाठक की प्रतीक्षा करता हुआ दिखाई देता है। यदि वह संख्या 10 से अधिक है, तो टेक्स्ट My चर का नाम 'foo' रखा गया है। स्क्रीन पर प्रदर्शित होता है। यदि संख्या 10 से छोटी है, तो संदेश My Variable को 'bar' नाम दिया गया है। स्क्रीन पर छपा हुआ है।

विजुअल बेसिक

विज़ुअल बेसिक और कुछ अन्य भाषाओं में, एक फ़ंक्शन कहा जाता है IIf प्रदान किया जाता है, जिसका उपयोग सशर्त अभिव्यक्ति के रूप में किया जा सकता है। यद्यपि , यह एक वास्तविक सशर्त अभिव्यक्ति की तरह व्यवहार नहीं करता है, क्योंकि सत्य और असत्य दोनों शाखाओं का सदैव मूल्यांकन किया जाता है; यह सिर्फ इतना है कि उनमें से एक का परिणाम फेंक दिया जाता है, जबकि दूसरे का परिणाम IIf फ़ंक्शन द्वारा वापस कर दिया जाता है।

टीसीएल

टीसीएल में if एक कीवर्ड नहीं है, लेकिन एक फ़ंक्शन है (टीसीएल में जिसे कमांड या के रूप में जाना जाता है proc). उदाहरण के लिए <वाक्यविन्यास लैंग = टीसीएल> अगर {$x > 10} {

  फू डालता है!

} </वाक्यविन्यास हाइलाइट> नामक एक समारोह का आह्वान करता है if पासिंग 2 आर्ग्युमेंट्स: पहला कंडीशन और दूसरा ट्रू ब्रांच। दोनों तर्कों को तार के रूप में पारित किया जाता है (Tcl में घुंघराले कोष्ठक के भीतर सब कुछ एक स्ट्रिंग है)।

उपरोक्त उदाहरण में फ़ंक्शन को कॉल करने से पहले स्थिति का मूल्यांकन नहीं किया जाता है। इसके बजाय, के कार्यान्वयन if फ़ंक्शन एक स्ट्रिंग मान के रूप में स्थिति प्राप्त करता है और कॉलर्स स्कोप में अभिव्यक्ति के रूप में इस स्ट्रिंग का मूल्यांकन करने के लिए ज़िम्मेदार है।[7] ऐसा व्यवहार उपयोग करने से संभव है uplevel और expr आदेश:

Uplevel Tcl प्रक्रियाओं के रूप में नए नियंत्रण निर्माणों को लागू करना संभव बनाता है (उदाहरण के लिए, Tcl प्रक्रिया के रूप में निर्माण को लागू करने के लिए uplevel का उपयोग किया जा सकता है)।[8]

क्योंकि if वास्तव में एक कार्य है यह एक मान भी देता है:

कमांड से रिटर्न वैल्यू उस बॉडी स्क्रिप्ट का परिणाम है जिसे निष्पादित किया गया था, या एक खाली स्ट्रिंग अगर कोई एक्सप्रेशन नॉन-जीरो नहीं था और कोई बॉडीएन नहीं था।[9]


जंग

जंग में (प्रोग्रामिंग भाषा), if सदैव एक अभिव्यक्ति है। यह जो भी शाखा निष्पादित की जाती है, या इकाई प्रकार के मूल्य का मूल्यांकन करता है () अगर कोई शाखा निष्पादित नहीं की जाती है। यदि कोई शाखा वापसी मूल्य प्रदान नहीं करती है, तो वह इसका मूल्यांकन करती है () डिफ़ॉल्ट रूप से। सुनिश्चित करने के लिए if अभिव्यक्ति का प्रकार संकलन समय पर जाना जाता है, प्रत्येक शाखा को उसी प्रकार के मान का मूल्यांकन करना चाहिए। इस कारण से, ए else शाखा प्रभावी रूप से अनिवार्य है जब तक कि अन्य शाखाएँ इसका मूल्यांकन न करें (), क्योंकि ए if बिना else सदैव मूल्यांकन कर सकता है () डिफ़ॉल्ट रूप से।[10] <वाक्यविन्यास प्रकाश लैंग = जंग> // x के मान के आधार पर my_variable को कुछ मान असाइन करें माना my_variable = अगर x > 20 {

   1

} अन्य {

   2

};

// यह संस्करण संकलित नहीं होगा क्योंकि 1 और () के विभिन्न प्रकार हैं माना my_variable = अगर x > 20 {

   1

};

// जरूरत न होने पर मूल्यों को छोड़ा जा सकता है अगर एक्स> 20 {

   Println! (x 20 से अधिक है);

} </वाक्यविन्यास हाइलाइट>

अंकगणित अगर

फोरट्रान 77 तक, फोरट्रान भाषा में एक अंकगणित है अगर कथन जो एक गणना किए गए IF और एक केस स्टेटमेंट के बीच में है, जो ट्राइकोटॉमी (गणित) पर आधारित है। x < 0, x = 0, x > 0. फोरट्रान में यह सबसे पहला सशर्त कथन था:[11] <वाक्यविन्यास लैंग = फोरट्रान> अगर (ई) लेबल 1, लेबल 2, लेबल 3 </वाक्यविन्यास हाइलाइट>

जहां ई कोई संख्यात्मक अभिव्यक्ति है (जरूरी नहीं कि एक पूर्णांक); यह इसके बराबर है

<वाक्यविन्यास लैंग = फोरट्रान> IF (e.LT. 0) GOTO लेबल1 अगर (ई। ईक्यू। 0) गोटो लेबल2 गोटो लेबल3 </वाक्यविन्यास हाइलाइट>

क्योंकि यह अंकगणितीय IF एकाधिक के बराबर है GOTO कथन जो कहीं भी जा सकते हैं, इसे एक असंरचित नियंत्रण कथन माना जाता है, और यदि अधिक संरचित कथनों का उपयोग किया जा सकता है तो इसका उपयोग नहीं किया जाना चाहिए। व्यवहार में यह देखा गया है कि अधिकांश अंकगणितीय IF कथनों ने निम्नलिखित कथनों को एक या दो लेबल के साथ संदर्भित किया।

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

=== स्मॉलटॉक === में वस्तु-उन्मुख कार्यान्वयन

अन्य भाषाओं के विपरीत, स्मॉलटाक में सशर्त कथन एक भाषा निर्माण नहीं है बल्कि कक्षा में परिभाषित किया गया है Boolean एक सार विधि के रूप में जो दो पैरामीटर लेती है, क्लोजर (कंप्यूटर विज्ञान) दोनों। Boolean दो उपवर्ग हैं, True और False, जो दोनों विधि को परिभाषित करते हैं, True केवल पहला क्लोजर निष्पादित करना, False केवल दूसरा क्लोजर निष्पादित करना।[12] <वाक्यविन्यास लैंग = स्मॉलटॉक> वार = स्थिति

   ifTrue: ['फू']
   ifFalse: ['बार']

</वाक्यविन्यास हाइलाइट>

जावास्क्रिप्ट

जावास्क्रिप्ट सी सिंटैक्स भाषाओं या समान के समान if-else स्टेटमेंट का उपयोग करता है। आरक्षित if कीवर्ड और बाएं कर्ली ब्रैकेट के बीच कोष्ठक के भीतर एक बूलियन मान स्वीकार किया जाता है। <वाक्यविन्यास लैंग = जावास्क्रिप्ट> अगर (गणित.यादृच्छिक () <0.5) {

 कंसोल.लॉग (आपको हेड्स मिल गए!);

} अन्य {

 कंसोल.लॉग (आपको पूंछ मिल गई!);

} </वाक्यविन्यास हाइलाइट> उपरोक्त उदाहरण की सशर्त लेता है Math.random() < 0.5 जो आउटपुट करता है true यदि 0 और 1 के बीच एक यादृच्छिक फ़्लोट मान 0.5 से अधिक है। कथन आउटपुट के बीच बेतरतीब ढंग से चयन करने के लिए इसका उपयोग करता है You got Heads! या You got Tails! कंसोल के लिए। Else और else-if कथनों को उनके पूर्ववर्ती कथन के कर्ली ब्रैकेट के बाद जितनी बार आवश्यक हो, उतनी बार जंजीर में बांधा जा सकता है, जैसा कि नीचे दिखाया गया है: <वाक्यविन्यास लैंग = जावास्क्रिप्ट> वर एक्स = गणित यादृच्छिक (); अगर (एक्स <1/3) {

 कंसोल.लॉग (एक व्यक्ति जीता!);

} और अगर (x <2/3) {

 कंसोल.लॉग (दो लोग जीते!);

} अन्य {

 कंसोल.लॉग (यह तीन तरह से टाई है!);

} </वाक्यविन्यास हाइलाइट>

लैम्ब्डा कैलकुस

लैम्ब्डा कैलकुलस में, यदि-तो-अन्य सशर्त की अवधारणा को अभिव्यक्तियों का उपयोग करके व्यक्त किया जा सकता है:

सच = λx। हाँ। एक्स
असत्य = λx. हाँ। वाई
ifTheNelse = (λc. λx. λy. (c x y))
  1. सच दो तर्क तक लेता है और एक बार दोनों प्रदान किए जाने के बाद (करी देखें), यह दिया गया पहला तर्क देता है।
  2. असत्य दो तर्क तक लेता है और एक बार दोनों प्रदान किए जाने के बाद (करी देखें), यह दिया गया दूसरा तर्क देता है।
  3. ifThenElse तीन तर्क तक लेता है और एक बार सभी प्रदान किए जाने के बाद, यह पहले तर्क के लिए दूसरे और तीसरे तर्क दोनों को पारित करता है (जो एक ऐसा कार्य है जो दो तर्क देता है, और परिणाम उत्पन्न करता है)। हम उम्मीद करते हैं कि ifThenElse केवल एक तर्क के रूप में सही या गलत ले, जो दोनों दिए गए दो तर्कों को उनके पसंदीदा एकल तर्क के लिए प्रोजेक्ट करते हैं, जो फिर लौटाया जाता है।

ध्यान दें: ifThenElse बाएँ और दाएँ सशर्त के रूप में दो कार्य करता है; वास्तव में चुने गए फ़ंक्शन को कॉल करने के लिए ifThenElse के परिणाम के लिए एक खाली टपल () पास करना आवश्यक है, अन्यथा ifThenElse कॉल किए बिना फ़ंक्शन ऑब्जेक्ट को वापस कर देगा।

ऐसी प्रणाली में जहां संख्याओं को परिभाषा के बिना इस्तेमाल किया जा सकता है (जैसे लिस्प, पारंपरिक पेपर गणित, आदि), उपरोक्त को नीचे एक बंद के रूप में व्यक्त किया जा सकता है: <वाक्यविन्यास प्रकाश लैंग = लिस्प>

((λसत्य। λअसत्य। λयदितोअन्यथा।
    (यदिफिरअन्यथा सत्य 2 3)
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

</वाक्यविन्यास हाइलाइट> यहाँ, True, False, और ifTheNelse अपनी-अपनी परिभाषाओं से बंधे हैं जो उनके ब्लॉक के अंत में उनके दायरे में पारित हो जाते हैं।

इसके लिए एक कार्यशील जावास्क्रिप्ट सादृश्य (कठोरता के लिए एकल चर के केवल कार्यों का उपयोग करके) है: <वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>

वर संगणना परिणाम = ((_true => _false => _ifThenElse =>
    _ifThenelse(_true)(2)(3)
) (एक्स => वाई => एक्स) (एक्स => वाई => वाई) (सी => एक्स => वाई => सी (एक्स) (वाई)));

</वाक्यविन्यास हाइलाइट> उपरोक्त कोड बहु-परिवर्तनीय कार्यों के साथ इस तरह दिखता है: <वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>

वर संगणना परिणाम = ((_true, _false, _ifThenElse) =>
    _ifThenelse(_true, 2, 3)
) ((एक्स, वाई) => एक्स, (एक्स, वाई) => वाई, (सी, एक्स, वाई) => सी (एक्स, वाई));

</वाक्यविन्यास हाइलाइट> सिस्टम के बिना पहले के उदाहरण का एक और संस्करण जहां संख्याएँ ग्रहण की जाती हैं, नीचे है।

पहला उदाहरण दिखाता है कि पहली शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है। <वाक्यविन्यास प्रकाश लैंग = लिस्प>

((λसत्य। λअसत्य। λयदितोअन्यथा।
    (यदि तबअन्य सत्य (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
((λसत्य। λअसत्य। λयदितोअन्यथा।
    (अगरफिरअन्यथा गलत (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

</वाक्यविन्यास हाइलाइट> स्मॉलटाक अपने सच्चे और झूठे अभ्यावेदन के लिए एक समान विचार का उपयोग करता है, जिसमें True और False सिंगलटन ऑब्जेक्ट होते हैं जो संदेशों को ifTrue/ifFalse अलग तरीके से प्रतिक्रिया देते हैं।

हास्केल अपने बूलियन प्रकार के लिए इस सटीक मॉडल का उपयोग करता था, लेकिन लेखन के समय, अधिकांश हास्केल प्रोग्राम सिंटैक्टिक चीनी का उपयोग करते हैं यदि a तो b और c निर्माण जो ifThenelse के विपरीत नहीं होता है जब तक कि रचना नहीं करता है या तो किसी अन्य फ़ंक्शन में लपेटा गया है या इस पृष्ठ के हास्केल अनुभाग में दिखाए गए अनुसार पुन: कार्यान्वित किया गया है।

केस और स्विच स्टेटमेंट

स्विच स्टेटमेंट (कुछ भाषाओं में, केस स्टेटमेंट या मल्टीवे ब्रांच) निर्दिष्ट स्थिरांक के साथ दिए गए मान की तुलना करते हैं और मैच के पहले स्थिरांक के अनुसार कार्रवाई करते हैं। यदि कोई मैच सफल नहीं होता है तो सामान्यतः एक डिफ़ॉल्ट कार्रवाई ('अन्य', 'अन्यथा') करने का प्रावधान है। स्विच स्टेटमेंट अनुकूलन संकलक की अनुमति दे सकते हैं, जैसे तालिका देखो। गतिशील भाषाओं में, स्थिति निरंतर अभिव्यक्तियों तक सीमित नहीं हो सकते हैं, और पैटर्न मिलान तक विस्तारित हो सकते हैं, जैसा कि दाईं ओर खोल स्क्रिप्ट उदाहरण में है, जहां '*)' किसी भी स्ट्रिंग से मेल खाने वाली नियमित अभिव्यक्ति के रूप में डिफ़ॉल्ट केस को लागू करता है।

Pascal: C: Shell script:
case someChar of
  'a': actionOnA;
  'x': actionOnX;
  'y','z':actionOnYandZ;
  else actionOnNoMatch;
end;
switch (someChar) {
  case 'a': actionOnA; break;
  case 'x': actionOnX; break;
  case 'y':
  case 'z': actionOnYandZ; break;
  default: actionOnNoMatch;
}
case $someChar in 
   a)    actionOnA; ;;
   x)    actionOnX; ;;
   [yz]) actionOnYandZ; ;;
  *)     actionOnNoMatch  ;;
esac


पैटर्न मिलान

पैटर्न मिलान को यदि-तो-और, और केस स्टेटमेंट दोनों के विकल्प के रूप में देखा जा सकता है। यह कई प्रोग्रामिंग भाषाओं में कार्यात्मक प्रोग्रामिंग सुविधाओं के साथ उपलब्ध है, जैसे कि वोल्फ्राम भाषा, एमएल (प्रोग्रामिंग भाषा) और कई अन्य। यहाँ OCaml भाषा में लिखा गया एक सरल उदाहरण है: <वाक्यविन्यास प्रकाश लैंग = ओकैमल> फलों का मिलान करें | सेब -> कुक पाई | नारियल -> dango_mochi पकाएं | केला -> मिश्रण ;; </वाक्यविन्यास हाइलाइट> पैटर्न मिलान की शक्ति संक्षिप्त रूप से न केवल क्रियाओं बल्कि मूल्यों को डेटा के पैटर्न से मिलान करने की क्षमता है। यहाँ हास्केल (प्रोग्रामिंग भाषा) में लिखा गया एक उदाहरण है जो इन दोनों विशेषताओं को दिखाता है: <वाक्यविन्यास लैंग = हैकेल> नक्शा _ [] = [] नक्शा एफ (एच: टी) = एफ एच: नक्शा एफ टी </वाक्यविन्यास हाइलाइट> यह कोड एक फ़ंक्शन मैप को परिभाषित करता है, जो दूसरे तर्क (एक सूची) के प्रत्येक तत्व के लिए पहला तर्क (एक फ़ंक्शन) लागू करता है, और परिणामी सूची देता है। इस स्थिति में संभव दो प्रकार के तर्कों के लिए दो पंक्तियाँ फ़ंक्शन की दो परिभाषाएँ हैं - एक जहाँ सूची खाली है (बस एक खाली सूची लौटाएँ) और दूसरी स्थिति जहाँ सूची खाली नहीं है।

पैटर्न मिलान सख्ती से सदैव एक विकल्प निर्माण नहीं बोल रहा है, क्योंकि हास्केल में केवल एक विकल्प लिखना संभव है, जिसे सदैव मिलान करने की गारंटी दी जाती है - इस स्थिति में, इसे पसंद निर्माण के रूप में उपयोग नहीं किया जा रहा है, लेकिन बस एक तरीके के रूप में नामों को मूल्यों से बाँधने के लिए। हालाँकि, यह अक्सर उन भाषाओं में एक विकल्प निर्माण के रूप में उपयोग किया जाता है जिनमें यह उपलब्ध है।

हैश-आधारित सशर्त

ऐसी प्रोग्रामिंग भाषाओं में जिनमें साहचर्य सरणियाँ या तुलनीय डेटा संरचनाएँ हैं, जैसे कि पायथन (प्रोग्रामिंग भाषा), पर्ल, पीएचपी या उद्देश्य सी, सशर्त असाइनमेंट को लागू करने के लिए उनका उपयोग करना मुहावरेदार है।[13] <वाक्यविन्यास लैंग = अजगर> पालतू जानवर = इनपुट (उस पालतू जानवर का प्रकार दर्ज करें जिसे आप नाम देना चाहते हैं:) ज्ञात_पेट्स = {

    कुत्ता : फिदो,
    बिल्ली : म्याऊं,
    पक्षी : ट्वीटी,

} my_name = ज्ञात_पालतू जानवर [पालतू जानवर] </वाक्यविन्यास हाइलाइट>

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

भविष्यवाणी

सशर्त शाखा निर्देशों का एक विकल्प शाखा भविष्यवाणी है। प्रिडिक्शन एक निर्देश सेट वास्तुकला फीचर है जो कंट्रोल फ्लो को संशोधित करने के बजाय निर्देशों को सशर्त रूप से निष्पादित करने में सक्षम बनाता है।

चॉइस सिस्टम क्रॉस रेफरेंस

यह तालिका प्रत्येक भाषा के नवीनतम भाषा विनिर्देश को संदर्भित करती है। जिन भाषाओं में विनिर्देश नहीं है, उनके लिए नवीनतम आधिकारिक तौर पर जारी कार्यान्वयन को संदर्भित किया जाता है।

Programming language Structured if switch–select–case Arithmetic if Pattern matching[A]
then else else–if
Ada Yes Yes Yes Yes No No
APL No Yes Yes Yes No No
Bash shell Yes Yes Yes Yes No Yes
C, C++ No Yes unneeded[B][C] Fall-through No No
C# No Yes Unneeded[B][C] Yes No No
COBOL Yes Yes Unneeded[C] Yes No No
Eiffel Yes Yes Yes Yes No No
F# Yes Yes Yes Unneeded[D] No Yes
Fortran 90 Yes Yes Yes Yes Yes[G] No
Go No Yes Unneeded[C] Yes No No
Haskell Yes Needed Unneeded[C] Yes, but unneeded[D] No Yes
Java No Yes Unneeded[C] Fall-through[14] No No
ECMAScript (JavaScript) No Yes Unneeded[C] Fall-through[15] No No
Mathematica No Yes Yes Yes No Yes
Oberon Yes Yes Yes Yes No No
Perl No Yes Yes Yes No No
PHP No Yes Yes Fall-through No No
Pascal, Object Pascal (Delphi) Yes Yes Unneeded Yes No No
Python No Yes Yes No No Yes
QuickBASIC Yes Yes Yes Yes No No
Ruby Yes Yes Yes Yes No Yes[H]
Rust No Yes Yes Unneeded No Yes
Scala No Yes Unneeded[C] Fall-through[citation needed] No Yes
SQL Yes[F] Yes Yes Yes[F] No No
Swift No Yes Yes Yes No Yes
Tcl No Yes Yes Yes No Yes
Visual Basic, classic Yes Yes Yes Yes No No
Visual Basic .NET Yes Yes Yes Yes No No
Windows PowerShell No Yes Yes Fall-through No No
  1. ^ This refers to pattern matching as a distinct conditional construct in the programming language – as opposed to mere string pattern matching support, such as regular expression support.
  2. 1 2 An #ELIF directive is used in the preprocessor sub-language that is used to modify the code before compilation; and to include other files.
  3. 1 2 3 4 5 6 The often-encountered else if in the C family of languages, and in COBOL and Haskell, is not a language feature but a set of nested and independent if then else statements combined with a particular source code layout. However, this also means that a distinct else–if construct is not really needed in these languages.
  4. 1 2 In Haskell and F#, a separate constant choice construct is unneeded, because the same task can be done with pattern matching.
  5. ^ In a Ruby case construct, regular expression matching is among the conditional flow-control alternatives available. For an example, see this Stack Overflow question.
  6. 1 2 SQL has two similar constructs that fulfill both roles, both introduced in SQL-92. A "searched CASE" expression CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END works like if ... else if ... else, whereas a "simple CASE" expression: CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END works like a switch statement. For details and examples see Case (SQL).
  7. ^ Arithmetic if is obsolescent in Fortran 90.
  8. ^ Pattern matching was added in Ruby 3.0.[16] Some pattern matching constructs are still experimental.


यह भी देखें

संदर्भ

  1. PHP elseif सिंटैक्स
  2. Visual Basic ElseIf सिंटैक्स
  3. POSIX standard shell syntax
  4. Haskell 98 Language and Libraries: The Revised Report
  5. "If-then-else Proposal on HaskellWiki"
  6. "Efficient C Tips #6 – Don't use the ternary operator « Stack Overflow". Embeddedgurus.com. 2009-02-18. Retrieved 2012-09-07.
  7. "New Control Structures". Tcler's wiki. Retrieved August 21, 2020.
  8. "uplevel manual page". www.tcl.tk. Retrieved August 21, 2020.
  9. "if manual page". www.tcl.tk. Retrieved August 21, 2020.
  10. "If and if let expressions". Retrieved November 1, 2020.
  11. "American National Standard Programming Language FORTRAN". 1978-04-03. Archived from the original on 2007-10-11. Retrieved 2007-09-09.
  12. "VisualWorks: Conditional Processing". 2006-12-16. Archived from the original on 2007-10-22. Retrieved 2007-09-09.
  13. "Pythonic way to implement switch/case statements". Archived from the original on 2015-01-20. Retrieved 2015-01-19.
  14. Java.sun.com, Java Language Specification, 3rd Edition.
  15. Ecma-international.org Archived 2015-04-12 at the Wayback Machine ECMAScript Language Specification, 5th Edition.
  16. "Pattern Matching". Documentation for Ruby 3.0.


बाहरी संबंध