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

From Vigyanwiki
No edit summary
No edit summary
Line 2: Line 2:
{{Self reference|For Wikipedia's conditional parser functions, see [[सहायता: सशर्त भाव]]}}
{{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|यदि-then-else प्रवाह आरेख]]
[[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(बूलियन शर्त) then
    (परिणामस्वरूप)
(परिणामस्वरूप)
  else
  else
    (विकल्प)
(विकल्प)
  end if
  end if


Line 22: Line 22:


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


=== else if ===
=== else if ===
Line 51: Line 51:


  if शर्त then
  if शर्त then
    ''-- कथन''
  ''-- कथन''
  else शर्त then
  else शर्त then
    ''-- else कथन''
  ''-- else कथन''
  else शर्त then
  else शर्त then
    ''-- और कथन;''
  ''-- और कथन;''
  ...
  ...
  else
  else
    ''-- else कथन;''
  ''-- else कथन;''
  end if;
  end if;


Line 64: Line 64:


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


ऊपर दिए गए उदाहरण में, यदि छूट 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 का भी उपयोग करते हैं, परन्तु रिक्त स्थान, लाइन ब्रेक या दोनों के साथ परिसीमन का विकल्प देते हैं।
ऊपर दिए गए उदाहरण में, यदि छूट 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 का भी उपयोग करते हैं, परन्तु रिक्त स्थान, लाइन ब्रेक या दोनों के साथ परिसीमन का विकल्प देते हैं।


यद्यपि , कई भाषाओं जैसे [[सिमुला (प्रोग्रामिंग भाषा)]], पास्कल (प्रोग्रामिंग भाषा), बीसीपीएल (प्रोग्रामिंग भाषा) और C (प्रोग्रामिंग भाषा) जो सीधे उत्पन्न हुई हैं,   <code>else if</code> निर्माण के लिए यह विशेष वाक्यविन्यास स्थित नहीं है, न ही यह c के कई वाक्यगत व्युत्पन्न में स्थित है, जैसे कि जावा (प्रोग्रामिंग भाषा), ईसीएमएस्क्रिप्ट, और इसी प्रकार। यह काम करता है क्योंकि इन भाषाओं में, कोई भी कथन (इस स्थिति में <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> श्रृंखलाओं को पुनरावर्ती रूप से विश्लेषण और कार्यान्वित करना चाहिए।


यदि सशर्त के अनुक्रम में सभी पद एक अभिव्यक्ति के मान का परीक्षण कर रहे हैं (उदाहरण के लिए, <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-then-else भाव===
===if-then-else भाव===
{{See also|कथन(कंप्यूटर विज्ञान)}}
{{See also|कथन(कंप्यूटर विज्ञान)}}


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


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


<पूर्व>
<पूर्व>
   मायवेरिएबल := if x > 20 then 1 else 2
   मायचर := if x > 20 then 1 else 2
</पूर्व> <!-- Don't place a semicolon at the end of the above ALGOL statement. It is NOT C. -->
</पूर्व> <!-- Don't place a semicolon at the end of the above ALGOL statement. It is NOT C. -->




==== लिस्प भाषिका ====
==== लिस्प भाषिका ====
लिस्प की भाषिका में (प्रोग्रामिंग भाषा)- स्कीम (प्रोग्रामिंग भाषा), [[रैकेट (प्रोग्रामिंग भाषा)]] और [[सामान्य लिस्प]]– जिनमें से प्रथम ऐल्गॉल से अत्यधिक प्रेरित था:
लिस्प की भाषिका में(प्रोग्रामिंग भाषा)- स्कीम(प्रोग्रामिंग भाषा), [[रैकेट (प्रोग्रामिंग भाषा)|रैकेट(प्रोग्रामिंग भाषा)]] और [[सामान्य लिस्प]]– जिनमें से प्रथम ऐल्गॉल से अत्यधिक प्रेरित था:
<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
;; योजना
;; योजना
(मायवेरिएबल  परिभाषित करें (if (> x 12) 1 2)); 'x' के मान के आधार पर 'मायवेरिएबल ' को 1 या 2 असाइन करता है
(मायचर परिभाषित करें(if(> x 12) 1 2)); 'x' के मान के आधार पर 'मायचर ' को 1 या 2 असाइन करता है
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


<वाक्यविन्यास प्रकाश लैंग = लिस्प>
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
;; सामान्य लिस्प
;; सामान्य लिस्प
(चलो ((x 10))
(चलो((x 10))
  (setq मायवेरिएबल  (if (> x 12) 2 4))); 2 को 'मायवेरिएबल ' असाइन करता है
(setq मायचर(if(> x 12) 2 4))); 2 को 'मायचर ' असाइन करता है
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


<वाक्यविन्यास लैंग = हैकेल>
<वाक्यविन्यास लैंग = हैकेल>


if' :: बूल -> a -> a -> ए
if' :: बूल -> a -> a -> ए
if' true x _ = x
if' true x _ = x


if' false _ y = y
if' false _ y = y
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


<code>condition ? evaluated-when-true : evaluated-when-false</code>
<code>condition ? evaluated-when-true : evaluated-when-false</code>


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


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


माय_वेरिएबल = x > 10 ? foo : bar; // c -जैसी भाषाओं में
माय_चर = x > 10 ? foo : bar; // c -जैसी भाषाओं में


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


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


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


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


if (x> 10)
if(x> 10)
    माय_वेरिएबल = foo;
  माय_चर = foo;
else
else
    माय_वेरिएबल = bar;
  माय_चर = bar;
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 148: Line 148:
<वाक्यविन्यास लैंग = vbnet>
<वाक्यविन्यास लैंग = vbnet>


x = टेक्स्टविंडो। रीडसंख्या ()
x = टेक्स्टविंडो। रीडसंख्या()


if (x > 10) then
if(x > 10) then
    TextWindow.WriteLine (मेरे वेरिएबल का नाम 'foo' है।)
  TextWindow.WriteLine(मेरे चर का नाम 'foo' है।)
else
else
    TextWindow.WriteLine (मेरे वेरिएबल का नाम 'bar' है।)
  TextWindow.WriteLine(मेरे चर का नाम 'bar' है।)
end if
end if


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


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


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


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


<वाक्यविन्यास लैंग = टीसीएल>
<वाक्यविन्यास लैंग = टीसीएल>
Line 174: Line 174:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


उपरोक्त उदाहरण में प्रकार्य को कॉल करने से पूर्व   कारक का मूल्यांकन नहीं किया जाता है। इसके अतिरिक्त, <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>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>uplevel</code> और <code>expr</code> कमांड का उपयोग करने से संभव है:
: 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>
: 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> निश्चित एक प्रकार्य है यह एक मान भी देता है:
क्योंकि <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>
: कमांड से पुनरावृत्ति मूल्य उस बॉडी स्क्रिप्ट का परिणाम है जिसे निष्पादित किया गया था, या एक रिक्त स्ट्रिंग 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> सदैव एक अभिव्यक्ति है। यह जो भी शाखा निष्पादित की जाती है, या इकाई प्रकार के मूल्य का मूल्यांकन करता है <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>
रस्ट में(प्रोग्रामिंग भाषा), <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>


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


// x के मान के आधार पर माय_वेरिएबल को कुछ मान असाइन करें
// x के मान के आधार पर माय_चर को कुछ मान असाइन करें


माना माय_वेरिएबल = if x > 20 {
माना माय_चर = if x > 20 {
    1
  1
} else {
} else {
    2
  2
};
};


// यह संस्करण संकलित नहीं होगा क्योंकि 1 और () के विभिन्न प्रकार हैं
// यह संस्करण संकलित नहीं होगा क्योंकि 1 और() के विभिन्न प्रकार हैं


माना माय_वेरिएबल = if x > 20 {
माना माय_चर = if x > 20 {
    1
  1
};
};


// आवश्यकता   न होने पर मूल्यों को छोड़ा जा सकता है
// आवश्यकता न होने पर मूल्यों को छोड़ा जा सकता है
if x> 20 {
if x> 20 {
    Println! (x 20 से अधिक है);
  Println!(x 20 से अधिक है);
}
}


Line 211: Line 211:


=== अंकगणित if ===
=== अंकगणित if ===
[[फोरट्रान 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>
[[फोरट्रान 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
if(ई) लेबल 1, लेबल 2, लेबल 3


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


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


<वाक्यविन्यास लैंग = फोरट्रान>
<वाक्यविन्यास लैंग = फोरट्रान>


IF (e.LT. 0) GOTO लेबल1
IF(e.LT. 0) GOTO लेबल1


if (ई। ईक्यू। 0) गोटो लेबल2
if(ई। ईक्यू। 0) गोटो लेबल2


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


[[आईबीएम 704]] कंप्यूटर पर फोरट्रान के मूल कार्यान्वयन में यह एकमात्र सशर्त नियंत्रण कथन था। उस कंप्यूटर पर टेस्ट-एंड-शाखा ऑप-कोड में उन तीन अवस्थाओं के लिए तीन पते थे। else कंप्यूटरों में पिछले अंकगणितीय परिचालनों से जुड़े सकारात्मक, शून्य, नकारात्मक, सम, अतिप्रवाह, कैरी जैसे फ्लैग रजिस्टर होंगे और 'शाखा यदि संचायक नकारात्मक' तो 'शाखा यदि संचायक शून्य' या इसी प्रकार के निर्देशों का उपयोग करेंगे। ध्यान दें कि अभिव्यक्ति का मूल्यांकन मात्र एक बार किया जाता है, और पूर्णांक अंकगणित जैसे स्थितियों में जहां अतिप्रवाह हो सकता है, अतिप्रवाह या कैरी फ्लैग पर भी विचार किया जाएगा।
[[आईबीएम 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>
<वाक्यविन्यास लैंग = स्मॉलटॉक>
<वाक्यविन्यास लैंग = स्मॉलटॉक>
वार = शर्त
वार = शर्त
    ifTrue: ['foo']
  ifTrue: ['foo']
    ifFalse: ['bar']
  ifFalse: ['bar']
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


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


if (गणित.यादृच्छिक () <0.5) {
if(गणित.यादृच्छिक() <0.5) {
   कंसोल.लॉग (आपको हेड्स मिल गए!);
   कंसोल.लॉग(आपको हेड्स मिल गए!);
} else {
} else {
   कंसोल.लॉग (आपको पूंछ मिल गई!);
   कंसोल.लॉग(आपको पूंछ मिल गई!);
}
}


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


उपरोक्त उदाहरण <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 कथनों को उनके पूर्ववर्ती कथन के धनु कोष्ठक के बाद जितनी बार आवश्यक हो, उतनी बार श्रृंखलित किया जा सकता है, जैसा कि नीचे दिखाया गया है:
उपरोक्त उदाहरण <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 कथनों को उनके पूर्ववर्ती कथन के धनु कोष्ठक के बाद जितनी बार आवश्यक हो, उतनी बार श्रृंखलित किया जा सकता है, जैसा कि नीचे दिखाया गया है:


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


वर x = गणित यादृच्छिक ();
वर x = गणित यादृच्छिक();


if (x <1/3) {
if(x <1/3) {
   कंसोल.लॉग (एक व्यक्ति जीता!);
   कंसोल.लॉग(एक व्यक्ति जीता!);
} और if (x <2/3) {
} और if(x <2/3) {
   कंसोल.लॉग (दो लोग जीते!);
   कंसोल.लॉग(दो लोग जीते!);
} else {
} else {
   कंसोल.लॉग (यह तीन प्रकार से टाई है!);
   कंसोल.लॉग(यह तीन प्रकार से टाई है!);
}
}


Line 277: Line 277:
  true = λx. λy. x
  true = λx. λy. x
  false = λx. λy. y
  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 कॉल किए बिना प्रकार्य ऑब्जेक्ट को वापस कर देगा।


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


<वाक्यविन्यास प्रकाश लैंग = लिस्प>
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
  ((λtrue। λfalse। λifthenelseथा।
  ((λtrue। λfalse। λifthenelse।
    (यदिफिरelseथा true 2 3)
(यदिthenelse 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))
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 293: Line 293:
यहाँ, True, False, और ifTheNelse अपनी-अपनी परिभाषाओं से बंधे हैं जो उनके ब्लॉक के end में उनके क्षेत्र में पारित हो जाते हैं।
यहाँ, True, False, और ifTheNelse अपनी-अपनी परिभाषाओं से बंधे हैं जो उनके ब्लॉक के end में उनके क्षेत्र में पारित हो जाते हैं।


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


<वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>
<वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>
  वर संगणना परिणाम = ((_true => _false => _ifThenElse =>
  वर संगणना परिणाम =((_true => _false => _ifThenElse =>
    _ifThenelse(_true)(2)(3)
  _ifThenelse(_true)(2)(3)
  ) (x => y => x) (x => y => y) ( c => x => y => c (x) (y)));
  )(x => y => x)(x => y => y)( c => x => y => c(x)(y)));
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 304: Line 304:


<वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>
<वाक्यविन्यास प्रकाश लैंग = जावास्क्रिप्ट>
  वर संगणना परिणाम = ((_true, _false, _ifThenElse) =>
  वर संगणना परिणाम =((_true, _false, _ifThenElse) =>
    _ifThenelse(_true, 2, 3)
  _ifThenelse(_true, 2, 3)
  ) ((x, y) => x, (x, y) => y, ( c , x, y) => c (x, y));
  )((x, y) => x,(x, y) => y,( c, x, y) => c(x, y));
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


प्रथम उदाहरण दिखाता है कि प्रथम शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है।
प्रथम उदाहरण दिखाता है कि प्रथम शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है।
Line 315: Line 315:
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
  ((λtrue। λfalse। λifthenelse
  ((λtrue। λfalse। λifthenelse
    (if thenelse true (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch))
(if thenelse 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))


  ((λtrue। λfalse। λifthenelse
  ((λtrue। λfalse। λifthenelse
    (ifफिरelseथा false (λ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))
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


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


== कारक और स्विच कथन ==
== कारक और स्विच कथन ==
Line 331: Line 331:
{{Main|स्विच कथन}}
{{Main|स्विच कथन}}


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


{| class="wikitable"
{| class="wikitable"
Line 371: Line 371:
{{Main|पैटर्न मिलान}}
{{Main|पैटर्न मिलान}}


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


<वाक्यविन्यास प्रकाश लैंग = ओकैमल>
<वाक्यविन्यास प्रकाश लैंग = ओकैमल>
फलों का मिलान करें
फलों का मिलान करें


| सेब -> कुक पाई
| सेब -> कुक पाई
| नारियल -> dango_mochi पकाएं
| नारियल -> dango_mochi पकाएं


Line 383: Line 385:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


नक्शा _ [] = []
नक्शा _ [] = []


नक्शा एफ (एच: टी) = एफ एच: नक्शा एफ टी
नक्शा एफ(एच: टी) = एफ एच: नक्शा एफ टी


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


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


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


== हैश-आधारित सशर्त ==
== हैश-आधारित सशर्त ==
ऐसी प्रोग्रामिंग भाषाओं में जिनमें साहवेरिएबल्य सरणियाँ या तुलनीय डेटा संरचनाएँ हैं, जैसे कि पायथन (प्रोग्रामिंग भाषा), पर्ल, पीएचपी या [[उद्देश्य सी|उद्देश्य 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>
ऐसी प्रोग्रामिंग भाषाओं में जिनमें साहचर्य सरणियाँ या तुलनीय डेटा संरचनाएँ हैं, जैसे कि पायथन(प्रोग्रामिंग भाषा), पर्ल, पीएचपी या [[उद्देश्य सी|ऑब्जेक्टिव 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>
<वाक्यविन्यास लैंग = अजगर>
 
पालतू जानवर = इनपुट (उस पालतू जानवर का प्रकार दर्ज करें जिसे आप नाम देना चाहते हैं:)
<वाक्यविन्यास लैंग = पायथन>
 
पालतू जानवर = इनपुट(उस पालतू जानवर का प्रकार दर्ज करें जिसे आप नाम देना चाहते हैं:)
 
ज्ञात_पेट्स = {
ज्ञात_पेट्स = {
    कुत्ता : फिदो,
  कुत्ता : फिदो,
    बिल्ली : म्याऊं,
  बिल्ली : म्याऊं,
    पक्षी : ट्वीटी,
  पक्षी : ट्वीटी,
}
}
my_name = ज्ञात_पालतू जानवर [पालतू जानवर]
my_name = ज्ञात_पालतू जानवर [पालतू जानवर]
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


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


== चॉइस प्रणाली क्रॉस रेफरेंस ==
== चयन प्रणाली प्रति संदर्भ ==


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


{| 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 430: Line 439:
! else–if
! else–if
|-
|-
|{{rh}}| [[Ada (programming language)|Ada]]
| {{rh}} class="table-rh" | [[Ada (programming language)|ऐडा]]  
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 438: Line 447:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[APL (programming language)|APL]]
| {{rh}} class="table-rh" | [[APL (programming language)|एपीएल]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 446: Line 455:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Bash (Unix shell)|Bash shell]]
| {{rh}} class="table-rh" | [[Bash (Unix shell)|बैश शैल]]  
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 454: Line 463:
| {{yes}}
| {{yes}}
|-  
|-  
|{{rh}}| [[C (programming language)|C]], [[C++]]
| {{rh}} class="table-rh" | [[C (programming language)|C]], [[C++]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 462: Line 471:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[C Sharp (programming language)|C#]]
| {{rh}} class="table-rh" | [[C Sharp (programming language)|C#]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 470: Line 479:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[COBOL]]
| {{rh}} class="table-rh" | [[COBOL|कोबोल]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 478: Line 487:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Eiffel (programming language)|Eiffel]]
| {{rh}} class="table-rh" | [[Eiffel (programming language)|एफिल]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 486: Line 495:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[F Sharp (programming language)|F#]]
| {{rh}} class="table-rh" | [[F Sharp (programming language)|F#]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 494: Line 503:
| {{yes}}
| {{yes}}
|-  
|-  
|{{rh}}| [[Fortran 90]]
| {{rh}} class="table-rh" | [[Fortran 90|फोरट्रान90]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 502: Line 511:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Go (programming language)|Go]]
| {{rh}} class="table-rh" | [[Go (programming language)|गो]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 510: Line 519:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Haskell (programming language)|Haskell]]
| {{rh}} class="table-rh" | [[Haskell (programming language)|हास्केल]]
| {{yes}}
| {{yes}}
| {{yes2|Needed}}
| {{yes2|Needed}}
Line 518: Line 527:
| {{yes}}
| {{yes}}
|-  
|-  
|{{rh}}| [[Java (programming language)|Java]]  
| {{rh}} class="table-rh" | [[Java (programming language)|जावा]]  
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 526: Line 535:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[ECMAScript]] ([[JavaScript]])
| {{rh}} class="table-rh" | [[ECMAScript|ईसीएमएस्क्रिप्ट]]([[JavaScript|जावास्क्रिप्ट]])
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 534: Line 543:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Mathematica]]
| {{rh}} class="table-rh" | [[Mathematica|मेथेमेटिका]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 542: Line 551:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Oberon (programming language)|Oberon]]
| {{rh}} class="table-rh" | [[Oberon (programming language)|ओबेरोन]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 550: Line 559:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Perl]]
| {{rh}} class="table-rh" | [[Perl|पर्ल]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 558: Line 567:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[PHP]]
| {{rh}} class="table-rh" | [[PHP|पीएचपी]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 566: Line 575:
| {{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 574: Line 583:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Python (programming language)|Python]]
| {{rh}} class="table-rh" | [[Python (programming language)|पाइथन]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 582: Line 591:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[QuickBASIC|Quickबेसिक]]  
| {{rh}} class="table-rh" | [[QuickBASIC|क्वीकबेसिक]]  
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 590: Line 599:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Ruby (programming language)|Ruby]]
| {{rh}} class="table-rh" | [[Ruby (programming language)|रूबी]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 598: Line 607:
| {{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 606: Line 615:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Scala (programming language)|Scala]]
| {{rh}} class="table-rh" | [[Scala (programming language)|स्काला]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 614: Line 623:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[SQL]]
| {{rh}} class="table-rh" | [[SQL|एसक्यूएल]]
| {{yes}}{{ref label|SQL|F|1}}
| {{yes}}{{ref label|SQL|F|1}}
| {{yes}}
| {{yes}}
Line 622: Line 631:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Swift (programming language)|Swift]]
| {{rh}} class="table-rh" | [[Swift (programming language)|स्विफ्ट]]  
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 630: Line 639:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Tcl|टीसीएल]]
| {{rh}} class="table-rh" | [[Tcl|टीसीएल]]
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 638: Line 647:
| {{yes}}
| {{yes}}
|-
|-
|{{rh}}| [[Visual Basic|Visual बेसिक]] , classic
| {{rh}} class="table-rh" | [[Visual Basic|विज़ुअल बेसिक]], क्लासिक
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 646: Line 655:
| {{no}}
| {{no}}
|-
|-
|{{rh}}| [[Visual Basic .NET|Visual बेसिक .NET]]
| {{rh}} class="table-rh" | [[Visual Basic .NET|विज़ुअल बेसिक .NET]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
Line 654: Line 663:
| {{no}}
| {{no}}
|-  
|-  
|{{rh}}| [[Windows PowerShell]]  
| {{rh}} class="table-rh" | [[Windows PowerShell|विंडोज पॉवरशेल]]  
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
Line 663: Line 672:
|}
|}
{{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 692: Line 700:
{{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: स्यूडोकोड के उदाहरण वाले लेख]] [[Category: उदाहरण सी कोड वाले लेख]] [[Category: पास्कल कोड उदाहरण के साथ लेख]] [[Category: उदाहरण हास्केल कोड वाले लेख]] [[Category: सशर्त निर्माण | सशर्त निर्माण ]] [[Category: लेख उदाहरण के साथ पायथन (प्रोग्रामिंग भाषा) कोड]]  

Revision as of 14:31, 26 February 2023

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

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

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

शब्दावली

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

If–then(–else)

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

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

if स्टॉक = 0 then
 संदेश = नया स्टॉक ऑर्डर करें
else
 संदेश = स्टॉक है
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 s 2

या

if a then(if b then s else s 2)

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

else if

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

if शर्त then
 -- कथन
else शर्त then
 -- else कथन
else शर्त then
 -- और कथन;
...
else
 -- else कथन;
end if;

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

if छूट <11% then
 प्रिंट(आपको $30 का भुगतान करना होगा)
और छूट <21% then
 प्रिंट(आपको $20 का भुगतान करना होगा)
और छूट <31% then
 प्रिंट(आपको $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 को अभिव्यक्ति के रूप में अनुमति देते हैं:

<पूर्व>

 मायचर  := if x > 20 then 1 else 2

</पूर्व>


लिस्प भाषिका

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

योजना

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

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

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

(चलो((x 10))

(setq मायचर(if(> x 12) 2 4))); 2 को 'मायचर ' असाइन करता है

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

हास्केल

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

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

<वाक्यविन्यास लैंग = हैकेल>

if' :: बूल -> a -> a -> ए if' true x _ = x

if' false _ y = y </वाक्यविन्यास हाइलाइट>

c जैसी भाषाएं

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

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

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

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

माय_चर = x > 10 ? foo : bar; // c -जैसी भाषाओं में

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

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

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

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

if(x> 10)

 माय_चर = foo;

else

 माय_चर = bar;

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

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

छोटा बेसिक

<वाक्यविन्यास लैंग = vbnet>

x = टेक्स्टविंडो। रीडसंख्या()

if(x > 10) then

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

else

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

end if

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

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

विजुअल बेसिक

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

टीसीएल

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

<वाक्यविन्यास लैंग = टीसीएल>

if {$x > 10} {

 put foo!

}

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

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

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

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

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

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

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


रस्ट

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

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

// x के मान के आधार पर माय_चर को कुछ मान असाइन करें

माना माय_चर = if x > 20 {

 1

} else {

 2

};

// यह संस्करण संकलित नहीं होगा क्योंकि 1 और() के विभिन्न प्रकार हैं

माना माय_चर = if x > 20 {

 1

};

// आवश्यकता न होने पर मूल्यों को छोड़ा जा सकता है if x> 20 {

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

}

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

अंकगणित if

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

<वाक्यविन्यास लैंग = फोरट्रान>

if(ई) लेबल 1, लेबल 2, लेबल 3

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

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

<वाक्यविन्यास लैंग = फोरट्रान>

IF(e.LT. 0) GOTO लेबल1

if(ई। ईक्यू। 0) गोटो लेबल2

गोटो लेबल3

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

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

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

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

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

 ifTrue: ['foo']
 ifFalse: ['bar']

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

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

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

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

if(गणित.यादृच्छिक() <0.5) {

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

} else {

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

}

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

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

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

वर x = गणित यादृच्छिक();

if(x <1/3) {

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

} और if(x <2/3) {

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

} else {

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

}

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

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

लैम्ब्डा गणना में, यदि-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।
(यदिthenelse true 2 3)
)(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

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

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

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

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

वर संगणना परिणाम =((_true => _false => _ifThenElse =>
 _ifThenelse(_true)(2)(3)
)(x => y => x)(x => y => y)( c => x => y => c(x)(y)));

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

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

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

वर संगणना परिणाम =((_true, _false, _ifThenElse) =>
 _ifThenelse(_true, 2, 3)
)((x, y) => x,(x, y) => y,( c, x, y) => c(x, y));

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

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

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

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

((λtrue। λfalse। λifthenelse
(if thenelse 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 भाषा में लिखा गया एक सरल उदाहरण है:

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

फलों का मिलान करें

| सेब -> कुक पाई

| नारियल -> dango_mochi पकाएं

| केला -> मिश्रण ;;

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

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

<वाक्यविन्यास लैंग = हैकेल>

नक्शा _ [] = []

नक्शा एफ(एच: टी) = एफ एच: नक्शा एफ टी

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

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

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

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

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

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

पालतू जानवर = इनपुट(उस पालतू जानवर का प्रकार दर्ज करें जिसे आप नाम देना चाहते हैं:)

ज्ञात_पेट्स = {

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

}

my_name = ज्ञात_पालतू जानवर [पालतू जानवर]

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

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

कथन

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

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

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

प्रोग्रामिंग भाषा संरचित 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.


बाहरी संबंध