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

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

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

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

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

अगर (बूलियन स्थिति) तब (परिणामस्वरूप) अन्य (विकल्प) अगर अंत

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

अल्गोल परिवार
ALGOL 60 और ALGOL परिवार के कुछ अन्य सदस्य अनुमति देते हैं  एक अभिव्यक्ति के रूप में:  myvariable := यदि x > 20 तो 1 अन्य 2 

लिस्प बोलियां
लिस्प की बोलियों में (प्रोग्रामिंग भाषा)- स्कीम (प्रोग्रामिंग लैंग्वेज), रैकेट (प्रोग्रामिंग भाषा) और सामान्य लिस्प– जिनमें से पहला ALGOL से काफी हद तक प्रेरित था: <वाक्यविन्यास लैंग = योजना> (myvariable परिभाषित करें (यदि (> x 12) 1 2)); 'x' के मान के आधार पर 'myvariable' को 1 या 2 असाइन करता है 
 * योजना

<वाक्यविन्यास प्रकाश लैंग = लिस्प> (चलो ((x 10)) (setq myvariable (यदि (> x 12) 2 4))); 2 को 'myvariable' असाइन करता है 
 * सामान्य लिस्प

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

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

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

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

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

छोटा बेसिक
<वाक्यविन्यास लैंग = vbnet> एक्स = टेक्स्टविंडो। रीडनंबर यदि (x > 10) तब TextWindow.WriteLine (मेरे चर का नाम 'फू' है।) अन्य TextWindow.WriteLine (मेरे चर का नाम 'बार' है।) अगर अंत 

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

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

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

उपरोक्त उदाहरण में फ़ंक्शन को कॉल करने से पहले स्थिति का मूल्यांकन नहीं किया जाता है। इसके बजाय, के कार्यान्वयन  फ़ंक्शन एक स्ट्रिंग मान के रूप में स्थिति प्राप्त करता है और कॉलर्स स्कोप में अभिव्यक्ति के रूप में इस स्ट्रिंग का मूल्यांकन करने के लिए ज़िम्मेदार है। ऐसा व्यवहार उपयोग करने से संभव है  और   आदेश:
 * Uplevel Tcl प्रक्रियाओं के रूप में नए नियंत्रण निर्माणों को लागू करना संभव बनाता है (उदाहरण के लिए, Tcl प्रक्रिया के रूप में निर्माण को लागू करने के लिए uplevel का उपयोग किया जा सकता है)।

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

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

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

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

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

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

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

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

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

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

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

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

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

ऐसी प्रणाली में जहां संख्याओं को परिभाषा के बिना इस्तेमाल किया जा सकता है (जैसे लिस्प, पारंपरिक पेपर गणित, आदि), उपरोक्त को नीचे एक बंद के रूप में व्यक्त किया जा सकता है: <वाक्यविन्यास प्रकाश लैंग = लिस्प> ((λसत्य। λअसत्य। λयदितोअन्यथा। (यदिफिरअन्यथा सत्य 2 3) )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))  यहाँ, True, False, और ifTheNelse अपनी-अपनी परिभाषाओं से बंधे हैं जो उनके ब्लॉक के अंत में उनके दायरे में पारित हो जाते हैं।

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

पहला उदाहरण दिखाता है कि पहली शाखा ली जा रही है, जबकि दूसरा उदाहरण दिखाता है कि दूसरी शाखा ली जा रही है। <वाक्यविन्यास प्रकाश लैंग = लिस्प> ((λसत्य। λअसत्य। λयदितोअन्यथा। (यदि तबअन्य सत्य (λFirstBranch. FirstBranch) (λSecondBranch. SecondBranch)) )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

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

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

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

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

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

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

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

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

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

1. This refers to pattern matching as a distinct conditional construct in the programming language – as opposed to mere string pattern matching support, such as regular expression support.

2. An #ELIF directive is used in the preprocessor sub-language that is used to modify the code before compilation; and to include other files.

3. The often-encountered in the C family of languages, and in COBOL and Haskell, is not a language feature but a set of nested and independent if then else statements combined with a particular source code layout. However, this also means that a distinct else–if construct is not really needed in these languages.

4. In Haskell and F#, a separate constant choice construct is unneeded, because the same task can be done with pattern matching.

5. In a Ruby construct, regular expression matching is among the conditional flow-control alternatives available. For an example, see this Stack Overflow question.

6. SQL has two similar constructs that fulfill both roles, both introduced in SQL-92. A "searched " expression CASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt END works like, whereas a "simple " expression: CASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END works like a switch statement. For details and examples see Case (SQL).

7. Arithmetic is obsolescent in Fortran 90.

8. Pattern matching was added in Ruby 3.0. Some pattern matching constructs are still experimental.

यह भी देखें

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

बाहरी संबंध

 * IF NOT (ActionScript 3.0) video
 * IF NOT (ActionScript 3.0) video