कथन बदलें (स्विच स्टेटमेंट)

From Vigyanwiki
Revision as of 09:20, 21 July 2023 by alpha>Abhishekk (minor changes)

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

स्विच स्टेटमेंट कुछ हद तक C/C++, C#, विज़ुअल बेसिक .NET, Java जैसी प्रोग्रामिंग भाषाओं में उपयोग किए जाने वाले if स्टेटमेंट के समान कार्य करते हैं और अधिकांश उच्च स्तरीय अनिवार्य प्रोग्रामिंग भाषाओं जैसे पास्कल, Ada, C/C++, C#,[1]: 157–167   विज़ुअल बेसिक .NET, Java,[2]: 157–167  और कई अन्य प्रकार की भाषा में मौजूद हैं, जिनमें switch, case, select या inspectजैसे कीवर्ड का उपयोग किया जाता है।

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

Switch statement in C
switch (age) {
  case 1:  printf("You're one.");            break;
  case 2:  printf("You're two.");            break;
  case 3:  printf("You're three.");
  case 4:  printf("You're three or four.");  break;
  default: printf("You're not 1, 2, 3 or 4!");
}

इतिहास

अपने 1952 के पाठ इंट्रोडक्शन टू मेटामैथेमेटिक्स में, स्टीफन क्लेन ने औपचारिक रूप से साबित कर दिया कि CASE फ़ंक्शन (IF-THEN-ELSE फ़ंक्शन इसका सबसे सरल रूप है) एक आदिम पुनरावर्ती फ़ंक्शन है, जहां वह निम्नलिखित तरीके से definition by cases को परिभाषित करता है:

"#F. The function φ defined thus
φ(x1 , ... , xn ) =
  • φ1(x1 , ... , xn ) if Q1(x1 , ... , xn ),
  • . . . . . . . . . . . .
  • φm(x1 , ... , xn ) if Qm(x1 , ... , xn ),
  • φm+1(x1 , ... , xn ) otherwise, जहां Q1 , ... , Qm परस्पर अनन्य विधेय हैं (या φ(x1 , ... , xn) का मान लागू होने वाले पहले खंड द्वारा दिया जाएगा) φ1, ..., φm+1, Q1, ..., Qm+1 में आदिम पुनरावर्ती है।[2]

क्लेन बूलियन-जैसे पुनरावर्ती कार्यों "साइन-ऑफ़" sg( ) और "नॉट साइन ऑफ़" ~sg( ) के संदर्भ में इसका प्रमाण प्रदान करता है (क्लीन 1952:222-223); यदि इसका इनपुट सकारात्मक है तो पहला 1 लौटाता है और यदि इसका इनपुट नकारात्मक है तो −1 लौटाता है।

बूलोस-बर्गेस-जेफरी ने अतिरिक्त अवलोकन किया कि "मामलों द्वारा परिभाषा" पारस्परिक रूप से अनन्य और सामूहिक रूप से संपूर्ण होनी चाहिए। वे भी इस फ़ंक्शन की आदिम पुनरावर्तीता का प्रमाण देते हैं (बूलोस-बर्गेस-जेफरी 2002:74-75)।

IF-THEN-ELSE मैकार्थी औपचारिकता का आधार है: इसका उपयोग आदिम रिकर्सन और म्यू-ऑपरेटर दोनों को प्रतिस्थापित करता है।

विशिष्ट वाक्यविन्यास

अधिकांश भाषाओं में, प्रोग्रामर एक या दो कीवर्ड का उपयोग करके कई व्यक्तिगत लाइनों में एक स्विच स्टेटमेंट लिखते हैं। एक सामान्य वाक्यविन्यास में शामिल हैं:

  • पहला select, उसके बाद एक अभिव्यक्ति जिसे अक्सर स्विच स्टेटमेंट की नियंत्रण अभिव्यक्ति या नियंत्रण चर के रूप में संदर्भित किया जाता है
  • वास्तविक मामलों (मूल्यों) को परिभाषित करने वाली बाद की पंक्तियाँ, मिलान होने पर निष्पादन के लिए बयानों के संगत अनुक्रम के साथ
  • फॉलथ्रू व्यवहार वाली भाषाओं में, break स्टेटमेंट आम तौर पर उक्त स्टेटमेंट को समाप्त करने के लिए case स्टेटमेंट का अनुसरण करता है। [वेल्स]
  • कुछ भाषाओं में, जैसे, पीएल/आई, नियंत्रण अभिव्यक्ति वैकल्पिक है; यदि कोई नियंत्रण अभिव्यक्ति नहीं है, तो प्रत्येक विकल्प एक बूलियन अभिव्यक्ति वाले WHENक्लॉज से शुरू होता है और पहले मामले के लिए एक मिलान होता है जिसके लिए वह अभिव्यक्ति सही मूल्यांकन करती है। यह उपयोग कुछ अन्य भाषाओं में if/then/elseif/else संरचनाओं के समान है, उदाहरण के लिए, पर्ल
  • कुछ भाषाओं में, उदाहरण के लिए, Rexx, किसी भी नियंत्रण अभिव्यक्ति की अनुमति नहीं है और प्रत्येक विकल्प एक बूलियन अभिव्यक्ति वाले WHEN खंड से शुरू होता है और पहले मामले के लिए एक मिलान होता है जिसके लिए वह अभिव्यक्ति सत्य का मूल्यांकन करती है।

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

एक वैकल्पिक डिफ़ॉल्ट मामले की भी आमतौर पर अनुमति होती है, जो default, otherwise, या elseकीवर्ड द्वारा निर्दिष्ट होता है। यह तब निष्पादित होता है जब कोई अन्य मामला नियंत्रण अभिव्यक्ति से मेल नहीं खाता है। कुछ भाषाओं में, जैसे कि सी, यदि कोई भी मामला मेल नहीं खाता है और default को छोड़ दिया जाता है तो switch स्टेटमेंट बस बाहर निकल जाता है। अन्य में, जैसे पीएल/आई में, एक त्रुटि उत्पन्न होती है।

शब्दार्थ

शब्दार्थ की दृष्टि से, स्विच कथन के दो मुख्य रूप हैं।

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

दूसरा रूप असंरचित स्विच है, जैसा कि सी में है, जहां मामलों को एक ही ब्लॉक के भीतर लेबल के रूप में माना जाता है, और स्विच एक सामान्यीकृत गोटो के रूप में कार्य करता है। इस भेद को फॉलथ्रू के उपचार के रूप में जाना जाता है, जिसे नीचे विस्तार से बताया गया है।

फाल्थ्रू

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

सी भाषा से प्राप्त भाषाएं, और आमतौर पर फोरट्रान की गणना की गई जीओटीओ से प्रभावित भाषाएं, इसके बजाय फॉलथ्रू की सुविधा देती हैं, जहां नियंत्रण मिलान मामले में चला जाता है, और फिर स्रोत पाठ में अगले मामले से जुड़े बयानों के लिए निष्पादन जारी रहता है ("गिरता है") . यह कई मानों को बिना किसी विशेष सिंटैक्स के एक ही बिंदु से मेल खाने की अनुमति देता है: वे बस खाली निकायों के साथ सूचीबद्ध होते हैं। केस बॉडी में कोड के साथ मूल्यों को विशेष रूप से अनुकूलित किया जा सकता है। व्यवहार में, फॉलथ्रू को आम तौर पर मिलान निकाय के अंत में एक break कीवर्ड के साथ रोका जाता है, जो स्विच ब्लॉक के निष्पादन से बाहर निकलता है, लेकिन यदि प्रोग्रामर break स्टेटमेंट डालना भूल जाता है तो यह अनजाने में फॉलथ्रू के कारण बग पैदा कर सकता है। इस प्रकार इसे कई लोगों द्वारा[3] भाषा के मस्से के रूप में देखा जाता है, और कुछ लिंट टूल्स में इसके प्रति चेतावनी दी जाती है। वाक्यात्मक रूप से, मामलों को लेबल के रूप में समझा जाता है, ब्लॉक के रूप में नहीं, और स्विच और break स्टेटमेंट स्पष्ट रूप से नियंत्रण प्रवाह को बदलते हैं। सी से प्रभावित कुछ भाषाएं, जैसे कि जावास्क्रिप्ट, डिफॉल्ट फॉलथ्रू को बरकरार रखती हैं, जबकि अन्य फॉलथ्रू को हटा देती हैं, या केवल विशेष परिस्थितियों में ही इसकी अनुमति देती हैं। सी-परिवार में इस पर उल्लेखनीय विविधताओं में सी# शामिल है, जिसमें सभी ब्लॉकों को break या return के साथ समाप्त किया जाना चाहिए जब तक कि ब्लॉक खाली न हो (यानी फॉलथ्रू का उपयोग कई मान निर्दिष्ट करने के तरीके के रूप में किया जाता है)।

कुछ मामलों में भाषाएँ वैकल्पिक फॉलथ्रू प्रदान करती हैं। उदाहरण के लिए, पर्ल डिफ़ॉल्ट रूप से विफल नहीं होता है, लेकिन एक मामला continue कीवर्ड का उपयोग करके स्पष्ट रूप से ऐसा कर सकता है। यह अनजाने में गिरने से रोकता है लेकिन जब चाहे तब इसकी अनुमति देता है। इसी प्रकार, बैश डिफ़ॉल्ट रूप से ;; के साथ समाप्त होने पर फ़ॉलथ्रू नहीं करता है, लेकिन इसके बजाय ;& या ;;&के साथ फॉलथ्रू[4] की अनुमति देता है।

स्विच स्टेटमेंट का एक उदाहरण जो फ़ॉलथ्रू पर निर्भर करता है वह डफ़ का उपकरण है।

संकलन

ऑप्टिमाइजिंग कंपाइलर जैसे GCC या Clang स्विच स्टेटमेंट को या तो एक ब्रांच टेबल में या फिर केसेस में मौजूद मानों के माध्यम से एक बाइनरी सर्च के रूप में कंपाइल कर सकते हैं।[5] एक ब्रांच टेबल को स्विच स्टेटमेंट को एक छोटे, स्थिर संख्यक निर्देशिका के रूप में कार्यान्वयन करने देता है जिससे कंपेयर को तुलनाओं की सूची से बिना जाना के विभाजन करने के लिए निर्देशिका में से निर्दिष्ट शाखा का निष्पादन करने में सक्षम होता है, जबकि बाइनरी सर्च में केवल लॉगारिदमिक संख्या की तुलना में कम्पेयरिजन होती है, जो स्विच स्टेटमेंट में केसेस की संख्या मापता है।

आम तौर पर, यह पता लगाने का एकमात्र तरीका कि यह अनुकूलन हुआ है या नहीं, वास्तव में कंपाइलर द्वारा उत्पन्न परिणामी असेंबली या मशीन कोड आउटपुट को देखना है।

फायदे और नुकसान

कुछ भाषाओं और प्रोग्रामिंग वातावरणों में, case या switch स्टेटमेंट का उपयोग if else if स्टेटमेंट की समकक्ष श्रृंखला से बेहतर माना जाता है क्योंकि यह है:

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

इसके अतिरिक्त, एक अनुकूलित कार्यान्वयन विकल्प की तुलना में बहुत तेजी से निष्पादित हो सकता है, क्योंकि इसे अक्सर अनुक्रमित शाखा तालिका का उपयोग करके कार्यान्वित किया जाता है।[6] उदाहरण के लिए, एकल वर्ण के मान के आधार पर प्रोग्राम प्रवाह तय करना, यदि सही ढंग से लागू किया जाता है, तो विकल्प की तुलना में काफी अधिक कुशल है, जिससे निर्देश पथ की लंबाई काफी कम हो जाती है। जब इसे इस प्रकार लागू किया जाता है, तो एक स्विच स्टेटमेंट अनिवार्य रूप से एक आदर्श हैश बन जाता है।

नियंत्रण-प्रवाह ग्राफ के संदर्भ में, एक स्विच स्टेटमेंट में दो नोड्स (प्रवेश और निकास) होते हैं, साथ ही प्रत्येक विकल्प के लिए उनके बीच एक किनारा होता है। इसके विपरीत, "यदि...अन्यथा यदि...अन्यथा यदि" कथनों के अनुक्रम में पहले और अंतिम के अलावा प्रत्येक मामले के लिए एक अतिरिक्त नोड होता है, साथ में संगत किनारा भी होता है। इस प्रकार "if" के अनुक्रमों के लिए परिणामी नियंत्रण-प्रवाह ग्राफ़ में कई अधिक नोड्स और लगभग दोगुने किनारे होते हैं, इनमें कोई उपयोगी जानकारी नहीं जोड़ी जाती है। हालाँकि, if स्टेटमेंट्स में सरल शाखाएँ स्विच स्टेटमेंट की जटिल शाखा की तुलना में व्यक्तिगत रूप से वैचारिक रूप से आसान होती हैं। चक्रीय जटिलता के संदर्भ में, यदि k मामले दिए जाएं तो ये दोनों विकल्प इसे k-1 तक बढ़ा देते हैं।

अभिव्यक्ति स्विच करें

स्विच एक्सप्रेशन जावा एसई 12, 19 मार्च 2019 में एक पूर्वावलोकन सुविधा के रूप में पेश किए गए हैं। यहां एक मान वापस करने के लिए संपूर्ण स्विच एक्सप्रेशन का उपयोग किया जा सकता है। केस लेबल का एक नया रूप भी है, case L-> जहां दाईं ओर एक एकल अभिव्यक्ति है। हालाँकि, यह गिरावट को भी रोकता है और इसके लिए आवश्यक है कि मामले विस्तृत हों। जावा एसई 13 में yield स्टेटमेंट पेश किया गया है, और जावा एसई 14 में स्विच एक्सप्रेशन एक मानक भाषा सुविधा बन जाता है।[7][8][9] उदाहरण के लिए:

int ndays = switch(month) {
    case JAN, MAR, MAY, JUL, AUG, OCT, DEC -> 31;
    case APR, JUN, SEP, NOV -> 30;
    case FEB -> {
        if (year % 400 == 0) yield 29;
        else if (year % 100 == 0) yield 28;
        else if (year % 4 == 0) yield 29;
        else yield 28; }
};

वैकल्पिक उपयोग

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

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

PHP

उदाहरण के लिए, PHPमें, एक स्थिरांक को जांचने के लिए "चर" के रूप में उपयोग किया जा सकता है, और पहला केस स्टेटमेंट जो उस स्थिरांक का मूल्यांकन करता है, निष्पादित किया जाएगा:

switch (true) {
    case ($x == 'hello'):
        foo();
        break;
    case ($z == 'howdy'): break;
}
switch (5) {
    case $x: break;
    case $y: break;
}

यह सुविधा कई मानों के विरुद्ध एक चर की तुलना में एक मान के विरुद्ध अनेक चरों की जाँच करने के लिए भी उपयोगी है। COBOL EVALUATE स्टेटमेंट में इस फॉर्म (और अन्य फॉर्म) का भी समर्थन करता है। पीएल/आई के पास SELECT स्टेटमेंट का एक वैकल्पिक रूप है जहां नियंत्रण अभिव्यक्ति पूरी तरह से छोड़ दी जाती है और सत्य का मूल्यांकन करने वाला पहला WHEN निष्पादित किया जाता है।

रूबी

रूबी में, === समानता से निपटने के कारण, कथन का उपयोग चर की कक्षा के परीक्षण के लिए किया जा सकता है:

case input
when Array then puts 'input is an Array!'
when Hash then puts 'input is a Hash!'
end

रूबी एक मान भी लौटाती है जिसे एक वेरिएबल को सौंपा जा सकता है, और वास्तव में case को किसी भी पैरामीटर की आवश्यकता नहीं होती है (कुछ else if की तरह कार्य करते हुए):

catfood =
  case
  when cat.age <= 1
    junior
  when cat.age > 10
    senior
  else
    normal
  end

असेंबलर

असेंबली भाषा में एक स्विच स्टेटमेंट:

switch:
  cmp ah, 00h
  je a
  cmp ah, 01h
  je b
  jmp swtend   ; No cases match or "default" code here
a:
  push ah
  mov al, 'a'
  mov ah, 0Eh
  mov bh, 00h
  int 10h
  pop ah
  jmp swtend   ; Equivalent to "break"
b:
  push ah
  mov al, 'b'
  mov ah, 0Eh
  mov bh, 00h
  int 10h
  pop ah
  jmp swtend   ; Equivalent to "break"
  ...
swtend:


पायथन

पायथन 3.10.6 के लिए, पीईपी 634-636 को स्वीकार किया गया, जिसमें match और case कीवर्ड जोड़े गए।[10][11][12][13] अन्य भाषाओं के विपरीत, पायथन विशेष रूप से पतनशील व्यवहार प्रदर्शित नहीं करता है।

letter = input("Put in a single letter: ").strip()[0].casefold() # first non-whitespace character of the input, lowercase
match letter:
  case 'a' | 'e' | 'i' | 'o' | 'u': # Unlike conditions in if statements, the `or` keyword cannot be used here to differentiate between cases
    print(f"Letter {letter} is a vowel!")
  case 'y':
    print(f"Letter {letter} may be a vowel.)
  case _: # `case _` is equivalent to `default` from C and others
    print(f"Letter {letter} is not a vowel!")

अपवाद हैंडलिंग

कई भाषाएँ अपवाद हैंडलिंग में स्विच स्टेटमेंट के एक रूप को लागू करती हैं, जहाँ यदि किसी ब्लॉक में कोई अपवाद उठाया जाता है, तो अपवाद के आधार पर एक अलग शाखा चुनी जाती है। कुछ मामलों में, यदि कोई अपवाद नहीं उठाया गया है, तो एक डिफ़ॉल्ट शाखा भी मौजूद है। एक प्रारंभिक उदाहरण मॉड्यूल-3 है, जो TRY...EXCEPT सिंटैक्स का उपयोग करता है, जहां प्रत्येक EXCEPT एक मामले को परिभाषित करता है। यह डेल्फ़ी, स्कैला और विज़ुअल बेसिक .NET में भी पाया जाता है।

विकल्प

कथनों को बदलने के कुछ विकल्प हो सकते हैं:

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

लुआ केस/स्विच स्टेटमेंट का समर्थन नहीं करता है।[14] यह लुकअप तकनीक लुआ भाषा में switch स्टेटमेंट को लागू करने का एक तरीका है, जिसमें कोई अंतर्निहित switchनहीं है।[14] कुछ मामलों में, लुकअप टेबल गैर-अनुकूलित switch स्टेटमेंट की तुलना में अधिक कुशल होते हैं क्योंकि कई भाषाएं टेबल लुकअप को अनुकूलित कर सकती हैं, जबकि स्विच स्टेटमेंट को तब तक अनुकूलित नहीं किया जाता है जब तक कि मानों की सीमा कुछ अंतराल के साथ छोटी न हो। हालाँकि, एक गैर-अनुकूलित, गैर-बाइनरी खोज लुकअप लगभग निश्चित रूप से एक गैर-अनुकूलित स्विच या समकक्ष एकाधिक यदि-अन्यथा कथनों की तुलना में धीमा होगा।[citation needed]

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

यह भी देखें

संदर्भ

  1. Bloch, Joshua (2018). "Effective Java: Programming Language Guide" (third ed.). Addison-Wesley. ISBN 978-0134685991.
  2. "Definition by cases", Kleene 1952:229
  3. van der Linden, Peter (1994). Expert C Programming: Deep C Secrets, p. 38. Prentice Hall, Eaglewood Cliffs. ISBN 0131774298.
  4. since version 4.0, released in 2009.
  5. Vlad Lazarenko. From Switch Statement Down to Machine Code
  6. Guntheroth, Kurt (April 27, 2016). अनुकूलित सी++. O'Reilly Media. p. 182. ISBN 9781491922033.
  7. "JEP 325: Switch Expressions (Preview)". openjdk.java.net. Retrieved 2021-04-28.
  8. "JEP 354: Switch Expressions (Second Preview)". openjdk.java.net. Retrieved 2021-04-28.
  9. "JEP 361: Switch Expressions". openjdk.java.net. Retrieved 2021-04-28.
  10. Galindo Salgado, Pablo. "What's New In Python 3.10". Python 3.10.6 documentation. Retrieved 2022-08-19.
  11. Bucher, Brandt; van Rossum, Guido (2020-09-12). "PEP 634 – Structural Pattern Matching: Specification". Python Enhancement Proposals. Retrieved 2022-08-19.
  12. Kohn, Tobias; van Rossum, Guido (2020-09-12). "PEP 635 – Structural Pattern Matching: Motivation and Rationale". Python Enhancement Proposals. Retrieved 2022-08-19.
  13. Moisset, Daniel F. "PEP 636 – Structural Pattern Matching: Tutorial". Python Enhancement Proposals. Retrieved 2022-08-19.
  14. 14.0 14.1 Switch statement in Lua


अग्रिम पठन