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

From Vigyanwiki
No edit summary
No edit summary
 
(21 intermediate revisions by 4 users not shown)
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 [[सहायता: सशर्त भाव]]}}
[[File:If-Then-Else-diagram.svg|thumb|यदि-then-else प्रवाह आरेख]]
[[File:If-Then-Else-diagram.svg|thumb|यदि-तो-वरना प्रवाह आरेख]]
[[File:IF-THEN-ELSE-END flowchart.svg|thumb|right|एक नीडन If–then(–else) प्रवाह आरेख]][[कंप्यूटर विज्ञान]] में, सशर्त (अर्थात, सशर्त कथन, सशर्त अभिव्यक्ति और सशर्त निर्माण) निर्णय लेने के लिए [[प्रोग्रामिंग भाषा]] आदेश हैं। विशेष रूप से, सशर्त अलग-अलग संगणना या क्रियाएं करते हैं, जो इस बात पर निर्भर करता है कि प्रोग्रामर-परिभाषित [[बूलियन डेटाटाइप|बूलियन डेटा प्रकार]] 'सशर्त' सही या गलत का मूल्यांकन करता है या नहीं। नियंत्रण प्रवाह के संदर्भ में, निर्णय सदैव कुछ स्थिति के आधार पर नियंत्रण प्रवाह को वरणक्षमतापूर्वक रूप से बदलकर प्राप्त किया जाता है ([[शाखा भविष्यवाणी|शाखा कथन]] के स्थिति के अतिरिक्त )।
[[File:IF-THEN-ELSE-END flowchart.svg|thumb|right|एक नेस्टेड If–then(–else) प्रवाह आरेख]][[कंप्यूटर विज्ञान]] में, सशर्त (अर्थात, सशर्त कथन, सशर्त अभिव्यक्ति और सशर्त निर्माण) निर्णय लेने के लिए [[प्रोग्रामिंग भाषा]] आदेश हैं। विशेष रूप से, सशर्त अलग-अलग संगणना या क्रियाएं करते हैं, जो इस बात पर निर्भर करता है कि प्रोग्रामर-परिभाषित [[बूलियन डेटाटाइप]] 'स्थिति' सही या गलत का मूल्यांकन करता है या नहीं। नियंत्रण प्रवाह के संदर्भ में, निर्णय सदैव कुछ स्थिति के आधार पर नियंत्रण प्रवाह को वरणक्षमतापूर्वक रूप से बदलकर प्राप्त किया जाता है ([[शाखा भविष्यवाणी]] के स्थिति के अतिरिक्त )।


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


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


== If–then(–else) ==
== If–then(–else) ==
{{Redirect|if-then-else|the album|If Then Else}}
{{Redirect|if-then-else|the album|If Then Else}}
  <code>if–then</code> ई> निर्माण (कभी-कभी कहा जाता है <code>if–then–else</code>) कई प्रोग्रामिंग भाषाओं में सामान्य है। यद्यपि सिंटैक्स भाषा से भाषा में भिन्न होता है, मूल संरचना ([[स्यूडोकोड]] रूप में) इस प्रकार दिखती है:
  कई प्रोग्रामिंग भाषाओं में <code>if–then</code> निर्माण (कभी-कभी <code>if–then–else</code> कहा जाता है ) सामान्य है। यद्यपि वाक्यविन्यास भाषा से भाषा में भिन्न होता है, मूल संरचना([[स्यूडोकोड]] रूप में) इस प्रकार दिखती है:


  if (बूलियन स्थिति) then
  '''If''' (boolean condition) '''Then'''
     (परिणामस्वरूप)
     (consequent)
  else
  '''Else'''
     (विकल्प)
     (alternative)
  if end
  '''End If'''


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


if स्टॉक = 0 then
'''If''' stock=0 '''Then'''
     संदेश = नया स्टॉक ऑर्डर करें
     message= order new stock
  else
  '''Else'''
     संदेश = स्टॉक है
     message= there is stock
  if end
  '''End If'''


उपरोक्त उदाहरण कोड में, ''(बूलियन स्थिति)'' द्वारा दर्शाया गया भाग एक सशर्त ''अभिव्यक्ति'' का गठन करता है, जिसमें आंतरिक मूल्य होता है (उदाहरण के लिए, इसे <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> निष्पादित किए जाते हैं। elseथा, निम्नलिखित शाखा में निष्पादन जारी रहता है - या तो <code>else</code> [[ब्लॉक (प्रोग्रामिंग)]] (जो सामान्यतः वैकल्पिक होता है), या यदि नहीं है <code>else</code> शाखा, उसके बाद <code>end If</code>.
जब [[दुभाषिया (कंप्यूटिंग)|दुभाषिया(कंप्यूटिंग)]] एक <code>If</code> पाता है, यह एक बूलियन डेटा प्रकार स्थिति की अपेक्षा करता है - उदाहरण के लिए, <code>x > 0</code>, जिसका अर्थ है कि चर x में एक संख्या है जो शून्य से अधिक है - और उस कारक का मूल्यांकन करता है। यदि शर्त <code>true</code> है, निम्नलिखित कथन <code>then</code> निष्पादित किए जाते हैं। else निम्नलिखित शाखा में निष्पादन जारी रहता है - या तो <code>else</code> [[ब्लॉक (प्रोग्रामिंग)|ब्लॉक(प्रोग्रामिंग)]] में(जो सामान्यतः वैकल्पिक होता है), या यदि <code>else</code> शाखा नहीं है, तो <code>end</code>के बाद<code>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|बेसिक]] की कुछ बोलियाँ, एक <code>if–then</code> कथन में मात्र <code>[[GOTO]]</code> कथन हो सकते हैं(एक शाखा(कंप्यूटर विज्ञान) निर्देश के बराबर)। इसने [[स्पेगेटी प्रोग्रामिंग]] के रूप में जानी जाने वाली प्रोग्रामिंग की एक कठिन-से-पढ़ने वाली शैली का नेतृत्व किया, इस शैली के कार्यक्रमों के साथ स्पेगेटी कोड कहा जाता है। फलस्वरूप, [[संरचित प्रोग्रामिंग]], जो(वस्तुतः) यादृच्छिक कथनों को एक के अंदर कथन ब्लॉक में डालने की अनुमति देती है, लोकप्रियता में प्राप्त हुआ, जब तक कि यह अधिकांश बेसिक प्रोग्रामिंग हलकों में भी आदर्श नहीं बन गया। इस प्रकार के तंत्र और सिद्धांत प्राचीन परन्तु अधिक उन्नत [[ALGOL|ऐल्गॉल]] भाषाओं के वर्ग पर आधारित थे, और ऐल्गॉल जैसी भाषाएँ जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल(प्रोग्रामिंग भाषा)]] और मोडुला -2 ने कई वर्षों तक आधुनिक बेसिक प्रकार को प्रभावित किया। जबकि यह मात्र <code>GOTO</code> प्रयोग करते हुए ही संभव है कथनों में <code>if–then</code> प्रोग्राम लिखने के लिए कथन जो स्पेगेटी कोड नहीं हैं और एक संरचित प्रोग्रामिंग भाषा में लिखे गए प्रोग्राम के रूप में ठीक प्रकार से संरचित और पठनीय हैं, संरचित प्रोग्रामिंग इसे आसान बनाती है और इसे लागू करती है। संरचित <code>if–then–else</code> उपरोक्त उदाहरण जैसे कथन संरचित प्रोग्रामिंग के प्रमुख अवयवों में से एक हैं, और वे c([[सी (प्रोग्रामिंग भाषा)|प्रोग्रामिंग भाषा)]], [[जावा (प्रोग्रामिंग भाषा)|जावा(प्रोग्रामिंग भाषा)]], [[जावास्क्रिप्ट]] और [[मूल दृश्य]] जैसी सबसे लोकप्रिय उच्च-स्तरीय प्रोग्रामिंग भाषाओं में स्थित हैं।


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


=== वरना if ===
=== else if ===


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


  if शर्त है तो
  '''if''' condition '''then'''
     ''-- कथन''
     ''-- statements''
  else स्थिति then
  '''elseif''' condition '''then'''
     ''-- और कथन''
     ''-- more statements''
  else स्थिति then
  '''elseif''' condition '''then'''
     ''-- और कथन;''
     ''-- more statements;''
  ...
  ...
  else
  '''else'''
     ''-- else कथन;''
     ''-- other statements;''
  if end;
  '''end if''';


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


  if छूट <11% तो
  '''if''' discount < 11% '''then'''
     प्रिंट (आपको $30 का भुगतान करना होगा)
     print (you have to pay $30)
  और छूट <21% तो
  '''elseif''' discount<21% '''then'''
     प्रिंट (आपको $20 का भुगतान करना होगा)
     print (you have to pay $20)
  और छूट <31% तो
  '''elseif''' discount<31% '''then'''
     प्रिंट (आपको $10 का भुगतान करना होगा)
     print (you have to pay $10)
  if end;
  '''end if''';


ऊपर दिए गए उदाहरण में, यदि छूट 10% है, तो पहले यदि कथन का मूल्यांकन सत्य के रूप में किया जाएगा और आपको $30 का भुगतान करना होगा, तो उसका प्रिंट आउट ले लिया जाएगा। उस पहले यदि कथन के नीचे else सभी कथनों को छोड़ दिया जाएगा। <code>elseif</code> उदाहरण के लिए एडा (प्रोग्रामिंग लैंग्वेज) भाषा में > स्टेटमेंट, [[सिंटैक्टिक चीनी]] है <code>else</code> के बाद <code>if</code>. अदा में फर्क इतना ही है कि सिर्फ एक <code>end if</code> जरूरत है, if कोई उपयोग करता है <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>if</code> के बाद <code>else</code> के अतिरिक्त <code>elseif</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> का भी उपयोग करते हैं। इसी प्रकार, पूर्व के यूनिक्स शेल(बाद में पॉज़िक्स शेल वाक्यविन्यास तक इकट्ठे हुए<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>...) एक ब्लॉक में बंद किए बिना एक शर्त का पालन कर सकता है।
यद्यपि, कई भाषाओं जैसे [[सिमुला (प्रोग्रामिंग भाषा)|सिमुला(प्रोग्रामिंग भाषा)]], पास्कल(प्रोग्रामिंग भाषा), बीसीपीएल(प्रोग्रामिंग भाषा) और C(प्रोग्रामिंग भाषा) जो सीधे उत्पन्न हुई हैं, <code>else if</code> निर्माण के लिए यह विशेष वाक्यविन्यास स्थित नहीं है, न ही यह c के कई वाक्यगत व्युत्पन्न में स्थित है, जैसे कि जावा(प्रोग्रामिंग भाषा), ईसीएमएस्क्रिप्ट, और इसी प्रकार। यह काम करता है क्योंकि इन भाषाओं में, कोई भी कथन(इस स्थिति में <code>if ''cond''</code>...) एक ब्लॉक संलग्न हुए बिना एक सशर्त का पालन कर सकता है।


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


if कंडीशनल के अनुक्रम में सभी पद एक एक्सप्रेशन के मान का परीक्षण कर रहे हैं (उदाहरण के लिए, <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> कथन।


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


==== अल्गोल परिवार ====
कई भाषाएँ if भाव का समर्थन करती हैं, जो if कथन के समान हैं, परन्तु परिणाम के रूप में एक मान लौटाते हैं। इस प्रकार, वे सच्ची अभिव्यक्तियाँ हैं(जो एक मूल्य का मूल्यांकन करते हैं), कथन नहीं(जो एक मूल्य के संदर्भ में अनुमति नहीं दी जा सकती है)।
ALGOL 60 और ALGOL परिवार के कुछ else सदस्य अनुमति देते हैं <code>if–then–else</code> एक अभिव्यक्ति के रूप में:
<पूर्व>
  myvariable := यदि x > 20 तो 1 else 2
</पूर्व> <!-- Don't place a semicolon at the end of the above ALGOL statement. It is NOT C. -->


==== अल्गोल वर्ग ====
ऐल्गॉल 60 और ऐल्गॉल वर्ग के कुछ अन्य सदस्य <code>if–then–else</code> को अभिव्यक्ति के रूप में अनुमति देते हैं:


==== लिस्प बोलियां ====
<pre>
लिस्प की बोलियों में (प्रोग्रामिंग भाषा){{nbsp}}- स्कीम (प्रोग्रामिंग लैंग्वेज), [[रैकेट (प्रोग्रामिंग भाषा)]] और [[सामान्य लिस्प]]{{nbsp}}– जिनमें से पहला ALGOL से काफी हद तक प्रेरित था:
  myvariable := if x > 20 then 1 else 2
<वाक्यविन्यास लैंग = योजना>
</pre> <!-- Don't place a semicolon at the end of the above ALGOL statement. It is NOT C. -->
;; योजना
(myvariable परिभाषित करें (यदि (> x 12) 1 2)); 'x' के मान के आधार पर 'myvariable' को 1 या 2 असाइन करता है
</वाक्यविन्यास हाइलाइट>


<वाक्यविन्यास प्रकाश लैंग = लिस्प>
==== लिस्प भाषिका ====
;; सामान्य लिस्प
लिस्प की भाषिका में(प्रोग्रामिंग भाषा)- पद्धति(प्रोग्रामिंग भाषा), [[रैकेट (प्रोग्रामिंग भाषा)|रैकेट(प्रोग्रामिंग भाषा)]] और [[सामान्य लिस्प]]– जिनमें से प्रथम ऐल्गॉल से अत्यधिक प्रेरित था:
(चलो ((x 10))
 
   (setq myvariable (यदि (> x 12) 2 4))); 2 को 'myvariable' असाइन करता है
<syntaxhighlight lang="scheme">
</वाक्यविन्यास हाइलाइट>
;; Scheme
(define myvariable (if (> x 12) 1 2))  ; Assigns 'myvariable' to 1 or 2, depending on the value of 'x'
</syntaxhighlight>
 
<syntaxhighlight lang="lisp">
;; Common Lisp
(let ((x 10))
   (setq myvariable (if (> x 12) 2 4))) ; Assigns 'myvariable' to 2
</syntaxhighlight>


==== हास्केल ====
==== हास्केल ====
[[हास्केल (प्रोग्रामिंग भाषा)]] 98 में, केवल एक इफ एक्सप्रेशन है, नो इफ स्टेटमेंट, और <code>else</code> भाग अनिवार्य है, क्योंकि प्रत्येक व्यंजक का कुछ मान होना चाहिए।<ref name="haskell98report">''[http://www.haskell.org/onlinereport/ Haskell 98 Language and Libraries: The Revised Report]''</ref> तर्क जो else भाषाओं में सशर्त के साथ व्यक्त किया जाएगा, सामान्यतः पुनरावर्ती कार्यों में [[पैटर्न मिलान]] के साथ व्यक्त किया जाता है।
[[हास्केल (प्रोग्रामिंग भाषा)|हास्केल(प्रोग्रामिंग भाषा)]] 98 में, मात्र एक if अभिव्यक्ति है, न if कथन, और <code>else</code> भाग अनिवार्य है, क्योंकि प्रत्येक व्यंजक का कुछ मान होना चाहिए।<ref name="haskell98report">''[http://www.haskell.org/onlinereport/ Haskell 98 Language and Libraries: The Revised Report]''</ref> तर्क जो else भाषाओं में सशर्त के साथ व्यक्त किया जाएगा, सामान्यतः पुनरावर्ती कार्यों में [[पैटर्न मिलान]] के साथ व्यक्त किया जाता है।
 
क्योंकि हास्केल [[आलसी मूल्यांकन|मन्द मूल्यांकन]] है, नियंत्रण संरचनाओं को लिखना संभव है, जैसे कि, सामान्य अभिव्यक्ति के रूप में; मन्द मूल्यांकन का अर्थ है कि एक if प्रकार्य मात्र स्थिति और उचित शाखा का मूल्यांकन कर सकता है(जहाँ एक विशुद्ध भाषा तीनों का मूल्यांकन करेगी)। इसे इस प्रकार लिखा जा सकता है:<ref name="haskell-ifthenelse-proposal">"[http://haskell.org/haskellwiki/If-then-else If-then-else Proposal on HaskellWiki]"</ref>
 
<syntaxhighlight lang="haskell">
if' :: Bool -> a -> a -> a
if' True x _ = x
if' False _ y = y
</syntaxhighlight>


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


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


if-statement का उपयोग करके इसे पूरा करने के लिए, इसमें कोड की एक से अधिक पंक्तियां होंगी (ठेठ लेआउट सम्मेलनों के तहत), और दो बार my_variable का उल्लेख करने की आवश्यकता होगी:
इसका अर्थ यह है कि इसे c -जैसी भाषाओं में, if-कथन के विपरीत, भावों में समरेखी किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = सी>
 
if (एक्स> 10)
<syntaxhighlight lang="c">
     my_variable = फू;
my_variable = x > 10 ? "foo" : "bar";  // In C-like languages
</syntaxhighlight>
 
जिसकी तुलना अल्गोल-वर्ग से की जा सकती है if-then-else भाव(एक कथन के विपरीत)(और इसी प्रकार रूबी और स्काला में, दूसरों के बीच)।
 
if-कथन का उपयोग करके इसे पूरा करने के लिए, इसमें कोड की एक से अधिक पंक्तियां होंगी( विशिष्ट लेआउट रूढ़ि के अंतर्गत), और दो बार my_variable का उल्लेख करने की आवश्यकता होगी:
 
<syntaxhighlight lang="c">
if (x > 10)
     my_variable = "foo";
else
else
     my_variable = बार;
     my_variable = "bar";
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


कुछ लोगों का तर्क है कि स्पष्ट 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> जबकि else तर्क देते हैं कि संक्षिप्त अभिव्यक्तियों को पुनरावृत्ति वाली कई पंक्तियों में फैले कथनों की तुलना में पढ़ना आसान है।
कुछ लोगों का तर्क है कि स्पष्ट 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> जबकि else तर्क देते हैं कि संक्षिप्त अभिव्यक्तियों को पुनरावृत्ति वाली कई पंक्तियों में फैले कथनों की तुलना में पढ़ना आसान है।


==== [[छोटा बेसिक]] ====
==== [[छोटा बेसिक]] ====
<वाक्यविन्यास लैंग = vbnet>
<syntaxhighlight lang="vbnet">
एक्स = टेक्स्टविंडो। रीडनंबर ()
x = TextWindow.ReadNumber()
यदि (x > 10) then
If (x > 10) Then
     TextWindow.WriteLine (मेरे चर का नाम 'फू' है।)
     TextWindow.WriteLine("My variable is named 'foo'.")
else
Else
     TextWindow.WriteLine (मेरे चर का नाम 'बार' है।)
     TextWindow.WriteLine("My variable is named 'bar'.")
if end
EndIf
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


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


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


==== [[टीसीएल]] ====
==== [[टीसीएल]] ====
टीसीएल में <code>if</code> एक कीवर्ड नहीं है, परन्तु एक फ़ंक्शन है (टीसीएल में जिसे कमांड या के रूप में जाना जाता है <code>proc</code>). उदाहरण के लिए
टीसीएल में <code>if</code> एक संकेतशब्द नहीं है, परन्तु एक प्रकार्य है(टीसीएल में जिसे <code>proc</code> कमांड या के रूप में जाना जाता है।) उदाहरण के लिए
<वाक्यविन्यास लैंग = टीसीएल>
 
<syntaxhighlight lang="tcl">
if {$x > 10} {
if {$x > 10} {
   फू डालता है!
   puts "Foo!"
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
नामक एक समारोह का आह्वान करता है <code>if</code> पासिंग 2 आर्ग्युमेंट्स: पहला कंडीशन और दूसरा ट्रू ब्रांच। दोनों तर्कों को तार के रूप में पारित किया जाता है (Tcl में घुंघराले कोष्ठक के भीतर सब कुछ एक स्ट्रिंग है)।


उपरोक्त उदाहरण में फ़ंक्शन को कॉल करने से पहले स्थिति का मूल्यांकन नहीं किया जाता है। इसके बजाय, के कार्यान्वयन <code>if</code> फ़ंक्शन एक स्ट्रिंग मान के रूप में स्थिति प्राप्त करता है और कॉलर्स स्कोप में अभिव्यक्ति के रूप में इस स्ट्रिंग का मूल्यांकन करने के लिए ज़िम्मेदार है।<ref>{{cite web|title=New Control Structures|url=https://wiki.tcl-lang.org/page/New+Control+Structures|publisher=[[Tcler's wiki]]|access-date=August 21, 2020}}</ref>
2-तर्कों को अस्थायी करने वाले <code>if</code> नामक एक प्रकार्य का आह्वान करता है: पहली शर्त और दूसरी सच्ची शाखा। दोनों तर्कों को तार के रूप में पारित किया जाता है(टीसीएल में धनु कोष्ठक के भीतर सब कुछ एक स्ट्रिंग है)।
ऐसा व्यवहार उपयोग करने से संभव है <code>uplevel</code> और <code>expr</code> आदेश:
: Uplevel Tcl प्रक्रियाओं के रूप में नए नियंत्रण निर्माणों को लागू करना संभव बनाता है (उदाहरण के लिए, Tcl प्रक्रिया के रूप में निर्माण को लागू करने के लिए uplevel का उपयोग किया जा सकता है)।<ref>{{cite web|title=uplevel manual page|url=https://www.tcl.tk/man/tcl8.6/TclCmd/uplevel.htm|publisher=[[www.tcl.tk]]|access-date=August 21, 2020}}</ref>
क्योंकि <code>if</code> वास्तव में एक कार्य है यह एक मान भी देता है:
: कमांड से रिटर्न वैल्यू उस बॉडी स्क्रिप्ट का परिणाम है जिसे निष्पादित किया गया था, या एक खाली स्ट्रिंग if कोई एक्सप्रेशन नॉन-जीरो नहीं था और कोई बॉडीएन नहीं था।<ref>{{cite web|title=if manual page|url=http://www.tcl.tk/man/tcl8.6/TclCmd/if.htm|publisher=[[www.tcl.tk]]|access-date=August 21, 2020}}</ref>


उपरोक्त उदाहरण में प्रकार्य को कॉल करने से पूर्व कारक का मूल्यांकन नहीं किया जाता है। इसके अतिरिक्त, <code>if</code> के कार्यान्वयन प्रकार्य एक स्ट्रिंग मान के रूप में स्थिति प्राप्त करता है और कॉलर्स स्कोप में अभिव्यक्ति के रूप में इस स्ट्रिंग का मूल्यांकन करने के लिए उत्तरदायी है।<ref>{{cite web|title=New Control Structures|url=https://wiki.tcl-lang.org/page/New+Control+Structures|publisher=[[Tcler's wiki]]|access-date=August 21, 2020}}</ref>


==== जंग ====
ऐसा अभ्यास <code>uplevel</code> और <code>expr</code> कमांड का उपयोग करने से संभव है:
जंग में (प्रोग्रामिंग भाषा), <code>if</code> सदैव एक अभिव्यक्ति है। यह जो भी शाखा निष्पादित की जाती है, या इकाई प्रकार के मूल्य का मूल्यांकन करता है <code>()</code> if कोई शाखा निष्पादित नहीं की जाती है। यदि कोई शाखा वापसी मूल्य प्रदान नहीं करती है, तो वह इसका मूल्यांकन करती है <code>()</code> डिफ़ॉल्ट रूप से। सुनिश्चित करने के लिए <code>if</code> अभिव्यक्ति का प्रकार संकलन समय पर जाना जाता है, प्रत्येक शाखा को उसी प्रकार के मान का मूल्यांकन करना चाहिए। इस कारण से, <code>else</code> शाखा प्रभावी रूप से अनिवार्य है जब तक कि else शाखाएँ इसका मूल्यांकन न करें <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>
: Uplevel टीसीएल प्रक्रियाओं के रूप में नए नियंत्रण निर्माणों को लागू करना संभव बनाता है(उदाहरण के लिए, टीसीएल प्रक्रिया के रूप में निर्माण को लागू करने के लिए uplevel का उपयोग किया जा सकता है)।<ref>{{cite web|title=uplevel manual page|url=https://www.tcl.tk/man/tcl8.6/TclCmd/uplevel.htm|publisher=[[www.tcl.tk]]|access-date=August 21, 2020}}</ref>
<वाक्यविन्यास प्रकाश लैंग = जंग>
क्योंकि <code>if</code> निश्चित एक प्रकार्य है यह एक मान भी देता है:
// x के मान के आधार पर my_variable को कुछ मान असाइन करें
: कमांड से पुनरावृत्ति मूल्य उस बॉडी स्क्रिप्ट का परिणाम है जिसे निष्पादित किया गया था, या एक रिक्त स्ट्रिंग if कोई अभिव्यक्ति गैर शून्य नहीं था और कोई बॉडीएन नहीं था।<ref>{{cite web|title=if manual page|url=http://www.tcl.tk/man/tcl8.6/TclCmd/if.htm|publisher=[[www.tcl.tk]]|access-date=August 21, 2020}}</ref>
माना my_variable = if x > 20 {
 
 
==== रस्ट ====
रस्ट में(प्रोग्रामिंग भाषा), <code>if</code> सदैव एक अभिव्यक्ति है। यह जो भी शाखा निष्पादित की जाती है, या इकाई प्रकार के मूल्य का मूल्यांकन करता है(<code>)</code> if कोई शाखा निष्पादित नहीं की जाती है। यदि कोई शाखा वापसी मूल्य प्रदान नहीं करती है, तो वह डिफ़ॉल्ट रूप से(<code>)</code> का मूल्यांकन करती है। यह सुनिश्चित करने के लिए <code>if</code> अभिव्यक्ति का प्रकार संकलन समय पर जाना जाता है, प्रत्येक शाखा को उसी प्रकार के मान का मूल्यांकन करना चाहिए। इस कारण से, एक<code>else</code> शाखा प्रभावी रूप से अनिवार्य है जब तक कि अन्य शाखाएँ इसका मूल्यांकन नहीं करतीं, क्योंकि <code>else</code> बिना <code>if</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>
 
<syntaxhighlight lang="rust">
// Assign my_variable some value, depending on the value of x
let my_variable = if x > 20 {
     1
     1
} else {
} else {
Line 173: Line 184:
};
};


// यह संस्करण संकलित नहीं होगा क्योंकि 1 और () के विभिन्न प्रकार हैं
// This variant will not compile because 1 and () have different types
माना my_variable = if x > 20 {
let my_variable = if x > 20 {
     1
     1
};
};


// जरूरत न होने पर मूल्यों को छोड़ा जा सकता है
// Values can be omitted when not needed
if एक्स> 20 {
if x > 20 {
     Println! (x 20 से अधिक है);
     println!("x is greater than 20");
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


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


जहां ई कोई संख्यात्मक अभिव्यक्ति है (जरूरी नहीं कि एक पूर्णांक); यह इसके बराबर है
<syntaxhighlight lang="fortran">
IF (e) label1, label2, label3
</syntaxhighlight>


<वाक्यविन्यास लैंग = फोरट्रान>
Where e is any numeric expression (not necessarily an integer); this is equivalent to
IF (e.LT. 0) GOTO लेबल1
if (ई। ईक्यू। 0) गोटो लेबल2
गोटो लेबल3
</वाक्यविन्यास हाइलाइट>


क्योंकि यह अंकगणितीय IF एकाधिक के बराबर है <code>GOTO</code> कथन जो कहीं भी जा सकते हैं, इसे एक असंरचित नियंत्रण कथन माना जाता है, और यदि अधिक संरचित कथनों का उपयोग किया जा सकता है तो इसका उपयोग नहीं किया जाना चाहिए। व्यवहार में यह देखा गया है कि अधिकांश अंकगणितीय <code>IF</code> कथनों ने निम्नलिखित कथनों को एक या दो लेबल के साथ संदर्भित किया।
<syntaxhighlight lang="fortran">
IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
GOTO label3
</syntaxhighlight>


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


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


else भाषाओं के विपरीत, स्मॉलटाक में सशर्त कथन एक [[भाषा निर्माण]] नहीं है बल्कि कक्षा में परिभाषित किया गया है <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>
else भाषाओं के विपरीत, स्मॉलटाक में सशर्त कथन एक [[भाषा निर्माण]] नहीं है यद्यपि कक्षा में परिभाषित किया गया है <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>
<वाक्यविन्यास लैंग = स्मॉलटॉक>
 
वार = स्थिति
<syntaxhighlight lang="smalltalk">
     ifTrue: ['फू']
var = condition
     ifFalse: ['बार']
     ifTrue: [ 'foo' ]
</वाक्यविन्यास हाइलाइट>
     ifFalse: [ 'bar' ]
</syntaxhighlight>


=== जावास्क्रिप्ट ===
=== जावास्क्रिप्ट ===
जावास्क्रिप्ट [[सी सिंटैक्स]] भाषाओं या समान के समान if-else स्टेटमेंट का उपयोग करता है। आरक्षित if कीवर्ड और बाएं कर्ली ब्रैकेट के बीच कोष्ठक के भीतर एक बूलियन मान स्वीकार किया जाता है।
जावास्क्रिप्ट c [[सी सिंटैक्स|वाक्यविन्यास]] भाषाओं या समान के समान if-else कथन का उपयोग करता है। आरक्षित if संकेतशब्द और बाएं धनु कोष्ठक के बीच कोष्ठक के भीतर एक बूलियन मान स्वीकार किया जाता है।
<वाक्यविन्यास लैंग = जावास्क्रिप्ट>
 
if (गणित.यादृच्छिक () <0.5) {
<syntaxhighlight lang="javascript">
   कंसोल.लॉग (आपको हेड्स मिल गए!);
if (Math.random() < 0.5) {
   console.log("You got Heads!");
} else {
} else {
   कंसोल.लॉग (आपको पूंछ मिल गई!);
   console.log("You got Tails!");
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
उपरोक्त उदाहरण की सशर्त लेता है <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> की सशर्त लेता है जो 0 और 1 के बीच एक यादृच्छिक फ़्लोट मान 0.5 से अधिक होने पर <code>true</code> आउटपुट करता है। कथन कंसोल के लिए <code>You got Heads!</code> या <code>You got Tails!</code> आउटपुट के बीच यादृच्छिक रूप से चयन करने के लिए इसका उपयोग करता है । Else और else-if कथनों को उनके पूर्ववर्ती कथन के धनु कोष्ठक के बाद जितनी बार आवश्यक हो, उतनी बार श्रृंखलित किया जा सकता है, जैसा कि नीचे दिखाया गया है:
वर एक्स = गणित यादृच्छिक ();
 
if (एक्स <1/3) {
<syntaxhighlight lang="javascript">
   कंसोल.लॉग (एक व्यक्ति जीता!);
var x = Math.random();
} और if (x <2/3) {
if (x < 1/3) {
   कंसोल.लॉग (दो लोग जीते!);
   console.log("One person won!");
} else if (x < 2/3) {
   console.log("Two people won!");
} else {
} else {
   कंसोल.लॉग (यह तीन प्रकार से टाई है!);
   console.log("It's a three-way tie!");
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


=== लैम्ब्डा कैलकुस ===
=== लैम्ब्डा गणना ===
[[लैम्ब्डा कैलकुलस]] में, यदि-तो-else सशर्त की अवधारणा को अभिव्यक्तियों का उपयोग करके व्यक्त किया जा सकता है:
[[लैम्ब्डा कैलकुलस|लैम्ब्डा गणना]] में, यदि-then-else सशर्त की अवधारणा को अभिव्यक्तियों का उपयोग करके व्यक्त किया जा सकता है:
  सच = λx। हाँ। एक्स
  true = λx. λy. x
  असत्य = λx. हाँ। वाई
  false = λx. λy. y
  ifTheNelse = (λc. λx. λy. (c x y))
  ifTheNelse =(λc. λx. λy.(c x y))
# सच दो तर्क तक लेता है और एक बार दोनों प्रदान किए जाने के बाद ([[करी]] देखें), यह दिया गया पहला तर्क देता है।
# सत्य दो तर्क तक लेता है और एक बार दोनों प्रदान किए जाने के बाद( [[करी|विच्छेदन]] देखें), यह दिया गया प्रथम तर्क देता है।
# असत्य दो तर्क तक लेता है और एक बार दोनों प्रदान किए जाने के बाद (करी देखें), यह दिया गया दूसरा तर्क देता है।
# असत्य दो तर्क तक लेता है और एक बार दोनों प्रदान किए जाने के बाद( विच्छेदन देखें), यह दिया गया दूसरा तर्क देता है।
# ifThenElse तीन तर्क तक लेता है और एक बार सभी प्रदान किए जाने के बाद, यह पहले तर्क के लिए दूसरे और तीसरे तर्क दोनों को पारित करता है (जो एक ऐसा कार्य है जो दो तर्क देता है, और परिणाम उत्पन्न करता है)। हम उम्मीद करते हैं कि ifThenElse केवल एक तर्क के रूप में सही या गलत ले, जो दोनों दिए गए दो तर्कों को उनके पसंदीदा एकल तर्क के लिए प्रोजेक्ट करते हैं, जो फिर लौटाया जाता है।
# ifThenElse तीन तर्क तक लेता है और एक बार सभी प्रदान किए जाने के बाद, यह पूर्व तर्क के लिए दूसरे और तीसरे तर्क दोनों को पारित करता है(जो एक ऐसा प्रकार्य है जो दो तर्क देता है, और परिणाम उत्पन्न करता है)। हम आशा करते हैं कि ifThenElse मात्र एक तर्क के रूप में सत्य या असत्य ले, जो दोनों दिए गए दो तर्कों को उनके अधिमानित एकल तर्क के लिए प्रोजेक्ट करते हैं, जो फिर लौटाया जाता है।
ध्यान दें: ifThenElse बाएँ और दाएँ सशर्त के रूप में दो कार्य करता है; वास्तव में चुने गए फ़ंक्शन को कॉल करने के लिए ifThenElse के परिणाम के लिए एक खाली टपल () पास करना आवश्यक है, elseथा ifThenElse कॉल किए बिना फ़ंक्शन ऑब्जेक्ट को वापस कर देगा।
ध्यान दें: ifThenElse बाएँ और दाएँ सशर्त के रूप में दो कार्य करता है; निश्चित चुने गए प्रकार्य को कॉल करने के लिए ifThenElse के परिणाम के लिए एक रिक्त टपल() पास करना आवश्यक है, else ifThenElse कॉल किए बिना प्रकार्य ऑब्जेक्ट को वापस कर देगा।


ऐसी प्रणाली में जहां संख्याओं को परिभाषा के बिना इस्तेमाल किया जा सकता है (जैसे लिस्प, पारंपरिक पेपर गणित, आदि), उपरोक्त को नीचे एक बंद के रूप में व्यक्त किया जा सकता है:
ऐसी प्रणाली में जहां संख्याओं को परिभाषा के बिना उपयोग किया जा सकता है(जैसे लिस्प, परंपरागत पत्र गणित, आदि), उपरोक्त को नीचे एक बंद के रूप में व्यक्त किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
 
  ((λसत्य। λअसत्य। λयदितोelseथा।
<syntaxhighlight lang="lisp">
     (यदिफिरelseथा सत्य 2 3)
  ((λtrue. λfalse. λifThenElse.
     (ifThenElse true 2 3)
  )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
  )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
यहाँ, True, False, और ifTheNelse अपनी-अपनी परिभाषाओं से बंधे हैं जो उनके ब्लॉक के end में उनके दायरे में पारित हो जाते हैं।
 
यहाँ, True, False, और ifTheNelse अपनी-अपनी परिभाषाओं से बंधे हैं जो उनके ब्लॉक के end में उनके क्षेत्र में पारित हो जाते हैं।
 
इसके लिए एक कार्यशील जावास्क्रिप्ट सादृश्य(दृढ़ता के लिए एकल चर के मात्र कार्यों का उपयोग करके) है:
 
<syntaxhighlight lang="JavaScript">
var computationResult = ((_true => _false => _ifThenElse =>
    _ifThenElse(_true)(2)(3)
)(x => y => x)(x => y => y)(c => x => y => c(x)(y)));
</syntaxhighlight>


इसके लिए एक कार्यशील जावास्क्रिप्ट सादृश्य (कठोरता के लिए एकल चर के केवल कार्यों का उपयोग करके) है:
<वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>
वर संगणना परिणाम = ((_true => _false => _ifThenElse =>
    _ifThenelse(_true)(2)(3)
) (एक्स => वाई => एक्स) (एक्स => वाई => वाई) (सी => एक्स => वाई => सी (एक्स) (वाई)));
</वाक्यविन्यास हाइलाइट>
उपरोक्त कोड बहु-परिवर्तनीय कार्यों के साथ इस प्रकार दिखता है:
उपरोक्त कोड बहु-परिवर्तनीय कार्यों के साथ इस प्रकार दिखता है:
<वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>
वर संगणना परिणाम = ((_true, _false, _ifThenElse) =>
    _ifThenelse(_true, 2, 3)
) ((एक्स, वाई) => एक्स, (एक्स, वाई) => वाई, (सी, एक्स, वाई) => सी (एक्स, वाई));
</वाक्यविन्यास हाइलाइट>
सिस्टम के बिना पहले के उदाहरण का एक और संस्करण जहां संख्याएँ ग्रहण की जाती हैं, नीचे है।


पहला उदाहरण दिखाता है कि पहली शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है।
<syntaxhighlight lang="JavaScript">
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
var computationResult = ((_true, _false, _ifThenElse) =>
  ((λसत्य। λअसत्य। λयदितोelseथा।
    _ifThenElse(_true, 2, 3)
     (यदि thenelse सत्य (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
)((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));
</syntaxhighlight>
 
प्रणाली के बिना पूर्व के उदाहरण का एक और संस्करण जहां संख्याएँ ग्रहण की जाती हैं, नीचे है।
 
प्रथम उदाहरण दिखाता है कि प्रथम शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है।
 
<syntaxhighlight lang="lisp">
  ((λtrue. λfalse. λifThenElse.
     (ifThenElse true (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
  )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
  )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))


  ((λसत्य। λअसत्य। λयदितोelseथा।
  ((λtrue. λfalse. λifThenElse.
     (ifफिरelseथा गलत (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
     (ifThenElse false (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
  )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
  )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
स्मॉलटाक अपने सच्चे और झूठे अभ्यावेदन के लिए एक समान विचार का उपयोग करता है, जिसमें True और False सिंगलटन ऑब्जेक्ट होते हैं जो संदेशों को ifTrue/ifFalse अलग तरीके से प्रतिक्रिया देते हैं।


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


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


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


{| class="wikitable"
{| class="wikitable"
|-
|-
! [[Pascal (programming language)|Pascal]]:
! [[Pascal (programming language)|पास्कल]]:
! [[C (programming language)|C]]:
! [[C (programming language)|C]]:
! [[Shell script]]:
! [[Shell script|शैल स्क्रिप्ट]]:
|-
|-
|<syntaxhighlight lang="pascal">
|<syntaxhighlight lang="pascal">
Line 320: Line 355:
== पैटर्न मिलान ==
== पैटर्न मिलान ==


{{Main|Pattern matching}}
{{Main|पैटर्न मिलान}}
पैटर्न मिलान को यदि-तो-और, और केस स्टेटमेंट दोनों के विकल्प के रूप में देखा जा सकता है। यह कई प्रोग्रामिंग भाषाओं में कार्यात्मक प्रोग्रामिंग सुविधाओं के साथ उपलब्ध है, जैसे कि [[वोल्फ्राम भाषा]], [[एमएल (प्रोग्रामिंग भाषा)]] और कई else। यहाँ [[OCaml]] भाषा में लिखा गया एक सरल उदाहरण है:
 
<वाक्यविन्यास प्रकाश लैंग = ओकैमल>
पैटर्न मिलान को if-then-else, और कारक कथन दोनों के विकल्प के रूप में देखा जा सकता है। यह कई प्रोग्रामिंग भाषाओं में कार्यात्मक प्रोग्रामिंग सुविधाओं के साथ उपलब्ध है, जैसे कि [[वोल्फ्राम भाषा]], [[एमएल (प्रोग्रामिंग भाषा)|एमएल(प्रोग्रामिंग भाषा)]] और कई else। यहाँ [[OCaml]] भाषा में लिखा गया एक सरल उदाहरण है:
फलों का मिलान करें
 
| सेब -> कुक पाई
<syntaxhighlight lang="ocaml">
| नारियल -> dango_mochi पकाएं
match fruit with
| केला -> मिश्रण ;;
| "apple" -> cook pie
</वाक्यविन्यास हाइलाइट>
| "coconut" -> cook dango_mochi
पैटर्न मिलान की शक्ति संक्षिप्त रूप से न केवल क्रियाओं बल्कि मूल्यों को डेटा के पैटर्न से मिलान करने की क्षमता है। यहाँ हास्केल (प्रोग्रामिंग भाषा) में लिखा गया एक उदाहरण है जो इन दोनों विशेषताओं को दिखाता है:
| "banana" -> mix;;
<वाक्यविन्यास लैंग = हैकेल>
</syntaxhighlight>
नक्शा _ [] = []
 
नक्शा एफ (एच: टी) = एफ एच: नक्शा एफ टी
पैटर्न मिलान की शक्ति संक्षिप्त रूप से न मात्र क्रियाओं यद्यपि मूल्यों को डेटा के पैटर्न से मिलान करने की क्षमता है। यहाँ हास्केल(प्रोग्रामिंग भाषा) में लिखा गया एक उदाहरण है जो इन दोनों विशेषताओं को दिखाता है:
</वाक्यविन्यास हाइलाइट>
 
यह कोड एक फ़ंक्शन मैप को परिभाषित करता है, जो दूसरे तर्क (एक सूची) के प्रत्येक तत्व के लिए पहला तर्क (एक फ़ंक्शन) लागू करता है, और परिणामी सूची देता है। इस स्थिति में संभव दो प्रकार के तर्कों के लिए दो पंक्तियाँ फ़ंक्शन की दो परिभाषाएँ हैं - एक जहाँ सूची खाली है (बस एक खाली सूची लौटाएँ) और दूसरी स्थिति जहाँ सूची खाली नहीं है।
<syntaxhighlight lang="haskell">
map _ []     = []
map f (h : t) = f h : map f t
</syntaxhighlight>
 
यह कोड एक प्रकार्य प्रतिचित्र को परिभाषित करता है, जो दूसरे तर्क(एक सूची) के प्रत्येक अवयव के लिए प्रथम तर्क(एक प्रकार्य) लागू करता है, और परिणामी सूची देता है। इस स्थिति में संभव दो प्रकार के तर्कों के लिए दो पंक्तियाँ प्रकार्य की दो परिभाषाएँ हैं - एक जहाँ सूची रिक्त है(बस एक रिक्त सूची लौटाएँ) और दूसरी शर्त जहाँ सूची रिक्त नहीं है।
 
पैटर्न मिलान विशुद्धी से सदैव एक विकल्प निर्माण नहीं बोल रहा है, क्योंकि हास्केल में मात्र एक विकल्प लिखना संभव है, जिसे सदैव मिलान करने की गारंटी दी जाती है - इस स्थिति में, इसे पसंद निर्माण के रूप में उपयोग नहीं किया जा रहा है, परन्तु बस एक विधि के रूप में नामों को मूल्यों से बाँधने के लिए। यद्यपि, यह प्रायः उन भाषाओं में एक विकल्प निर्माण के रूप में उपयोग किया जाता है जिनमें यह उपलब्ध है।
 
 
 
 
 
 
 
 
 
 


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


== हैश-आधारित सशर्त ==
== हैश-आधारित सशर्त ==
ऐसी प्रोग्रामिंग भाषाओं में जिनमें साहचर्य सरणियाँ या तुलनीय डेटा संरचनाएँ हैं, जैसे कि पायथन (प्रोग्रामिंग भाषा), पर्ल, पीएचपी या [[उद्देश्य सी]], सशर्त असाइनमेंट को लागू करने के लिए उनका उपयोग करना मुहावरेदार है।<ref>{{cite web|url=http://codingstyleguide.com/style/180/python-pythonic-way-to-implement-switchcase-statements|title=Pythonic way to implement switch/case statements|access-date=2015-01-19|archive-url=https://web.archive.org/web/20150120120833/http://codingstyleguide.com/style/180/python-pythonic-way-to-implement-switchcase-statements|archive-date=2015-01-20|url-status=dead}}</ref>
ऐसी प्रोग्रामिंग भाषाओं में जिनमें साहचर्य सरणियाँ या तुलनीय डेटा संरचनाएँ हैं, जैसे कि पायथन(प्रोग्रामिंग भाषा), पर्ल, पीएचपी या [[उद्देश्य सी|ऑब्जेक्टिव c]], सशर्त असाइनमेंट को लागू करने के लिए उनका उपयोग करना सिद्धप्रयोग है।<ref>{{cite web|url=http://codingstyleguide.com/style/180/python-pythonic-way-to-implement-switchcase-statements|title=Pythonic way to implement switch/case statements|access-date=2015-01-19|archive-url=https://web.archive.org/web/20150120120833/http://codingstyleguide.com/style/180/python-pythonic-way-to-implement-switchcase-statements|archive-date=2015-01-20|url-status=dead}}</ref>
<वाक्यविन्यास लैंग = अजगर>
 
पालतू जानवर = इनपुट (उस पालतू जानवर का प्रकार दर्ज करें जिसे आप नाम देना चाहते हैं:)
<syntaxhighlight lang="python">
ज्ञात_पेट्स = {
pet = input("Enter the type of pet you want to name: ")
    कुत्ता : फिदो,
known_pets = {
    बिल्ली : म्याऊं,
    "Dog": "Fido",
    पक्षी : ट्वीटी,
    "Cat": "Meowsles",
    "Bird": "Tweety",
}
}
my_name = ज्ञात_पालतू जानवर [पालतू जानवर]
my_name = known_pets[pet]
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
 
जिन भाषाओं में अनाम प्रकार्य होते हैं या जो एक प्रोग्रामर को एक नामित प्रकार्य को एक चर संदर्भ में निर्दिष्ट करने की अनुमति देते हैं, एक [[प्रेषण तालिका]] के रूप में हैश का उपयोग करके सशर्त प्रवाह को लागू किया जा सकता है।
 
 
 
 
 
 


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


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


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


यह तालिका प्रत्येक भाषा के नवीनतम भाषा विनिर्देश को संदर्भित करती है। जिन भाषाओं में विनिर्देश नहीं है, उनके लिए नवीनतम आधिकारिक तौर पर जारी कार्यान्वयन को संदर्भित किया जाता है।
 
 
== कथन ==
{{Main|शाखा कथन}}
 
सशर्त शाखा निर्देशों का एक विकल्प शाखा कथन है। कथन एक [[निर्देश सेट वास्तुकला]] वैशिष्टय है जो नियंत्रण प्रवाह को संशोधित करने के अतिरिक्त निर्देशों को सशर्त रूप से निष्पादित करने में सक्षम बनाता है।
 
== चयन प्रणाली प्रति संदर्भ ==
 
यह तालिका प्रत्येक भाषा के नवीनतम भाषा विनिर्देश को संदर्भित करती है। जिन भाषाओं में विनिर्देश नहीं है, उनके लिए नवीनतम आधिकारिक रूप में जारी कार्यान्वयन को संदर्भित किया जाता है।


{| class="wikitable"
{| class="wikitable"
|-
|-
! rowspan=2 | [[Programming language]]
! rowspan="2" | [[Programming language|प्रोग्रामिंग भाषा]]
! colspan=3 | Structured if
! colspan="3" | संरचित if
! rowspan=2 | [[switch statement|switch]]–select–case
! rowspan="2" | [[switch statement|स्विच]]–चयन– कारक
! rowspan=2 | [[Arithmetic IF|Arithmetic if]]
! rowspan="2" | [[Arithmetic IF|अंकगणित if]]
! rowspan=2 | [[Pattern matching]]{{ref label|pattern matching|A|none}}
! rowspan="2" | [[Pattern matching|पैटर्न मिलान]]{{ref label|pattern matching|A|none}}
|-
|-
! then
! then
Line 371: Line 435:
! else–if
! else–if
|-
|-
|{{rh}}| [[Ada (programming language)|Ada]]
| {{rh}} class="table-rh" | [[Ada (programming language)|ऐडा]]  
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 379: Line 443:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[APL (programming language)|APL]]
| {{rh}} class="table-rh" | [[APL (programming language)|एपीएल]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 387: Line 451:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Bash (Unix shell)|Bash shell]]
| {{rh}} class="table-rh" | [[Bash (Unix shell)|बैश शैल]]  
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 395: Line 459:
| {{yes}}
| {{yes}}
|-  
|-  
|{{rh}}| [[C (programming language)|C]], [[C++]]
| {{rh}} class="table-rh" | [[C (programming language)|C]], [[C++]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 403: Line 467:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[C Sharp (programming language)|C#]]
| {{rh}} class="table-rh" | [[C Sharp (programming language)|C#]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 411: Line 475:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[COBOL]]
| {{rh}} class="table-rh" | [[COBOL|कोबोल]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 419: Line 483:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Eiffel (programming language)|Eiffel]]
| {{rh}} class="table-rh" | [[Eiffel (programming language)|एफिल]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 427: Line 491:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[F Sharp (programming language)|F#]]
| {{rh}} class="table-rh" | [[F Sharp (programming language)|F#]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 435: Line 499:
| {{yes}}
| {{yes}}
|-  
|-  
|{{rh}}| [[Fortran 90]]
| {{rh}} class="table-rh" | [[Fortran 90|फोरट्रान90]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 443: Line 507:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Go (programming language)|Go]]
| {{rh}} class="table-rh" | [[Go (programming language)|गो]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 451: Line 515:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Haskell (programming language)|Haskell]]
| {{rh}} class="table-rh" | [[Haskell (programming language)|हास्केल]]
| {{yes}}
| {{yes}}
| {{yes2|Needed}}
| {{yes2|Needed}}
Line 459: Line 523:
| {{yes}}
| {{yes}}
|-  
|-  
|{{rh}}| [[Java (programming language)|Java]]  
| {{rh}} class="table-rh" | [[Java (programming language)|जावा]]  
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 467: Line 531:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[ECMAScript]] ([[JavaScript]])
| {{rh}} class="table-rh" | [[ECMAScript|ईसीएमएस्क्रिप्ट]]([[JavaScript|जावास्क्रिप्ट]])
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 475: Line 539:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Mathematica]]
| {{rh}} class="table-rh" | [[Mathematica|मेथेमेटिका]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 483: Line 547:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Oberon (programming language)|Oberon]]
| {{rh}} class="table-rh" | [[Oberon (programming language)|ओबेरोन]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 491: Line 555:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Perl]]
| {{rh}} class="table-rh" | [[Perl|पर्ल]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 499: Line 563:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[PHP]]
| {{rh}} class="table-rh" | [[PHP|पीएचपी]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 507: Line 571:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Pascal (programming language)|Pascal]], [[Object Pascal]] ([[Delphi (programming language)|Delphi]])
| {{rh}} class="table-rh" | [[Pascal (programming language)|पास्कल]], [[Object Pascal|ऑब्जेक्ट पास्कल]]([[Delphi (programming language)|डेल्फी]])
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 515: Line 579:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Python (programming language)|Python]]
| {{rh}} class="table-rh" | [[Python (programming language)|पाइथन]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 523: Line 587:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[QuickBASIC]]
| {{rh}} class="table-rh" | [[QuickBASIC|क्वीकबेसिक]]  
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 531: Line 595:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Ruby (programming language)|Ruby]]
| {{rh}} class="table-rh" | [[Ruby (programming language)|रूबी]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 539: Line 603:
| {{yes}}{{ref label|ruby|H|none}}
| {{yes}}{{ref label|ruby|H|none}}
|-
|-
|{{rh}}| [[Rust (programming language)|Rust]]
| {{rh}} class="table-rh" | [[Rust (programming language)|रस्ट]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 547: Line 611:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Scala (programming language)|Scala]]
| {{rh}} class="table-rh" | [[Scala (programming language)|स्काला]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 555: Line 619:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[SQL]]
| {{rh}} class="table-rh" | [[SQL|एसक्यूएल]]
| {{yes}}{{ref label|SQL|F|1}}
| {{yes}}{{ref label|SQL|F|1}}
| {{yes}}
| {{yes}}
Line 563: Line 627:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Swift (programming language)|Swift]]
| {{rh}} class="table-rh" | [[Swift (programming language)|स्विफ्ट]]  
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 571: Line 635:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Tcl]]
| {{rh}} class="table-rh" | [[Tcl|टीसीएल]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 579: Line 643:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Visual Basic]], classic
| {{rh}} class="table-rh" | [[Visual Basic|विज़ुअल बेसिक]], क्लासिक
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 587: Line 651:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Visual Basic .NET]]
| {{rh}} class="table-rh" | [[Visual Basic .NET|विज़ुअल बेसिक .NET]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 595: Line 659:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Windows PowerShell]]  
| {{rh}} class="table-rh" | [[Windows PowerShell|विंडोज पॉवरशेल]]  
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 604: Line 668:
|}
|}
{{ordered list|type=upper-alpha
{{ordered list|type=upper-alpha
|{{note label|pattern matching|A|none}} 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.
|{{note label|pattern matching|A|none}} यह पैटर्न मिलान को प्रोग्रामिंग भाषा में एक विशिष्ट सशर्त निर्माण के रूप में संदर्भित करता है - मात्र स्ट्रिंग पैटर्न मिलान समर्थन के विपरीत, जैसे [[नियमित अभिव्यक्ति]] समर्थन।
|{{note label|preprocessor elif|B|1}}{{note label|preprocessor elif|B|2}} An #ELIF directive is used in the [[preprocessor]] sub-language that is used to modify the code before compilation; and to [[Include directive|include]] other files.
|{{note label|preprocessor elif|B|1}}{{note label|preprocessor elif|B|2}} [[प्रीप्रोसेसर]] उप-भाषा में एक #ELIF निर्देश का उपयोग किया जाता है जिसका उपयोग संकलन से पहले कोड को संशोधित करने के लिए किया जाता है; और [[निर्देश सम्मिलित करें|सम्मिलित करें]] अन्य फाइलें।
|{{note label|choice else if|C|1}} {{note label|choice else if|C|2}} {{note label|choice else if|C|3}} {{note label|choice else if|C|4}} {{note label|choice else if|C|5}} {{note label|choice else if|C|6}}The often-encountered <code>else if</code> 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.
|{{note label|choice else if|C|1}} {{note label|choice else if|C|2}} {{note label|choice else if|C|3}} {{note label|choice else if|C|4}} {{note label|choice else if|C|5}} {{note label|choice else if|C|6}}भाषाओं के C परिवार में, और कोबोल और हास्केल में प्रायः सामना किया जाने वाला <code>else if</code>, एक भाषा विशेषता नहीं है, परन्तु एक विशेष के साथ संयुक्त और स्वतंत्र '' if if else'' कथनों का एक सेट है स्रोत कोड लेआउट। यद्यपि, इसका अर्थ यह भी है कि इन भाषाओं में एक अलग else-if निर्माण की निश्चित आवश्यकता नहीं है।
|{{note label|choice const|D|1}} {{note label|choice const|D|2}} In Haskell and F#, a separate constant choice construct is unneeded, because the same task can be done with pattern matching.
|{{note label|choice const|D|1}} {{note label|choice const|D|2}} हास्केल और F# में, एक अलग स्थिर विकल्प निर्माण अनावश्यक है, क्योंकि वही कार्य पैटर्न मिलान के साथ किया जा सकता है।
|{{note label|case regexp|E|none}} In a Ruby <code>case</code> construct, [[regular expression]] matching is among the conditional flow-control alternatives available. For an example, see [https://stackoverflow.com/q/6803647 this] Stack Overflow question.
|{{note label|case regexp|E|none}} रूबी <कोड>केस</कोड> निर्माण में, [[रेगुलर एक्सप्रेशन]] मिलान उपलब्ध सशर्त प्रवाह-नियंत्रण विकल्पों में से एक है। उदाहरण के लिए देखें[https://stackoverflow.com/q/6803647 this] ढेर अतिप्रवाह प्रश्न।
|{{note label|SQL|F|1}}{{note label|SQL|F|2}} SQL has two similar constructs that fulfill both roles, both introduced in [[SQL-92]]. A "searched <code>CASE</code>" expression {{code|2=sql|CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END}} works like <code>if ... else if ... else</code>, whereas a "simple <code>CASE</code>" expression: {{code|2=sql|CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END}} works like a switch statement. For details and examples see [[Case (SQL)]].
|{{note label|SQL|F|1}}{{note label|SQL|F|2}} SQL में दो समान संरचनाएं हैं जो दोनों भूमिकाओं को पूरा करती हैं, दोनों को [[SQL-92]] में प्रस्तावित किया गया है। एक "खोज <code>CASE</code>" अभिव्यक्ति {{code|2=sql|CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END}} <code>if ... else की तरह काम करता है अगर ... और</code>, जबकि एक "सरल <code>CASE</code>" अभिव्यक्ति: {{code|2=sql|CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END}} काम करता है एक स्विच कथन के प्रकार। विवरण और उदाहरणों के लिए [[केस (एसक्यूएल)]] देखें।|{{note label|fortran|G|none}} फोरट्रान 90 में अंकगणित <code>if</code> अप्रचलित है।
|{{note label|fortran|G|none}} Arithmetic <code>if</code> is obsolescent in Fortran 90.
|{{note label|ruby|H|none}} रुबी 3.0 में पैटर्न मिलान जोड़ा गया था।<ref>{{cite web |title=Pattern Matching |url=https://docs.ruby-lang.org/en/3.0.0/doc/syntax/pattern_matching_rdoc.html |website=Documentation for Ruby 3.0}}</ref> कुछ पैटर्न मिलान वाले निर्माण अभी भी प्रायोगिक हैं।
|{{note label|ruby|H|none}} Pattern matching was added in Ruby 3.0.<ref>{{cite web |title=Pattern Matching |url=https://docs.ruby-lang.org/en/3.0.0/doc/syntax/pattern_matching_rdoc.html |website=Documentation for Ruby 3.0}}</ref> Some pattern matching constructs are still experimental.
}}
}}




== यह भी देखें ==
== यह भी देखें ==
* शाखा (कंप्यूटर विज्ञान)
* शाखा(कंप्यूटर विज्ञान)
* [[सशर्त संकलन]]
* [[सशर्त संकलन]]
* निष्पादन विकल्प बनाने के दूसरे तरीके के लिए गतिशील प्रेषण
* निष्पादन विकल्प बनाने के दूसरे विधि के लिए गतिशील प्रेषण
* इतिहास और ऐतिहासिक संदर्भों के लिए मैकार्थी औपचारिकतावाद
* इतिहास और ऐतिहासिक संदर्भों के लिए मैकार्थी औपचारिकतावाद
* [[नामित स्थिति]]
* [[नामित स्थिति|नामित शर्त]]
* [[रिलेशनल ऑपरेटर]]
* [[रिलेशनल ऑपरेटर]]
* [[टेस्ट (यूनिक्स)]]
* [[टेस्ट (यूनिक्स)|टेस्ट(यूनिक्स)]]
* [[योदा की स्थिति]]
* [[योदा की स्थिति|योदा की शर्त]]
* [[सशर्त चाल]]
* [[सशर्त चाल]]


Line 633: Line 696:
{{Wiktionary|then|else}}
{{Wiktionary|then|else}}
*{{Commons category-inline}}
*{{Commons category-inline}}
*[http://everythingfla.com/courses/video/8/69/ IF NOT (ActionScript 3.0)] video
*[http://everythingfla.com/courses/video/8/69/ IF NOT(ActionScript 3.0)] video
 
{{DEFAULTSORT:Conditional (programming)}}[[Category: स्यूडोकोड के उदाहरण वाले लेख]] [[Category: उदाहरण सी कोड वाले लेख]] [[Category: पास्कल कोड उदाहरण के साथ लेख]] [[Category: उदाहरण हास्केल कोड वाले लेख]] [[Category: सशर्त निर्माण | सशर्त निर्माण ]] [[Category: लेख उदाहरण के साथ पायथन (प्रोग्रामिंग भाषा) कोड]]
 


{{DEFAULTSORT:Conditional (programming)}}


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements|Conditional (programming)]]
[[Category:Created On 17/02/2023]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Conditional (programming)]]
[[Category:Articles with unsourced statements from November 2015|Conditional (programming)]]
[[Category:Commons category link is the pagename|Conditional (programming)]]
[[Category:Created On 17/02/2023|Conditional (programming)]]
[[Category:Lua-based templates|Conditional (programming)]]
[[Category:Machine Translated Page|Conditional (programming)]]
[[Category:Missing redirects|Conditional (programming)]]
[[Category:Pages with script errors|Conditional (programming)]]
[[Category:Short description with empty Wikidata description|Conditional (programming)]]
[[Category:Template documentation pages|Short description/doc]]
[[Category:Templates Vigyan Ready|Conditional (programming)]]
[[Category:Templates that add a tracking category|Conditional (programming)]]
[[Category:Templates that generate short descriptions|Conditional (programming)]]
[[Category:Templates using TemplateData|Conditional (programming)]]
[[Category:Webarchive template wayback links]]
[[Category:उदाहरण सी कोड वाले लेख|Conditional (programming)]]
[[Category:उदाहरण हास्केल कोड वाले लेख|Conditional (programming)]]
[[Category:पास्कल कोड उदाहरण के साथ लेख|Conditional (programming)]]
[[Category:लेख उदाहरण के साथ पायथन (प्रोग्रामिंग भाषा) कोड|Conditional (programming)]]
[[Category:सशर्त निर्माण| सशर्त निर्माण ]]
[[Category:स्यूडोकोड के उदाहरण वाले लेख|Conditional (programming)]]

Latest revision as of 17:25, 3 March 2023

यदि-then-else प्रवाह आरेख
एक नीडन If–then(–else) प्रवाह आरेख

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

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

शब्दावली

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

If–then(–else)

कई प्रोग्रामिंग भाषाओं में if–then निर्माण (कभी-कभी if–then–else कहा जाता है ) सामान्य है। यद्यपि वाक्यविन्यास भाषा से भाषा में भिन्न होता है, मूल संरचना(स्यूडोकोड रूप में) इस प्रकार दिखती है:
If (boolean condition) Then
   (consequent)
Else
   (alternative)
End If

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

If stock=0 Then

   message= order new stock
Else
   message= there is stock
End If

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

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

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

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

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

निलंबित else की समस्या

else संकेतशब्द एक विशिष्ट if–then को योजनाबद्ध करने के लिए बनाया गया है इसके पूर्व के कथन, परन्तु नीडन(कंप्यूटिंग) if–then कथनों के लिए, ऐल्गॉल 60 जैसी क्लासिक प्रोग्रामिंग भाषाओं को परिभाषित करने के लिए प्रयत्न करना पड़ा कि किस विशिष्ट कथन को योजनाबद्ध करना है। स्पष्ट सीमाओं के बिना कौन सा कथन कौन सा है, एक else संकेतशब्द पार्स के रूप में नीडन में किसी भी पूर्ववर्तीif–then कथन को योजनाबद्ध कर सकता है।
if a then if b then s else s2

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

if a then (if b then s) else s2

या

if a then (if b then s else s2)

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

else if

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

if condition then
   -- statements
elseif condition then
   -- more statements
elseif condition then
   -- more statements;
...
else
   -- other statements;
end if;

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

if discount < 11% then
   print (you have to pay $30)
elseif discount<21% then
   print (you have to pay $20)
elseif discount<31% then
   print (you have to pay $10)
end if;

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

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

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

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

if-then-else भाव

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

अल्गोल वर्ग

ऐल्गॉल 60 और ऐल्गॉल वर्ग के कुछ अन्य सदस्य if–then–else को अभिव्यक्ति के रूप में अनुमति देते हैं:

  myvariable := if x > 20 then 1 else 2

लिस्प भाषिका

लिस्प की भाषिका में(प्रोग्रामिंग भाषा)- पद्धति(प्रोग्रामिंग भाषा), रैकेट(प्रोग्रामिंग भाषा) और सामान्य लिस्प– जिनमें से प्रथम ऐल्गॉल से अत्यधिक प्रेरित था:

;; Scheme
(define myvariable (if (> x 12) 1 2))   ; Assigns 'myvariable' to 1 or 2, depending on the value of 'x'
;; Common Lisp
(let ((x 10))
  (setq myvariable (if (> x 12) 2 4)))  ; Assigns 'myvariable' to 2

हास्केल

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

क्योंकि हास्केल मन्द मूल्यांकन है, नियंत्रण संरचनाओं को लिखना संभव है, जैसे कि, सामान्य अभिव्यक्ति के रूप में; मन्द मूल्यांकन का अर्थ है कि एक if प्रकार्य मात्र स्थिति और उचित शाखा का मूल्यांकन कर सकता है(जहाँ एक विशुद्ध भाषा तीनों का मूल्यांकन करेगी)। इसे इस प्रकार लिखा जा सकता है:[5]

if' :: Bool -> a -> a -> a
if' True x _ = x
if' False _ y = y

c जैसी भाषाएं

c(प्रोग्रामिंग भाषा) और c -जैसी भाषा में एक विशेष टर्नरी ऑपरेटर होता है(?:) एक प्रकार्य के साथ सशर्त अभिव्यक्ति के लिए जिसे इस प्रकार के फर्मा द्वारा वर्णित किया जा सकता है:

condition ? evaluated-when-true : evaluated-when-false

इसका अर्थ यह है कि इसे c -जैसी भाषाओं में, if-कथन के विपरीत, भावों में समरेखी किया जा सकता है:

my_variable = x > 10 ? "foo" : "bar";  // In C-like languages

जिसकी तुलना अल्गोल-वर्ग से की जा सकती है if-then-else भाव(एक कथन के विपरीत)(और इसी प्रकार रूबी और स्काला में, दूसरों के बीच)।

if-कथन का उपयोग करके इसे पूरा करने के लिए, इसमें कोड की एक से अधिक पंक्तियां होंगी( विशिष्ट लेआउट रूढ़ि के अंतर्गत), और दो बार my_variable का उल्लेख करने की आवश्यकता होगी:

if (x > 10)
    my_variable = "foo";
else
    my_variable = "bar";

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

छोटा बेसिक

x = TextWindow.ReadNumber()
If (x > 10) Then
    TextWindow.WriteLine("My variable is named 'foo'.")
Else
    TextWindow.WriteLine("My variable is named 'bar'.")
EndIf

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

विजुअल बेसिक

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

टीसीएल

टीसीएल में if एक संकेतशब्द नहीं है, परन्तु एक प्रकार्य है(टीसीएल में जिसे proc कमांड या के रूप में जाना जाता है।) उदाहरण के लिए

if {$x > 10} {
   puts "Foo!"
}

2-तर्कों को अस्थायी करने वाले if नामक एक प्रकार्य का आह्वान करता है: पहली शर्त और दूसरी सच्ची शाखा। दोनों तर्कों को तार के रूप में पारित किया जाता है(टीसीएल में धनु कोष्ठक के भीतर सब कुछ एक स्ट्रिंग है)।

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

ऐसा अभ्यास uplevel और expr कमांड का उपयोग करने से संभव है:

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

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

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


रस्ट

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

// Assign my_variable some value, depending on the value of x
let my_variable = if x > 20 {
    1
} else {
    2
};

// This variant will not compile because 1 and () have different types
let my_variable = if x > 20 {
    1
};

// Values can be omitted when not needed
if x > 20 {
    println!("x is greater than 20");
}

अंकगणित if

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

IF (e) label1, label2, label3

Where e is any numeric expression (not necessarily an integer); this is equivalent to

IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
GOTO label3

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

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

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

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

var = condition 
    ifTrue: [ 'foo' ]
    ifFalse: [ 'bar' ]

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

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

if (Math.random() < 0.5) {
  console.log("You got Heads!");
} else {
  console.log("You got Tails!");
}

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

var x = Math.random();
if (x < 1/3) {
  console.log("One person won!");
} else if (x < 2/3) {
  console.log("Two people won!");
} else {
  console.log("It's a three-way tie!");
}

लैम्ब्डा गणना

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

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

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

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

 ((λtrue. λfalse. λifThenElse.
     (ifThenElse true 2 3)
 )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

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

इसके लिए एक कार्यशील जावास्क्रिप्ट सादृश्य(दृढ़ता के लिए एकल चर के मात्र कार्यों का उपयोग करके) है:

 var computationResult = ((_true => _false => _ifThenElse => 
     _ifThenElse(_true)(2)(3) 
 )(x => y => x)(x => y => y)(c => x => y => c(x)(y)));

उपरोक्त कोड बहु-परिवर्तनीय कार्यों के साथ इस प्रकार दिखता है:

 var computationResult = ((_true, _false, _ifThenElse) =>
     _ifThenElse(_true, 2, 3)
 )((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));

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

प्रथम उदाहरण दिखाता है कि प्रथम शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है।

 ((λtrue. λfalse. λifThenElse.
     (ifThenElse true (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
 )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

 ((λtrue. λfalse. λifThenElse.
     (ifThenElse false (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
 )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

स्मॉलटाक अपने true और false अभ्यावेदन के लिए एक समान विचार का उपयोग करता है, जिसमें True और False एकल ऑब्जेक्ट होते हैं जो संदेशों को ifTrue/ifFalse अलग विधि से प्रतिक्रिया देते हैं।

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







कारक और स्विच कथन

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

पास्कल: C: शैल स्क्रिप्ट:
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


पैटर्न मिलान

पैटर्न मिलान को if-then-else, और कारक कथन दोनों के विकल्प के रूप में देखा जा सकता है। यह कई प्रोग्रामिंग भाषाओं में कार्यात्मक प्रोग्रामिंग सुविधाओं के साथ उपलब्ध है, जैसे कि वोल्फ्राम भाषा, एमएल(प्रोग्रामिंग भाषा) और कई else। यहाँ OCaml भाषा में लिखा गया एक सरल उदाहरण है:

match fruit with
| "apple" -> cook pie
| "coconut" -> cook dango_mochi
| "banana" -> mix;;

पैटर्न मिलान की शक्ति संक्षिप्त रूप से न मात्र क्रियाओं यद्यपि मूल्यों को डेटा के पैटर्न से मिलान करने की क्षमता है। यहाँ हास्केल(प्रोग्रामिंग भाषा) में लिखा गया एक उदाहरण है जो इन दोनों विशेषताओं को दिखाता है:

map _ []      = []
map f (h : t) = f h : map f t

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

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







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

ऐसी प्रोग्रामिंग भाषाओं में जिनमें साहचर्य सरणियाँ या तुलनीय डेटा संरचनाएँ हैं, जैसे कि पायथन(प्रोग्रामिंग भाषा), पर्ल, पीएचपी या ऑब्जेक्टिव c, सशर्त असाइनमेंट को लागू करने के लिए उनका उपयोग करना सिद्धप्रयोग है।[13]

pet = input("Enter the type of pet you want to name: ")
known_pets = {
    "Dog": "Fido",
    "Cat": "Meowsles",
    "Bird": "Tweety",
}
my_name = known_pets[pet]

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







कथन

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

चयन प्रणाली प्रति संदर्भ

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

प्रोग्रामिंग भाषा संरचित if स्विच–चयन– कारक अंकगणित if पैटर्न मिलान[A]
then else else–if
ऐडा Yes Yes Yes Yes No No
एपीएल No Yes Yes Yes No No
बैश शैल 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
कोबोल Yes Yes Unneeded[C] Yes No No
एफिल Yes Yes Yes Yes No No
F# Yes Yes Yes Unneeded[D] No Yes
फोरट्रान90 Yes Yes Yes Yes Yes[G] No
गो No Yes Unneeded[C] Yes No No
हास्केल Yes Needed Unneeded[C] Yes, but unneeded[D] No Yes
जावा No Yes Unneeded[C] Fall-through[14] No No
ईसीएमएस्क्रिप्ट(जावास्क्रिप्ट) No Yes Unneeded[C] Fall-through[15] No No
मेथेमेटिका No Yes Yes Yes No Yes
ओबेरोन Yes Yes Yes Yes No No
पर्ल No Yes Yes Yes No No
पीएचपी No Yes Yes Fall-through No No
पास्कल, ऑब्जेक्ट पास्कल(डेल्फी) Yes Yes Unneeded Yes No No
पाइथन No Yes Yes No No Yes
क्वीकबेसिक Yes Yes Yes Yes No No
रूबी Yes Yes Yes Yes No Yes[H]
रस्ट No Yes Yes Unneeded No Yes
स्काला No Yes Unneeded[C] Fall-through[citation needed] No Yes
एसक्यूएल Yes[F] Yes Yes Yes[F] No No
स्विफ्ट No Yes Yes Yes No Yes
टीसीएल No Yes Yes Yes No Yes
विज़ुअल बेसिक, क्लासिक Yes Yes Yes Yes No No
विज़ुअल बेसिक .NET Yes Yes Yes Yes No No
विंडोज पॉवरशेल No Yes Yes Fall-through No No
  1. ^ यह पैटर्न मिलान को प्रोग्रामिंग भाषा में एक विशिष्ट सशर्त निर्माण के रूप में संदर्भित करता है - मात्र स्ट्रिंग पैटर्न मिलान समर्थन के विपरीत, जैसे नियमित अभिव्यक्ति समर्थन।
  2. 1 2 प्रीप्रोसेसर उप-भाषा में एक #ELIF निर्देश का उपयोग किया जाता है जिसका उपयोग संकलन से पहले कोड को संशोधित करने के लिए किया जाता है; और सम्मिलित करें अन्य फाइलें।
  3. 1 2 3 4 5 6 भाषाओं के C परिवार में, और कोबोल और हास्केल में प्रायः सामना किया जाने वाला else if, एक भाषा विशेषता नहीं है, परन्तु एक विशेष के साथ संयुक्त और स्वतंत्र if if else कथनों का एक सेट है स्रोत कोड लेआउट। यद्यपि, इसका अर्थ यह भी है कि इन भाषाओं में एक अलग else-if निर्माण की निश्चित आवश्यकता नहीं है।
  4. 1 2 हास्केल और F# में, एक अलग स्थिर विकल्प निर्माण अनावश्यक है, क्योंकि वही कार्य पैटर्न मिलान के साथ किया जा सकता है।
  5. ^ रूबी <कोड>केस</कोड> निर्माण में, रेगुलर एक्सप्रेशन मिलान उपलब्ध सशर्त प्रवाह-नियंत्रण विकल्पों में से एक है। उदाहरण के लिए देखेंthis ढेर अतिप्रवाह प्रश्न।
  6. 1 2 SQL में दो समान संरचनाएं हैं जो दोनों भूमिकाओं को पूरा करती हैं, दोनों को SQL-92 में प्रस्तावित किया गया है। एक "खोज CASE" अभिव्यक्ति CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END if ... else की तरह काम करता है अगर ... और, जबकि एक "सरल CASE" अभिव्यक्ति: CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END काम करता है एक स्विच कथन के प्रकार। विवरण और उदाहरणों के लिए केस (एसक्यूएल) देखें।
  7. ^ फोरट्रान 90 में अंकगणित if अप्रचलित है।
  8. ^ रुबी 3.0 में पैटर्न मिलान जोड़ा गया था।[16] कुछ पैटर्न मिलान वाले निर्माण अभी भी प्रायोगिक हैं।


यह भी देखें

संदर्भ

  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.


बाहरी संबंध