स्विच स्टेटमेंट
This article needs additional citations for verification. (April 2013) (Learn how and when to remove this template message) |
कंप्यूटर प्रोग्रामिंग भाषाओं में, एक स्विच स्टेटमेंट एक प्रकार का चयन नियंत्रण तंत्र है जिसका उपयोग खोज और मानचित्र के माध्यम से प्रोग्राम निष्पादन के नियंत्रण प्रवाह को बदलने के लिए चर (प्रोग्रामिंग) या अभिव्यक्ति के मान को अनुमति देने के लिए किया जाता है।
स्विच स्टेटमेंट कुछ इसी तरह कार्य करते हैं if
C (प्रोग्रामिंग लैंग्वेज)/C++, C शार्प (प्रोग्रामिंग लैंग्वेज)|C#, विजुअल बेसिक .NET, Java (प्रोग्रामिंग लैंग्वेज) जैसी प्रोग्रामिंग लैंग्वेज में इस्तेमाल होने वाला स्टेटमेंट और पास्कल (प्रोग्रामिंग भाषा) जैसी अधिकांश उच्च-स्तरीय अनिवार्य प्रोग्रामिंग लैंग्वेज में मौजूद है। , एडा (प्रोग्रामिंग लैंग्वेज), सी (प्रोग्रामिंग भाषा) /सी ++ , सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी#, विजुअल बेसिक .नेट, जावा (प्रोग्रामिंग भाषा) , और कई अन्य प्रकार की भाषाओं में, ऐसे कीवर्ड (कंप्यूटर प्रोग्रामिंग) का उपयोग करके एस के रूप में switch
, case
, select
या inspect
.
स्विच स्टेटमेंट दो मुख्य रूपों में आते हैं: पास्कल के रूप में एक संरचित स्विच, जो बिल्कुल एक शाखा लेता है, और एक असंरचित स्विच, जैसा कि सी में होता है, जो एक प्रकार के के लिए जाओ के रूप में कार्य करता है। स्विच का उपयोग करने के मुख्य कारणों में स्पष्टता में सुधार शामिल है, अन्यथा दोहराए जाने वाले कोडिंग को कम करके, और (यदि अनुमानी अनुमति देता है) भी कई मामलों में आसान संकलक अनुकूलन के माध्यम से तेजी से निष्पादन की क्षमता प्रदान करता है।
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
निम्नलिखित तरीके से:
- #एफ। फलन φ इस प्रकार परिभाषित किया गया है
- φ(एक्स1 , ... , एक्सn ) =
- फी1(एक्स1 , ... , एक्सn ) यदि क्यू1(एक्स1 , ... , एक्सn ),
- . . . . . . . . . . . .
- फीm(एक्स1 , ... , एक्सn ) यदि क्यूm(एक्स1 , ... , एक्सn ),
- फीm+1(एक्स1 , ... , एक्सn ) अन्यथा,
- φ(एक्स1 , ... , एक्सn ) =
- जहां क्यू1 , ... , क्यूm परस्पर अनन्य विधेय हैं (या φ(x1 , ... , एक्सn) पहले खंड द्वारा दिया गया मान होगा जो लागू होता है) φ में आदिम पुनरावर्ती है1, ..., फीm+1, क्यू1, ..., क्यूm+1.[1]
क्लेन बूलियन-जैसे पुनरावर्ती कार्यों साइन-ऑफ़ sg( ) के संदर्भ में इसका एक प्रमाण प्रदान करता है न कि ~sg( ) के साइन (क्लीन 1952:222-223); पहला रिटर्न 1 देता है अगर इसका इनपुट पॉजिटिव है और -1 अगर इसका इनपुट नेगेटिव है।
बूलोस-बर्गेस-जेफरी अतिरिक्त अवलोकन करते हैं कि मामलों द्वारा परिभाषा पारस्परिक विशिष्टता और सामूहिक रूप से संपूर्ण दोनों होनी चाहिए। वे भी इस कार्य की आदिम पुनरावर्तीता का प्रमाण प्रस्तुत करते हैं (बूलोस-बर्गेस-जेफरी 2002:74-75)।
IF-THEN-ELSE मैककार्थी औपचारिकता का आधार है: इसका उपयोग आदिम पुनरावर्तन और इन-ऑपरेटर दोनों को प्रतिस्थापित करता है।
विशिष्ट वाक्य रचना
अधिकांश भाषाओं में, प्रोग्रामर एक या दो कीवर्ड का उपयोग करके कई अलग-अलग पंक्तियों में एक स्विच स्टेटमेंट लिखते हैं। एक विशिष्ट सिंटैक्स में शामिल हैं:
- पहला
select
, जिसके बाद एक एक्सप्रेशन आता है जिसे अक्सर स्विच स्टेटमेंट के कंट्रोल एक्सप्रेशन या कंट्रोल वेरिएबल के रूप में संदर्भित किया जाता है - बाद की पंक्तियाँ वास्तविक मामलों (मानों) को परिभाषित करती हैं, मैच होने पर निष्पादन के लिए बयानों के संबंधित अनुक्रमों के साथ
- पतनशील व्यवहार वाली भाषाओं में, a
break
बयान आम तौर पर एक अनुसरण करता हैcase
उक्त कथन को समाप्त करने के लिए कथन। [वेल्स] - कुछ भाषाओं में, उदाहरण के लिए, PL/I, नियंत्रण अभिव्यक्ति वैकल्पिक है; यदि कोई नियंत्रण व्यंजक नहीं है तो प्रत्येक विकल्प a से शुरू होता है
WHEN
क्लॉज जिसमें बूलियन एक्सप्रेशन होता है और मैच पहले मामले के लिए होता है जिसके लिए एक्सप्रेशन का मूल्यांकन सही होता है। यह उपयोग कुछ अन्य भाषाओं में if/then/elseif/else संरचनाओं के समान है, उदाहरण के लिए पर्ल। - कुछ भाषाओं में, उदाहरण के लिए Rexx, कोई नियंत्रण अभिव्यक्ति की अनुमति नहीं है और प्रत्येक विकल्प a से शुरू होता है
WHEN
क्लॉज जिसमें बूलियन एक्सप्रेशन होता है और मैच पहले मामले के लिए होता है जिसके लिए एक्सप्रेशन का मूल्यांकन सही होता है।
प्रत्येक विकल्प विशेष मूल्य, या मूल्यों की सूची (नीचे देखें) से शुरू होता है, जो कि नियंत्रण चर से मेल खा सकता है और जो नियंत्रण को बयानों के संबंधित अनुक्रम को प्राप्त करने का कारण बनता है। मान (या सूची/मूल्यों की श्रेणी) आमतौर पर एक कोलन या एक निहितार्थ तीर द्वारा संबंधित कथन अनुक्रम से अलग किया जाता है। कई भाषाओं में, प्रत्येक मामले के पहले एक कीवर्ड भी होना चाहिए जैसे कि case
या when
.
एक वैकल्पिक डिफ़ॉल्ट मामले की भी आमतौर पर अनुमति दी जाती है, जिसे a द्वारा निर्दिष्ट किया जाता है default
, otherwise
, या else
कीवर्ड। यह तब निष्पादित होता है जब अन्य मामलों में से कोई भी नियंत्रण अभिव्यक्ति से मेल नहीं खाता। कुछ भाषाओं में, जैसे सी, यदि कोई मामला मेल नहीं खाता है और default
का लोप किया जाता है switch
कथन केवल बाहर निकलता है। दूसरों में, पीएल/आई की तरह, एक त्रुटि उठाई जाती है।
शब्दार्थ
शब्दार्थ रूप से, स्विच स्टेटमेंट के दो मुख्य रूप हैं।
पहला रूप संरचित स्विच हैं, जैसे पास्कल में, जहां बिल्कुल एक शाखा ली जाती है, और मामलों को अलग, अनन्य ब्लॉक के रूप में माना जाता है। यह सामान्यीकृत अगर-फिर-अन्य सशर्त (कंप्यूटर प्रोग्रामिंग) के रूप में कार्य करता है, यहां केवल दो नहीं, बल्कि कई शाखाओं के साथ।
दूसरा रूप असंरचित स्विच हैं, जैसा कि सी में है, जहां मामलों को एक ब्लॉक के भीतर लेबल के रूप में माना जाता है, और स्विच सामान्यीकृत गोटो के रूप में कार्य करता है। इस भेद को गिरावट के उपचार के रूप में जाना जाता है, जिसे नीचे विस्तृत किया गया है।
गिरावट
कई भाषाओं में, केवल मैचिंग ब्लॉक को निष्पादित किया जाता है, और फिर स्विच स्टेटमेंट के अंत में निष्पादन जारी रहता है। इनमें पास्कल (प्रोग्रामिंग लैंग्वेज) परिवार (ऑब्जेक्ट पास्कल, मोडुला, ओबेरॉन, एडा, आदि) के साथ-साथ पीएल/आई, पास्कल से प्रभावित फोरट्रान और बुनियादी बोलियों के आधुनिक रूप, सबसे कार्यात्मक भाषाएं और कई अन्य शामिल हैं। एकाधिक मानों को एक ही कोड निष्पादित करने की अनुमति देने के लिए (और कोड को डुप्लिकेट कोड की आवश्यकता से बचने के लिए), पास्कल-प्रकार की भाषाएं अल्पविराम से अलग की गई सूची के रूप में, एक श्रेणी के रूप में, या एक संयोजन के रूप में दिए गए मानों की संख्या की अनुमति देती हैं।
सी भाषा से प्राप्त भाषाएं, और अधिक आम तौर पर फोरट्रान के संगणित GOTO से प्रभावित भाषाएं, इसके बजाय फालथ्रू की सुविधा देती हैं, जहां नियंत्रण मेल खाने वाले मामले में चला जाता है, और फिर स्रोत पाठ में अगले मामले से जुड़े बयानों के लिए निष्पादन जारी (गिरता है)। यह बिना किसी विशेष सिंटैक्स के कई मानों को एक ही बिंदु से मेल खाने की अनुमति देता है: वे केवल खाली निकायों के साथ सूचीबद्ध होते हैं। केस बॉडी में कोड के साथ वैल्यू को विशेष रूप से वातानुकूलित किया जा सकता है। व्यवहार में, गिरावट को आम तौर पर रोका जाता है break
मैचिंग बॉडी के अंत में कीवर्ड, जो स्विच ब्लॉक के निष्पादन से बाहर निकलता है, लेकिन यह अनजाने में गिरावट के कारण बग पैदा कर सकता है यदि प्रोग्रामर सम्मिलित करना भूल जाता है break
कथन। यह इस प्रकार कई लोगों द्वारा देखा जाता है[2] एक भाषा मस्सा के रूप में, और कुछ लिंट टूल्स में इसके खिलाफ चेतावनी दी। सिंटैक्टिक रूप से, मामलों को लेबल के रूप में व्याख्या किया जाता है, ब्लॉक नहीं किया जाता है, और स्विच और ब्रेक स्टेटमेंट स्पष्ट रूप से नियंत्रण प्रवाह को बदलते हैं। सी से प्रभावित कुछ भाषाएं, जैसे कि जावास्क्रिप्ट, डिफॉल्ट फॉलथ्रू को बनाए रखती हैं, जबकि अन्य फॉलथ्रू को हटाती हैं, या केवल विशेष परिस्थितियों में ही इसकी अनुमति देती हैं। सी-फ़ैमिली में इस पर उल्लेखनीय विविधताओं में सी शार्प (प्रोग्रामिंग भाषा)|सी# शामिल है, जिसमें सभी ब्लॉकों को एक के साथ समाप्त किया जाना चाहिए break
या return
जब तक कि ब्लॉक खाली न हो (यानी कई मूल्यों को निर्दिष्ट करने के तरीके के रूप में फ़ॉलथ्रू का उपयोग किया जाता है)।
कुछ मामलों में भाषाएँ वैकल्पिक गिरावट प्रदान करती हैं। उदाहरण के लिए, पर्ल डिफ़ॉल्ट रूप से नहीं गिरता है, लेकिन एक मामला स्पष्ट रूप से ए का उपयोग करके ऐसा कर सकता है continue
कीवर्ड। यह अनजाने में गिरावट को रोकता है लेकिन वांछित होने पर इसकी अनुमति देता है। इसी तरह, बैश (यूनिक्स शेल) के साथ समाप्त होने पर चूक नहीं होती है ;;
, लेकिन गिरावट की अनुमति दें[3] साथ ;&
या ;;&
बजाय।
स्विच स्टेटमेंट का एक उदाहरण जो फॉलथ्रू पर निर्भर करता है, डफ का उपकरण है।
संकलन
अनुकूलन (कंप्यूटर विज्ञान) जैसे जीएनयू कंपाइलर संग्रह या बजना मामले में मूल्यों के माध्यम से एक शाखा तालिका या द्विआधारी खोज एल्गोरिथ्म में एक स्विच स्टेटमेंट संकलित कर सकता है।[4] एक शाखा तालिका स्विच स्टेटमेंट को निर्देशों की एक छोटी, निरंतर संख्या के साथ निर्धारित करने की अनुमति देती है कि किस शाखा को तुलना की सूची के बिना निष्पादित करना है, जबकि एक द्विआधारी खोज केवल मामलों की संख्या में मापी गई तुलनाओं की एक लघुगणकीय संख्या लेती है। स्विच स्टेटमेंट।
आम तौर पर, यह पता लगाने का एकमात्र तरीका है कि क्या यह अनुकूलन हुआ है, वास्तव में परिणामी असेंबली भाषा या मशीन कोड आउटपुट को देखते हुए जो संकलक द्वारा उत्पन्न किया गया है।
फायदे और नुकसान
This section does not cite any sources. (January 2017) (Learn how and when to remove this template message) |
कुछ भाषाओं और प्रोग्रामिंग परिवेशों में, a case
या switch
कथन को if else if कथनों की समतुल्य श्रृंखला से बेहतर माना जाता है क्योंकि यह है:
- डिबग करने में आसान (उदाहरण के लिए कोड बनाम कॉल टेबल पर ब्रेकप्वाइंट सेट करना, अगर डीबगर में कोई सशर्त ब्रेकपॉइंट क्षमता नहीं है)
- किसी व्यक्ति के लिए पढ़ना आसान
- समझने में आसान, और परिणामस्वरूप बनाए रखना आसान
- फिक्स्ड डेप्थ: इफ एल्स का एक क्रम अगर स्टेटमेंट डीप नेस्टिंग उत्पन्न कर सकता है, जिससे संकलन अधिक कठिन हो जाता है (विशेष रूप से स्वचालित रूप से उत्पन्न कोड में)
- यह सत्यापित करना आसान है कि सभी मान प्रबंधित किए जाते हैं। यदि कुछ एनम मानों को नियंत्रित नहीं किया जाता है, तो कंपाइलर चेतावनी जारी कर सकते हैं।
इसके अतिरिक्त, एक अनुकूलन (कंप्यूटर विज्ञान) कार्यान्वयन विकल्प की तुलना में बहुत तेजी से निष्पादित हो सकता है, क्योंकि इसे अक्सर अनुक्रमित शाखा तालिका का उपयोग करके कार्यान्वित किया जाता है।[5] उदाहरण के लिए, एकल वर्ण के मूल्य के आधार पर कार्यक्रम प्रवाह का निर्णय लेना, यदि सही ढंग से कार्यान्वित किया जाता है, तो विकल्प की तुलना में बहुत अधिक कुशल होता है, जिससे निर्देश पथ की लंबाई काफी कम हो जाती है। जब इस तरह लागू किया जाता है, तो एक स्विच स्टेटमेंट अनिवार्य रूप से एक संपूर्ण हैश बन जाता है।
नियंत्रण-प्रवाह ग्राफ के संदर्भ में, एक स्विच स्टेटमेंट में दो नोड (प्रवेश और निकास) होते हैं, साथ ही प्रत्येक विकल्प के लिए उनके बीच एक किनारा होता है। इसके विपरीत, if...else if...else if के एक क्रम में पहले और अंतिम के अलावा प्रत्येक मामले के लिए एक अतिरिक्त नोड होता है, साथ में एक संबंधित किनारा होता है। if s के अनुक्रमों के लिए परिणामी नियंत्रण-प्रवाह ग्राफ में इस प्रकार कई और नोड हैं और लगभग दोगुने किनारे हैं, इनमें कोई उपयोगी जानकारी नहीं है। हालाँकि, यदि स्टेटमेंट में सरल शाखाएँ स्विच स्टेटमेंट की जटिल शाखा की तुलना में व्यक्तिगत रूप से अवधारणात्मक रूप से आसान हैं। चक्रीय जटिलता के संदर्भ में, ये दोनों विकल्प k−1 दिए जाने पर इसे k−1 से बढ़ा देते हैं।
अभिव्यक्ति स्विच करें
जावा वर्जन हिस्ट्री में स्विच एक्सप्रेशन पेश किए गए हैं#Java SE 12, 19 मार्च 2019, प्रीव्यू फीचर के तौर पर। यहां एक मान वापस करने के लिए एक संपूर्ण स्विच अभिव्यक्ति का उपयोग किया जा सकता है। केस लेबल का एक नया रूप भी है, case L->
जहां दाईं ओर एक एकल व्यंजक है। हालांकि यह गिरने से भी रोकता है और इसके लिए आवश्यक है कि मामले संपूर्ण हों। जावा एसई 13 में yield
बयान पेश किया गया है, और जावा एसई 14 में स्विच एक्सप्रेशन एक मानक भाषा सुविधा बन जाती है।[6][7][8] उदाहरण के लिए:
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 में, एक स्थिरांक को जाँचने के लिए चर के रूप में उपयोग किया जा सकता है, और उस स्थिरांक का मूल्यांकन करने वाला पहला केस स्टेटमेंट निष्पादित किया जाएगा:
switch (true) {
case ($x == 'hello'):
foo();
break;
case ($z == 'howdy'): break;
}
switch (5) {
case $x: break;
case $y: break;
}
यह सुविधा कई मानों के विरुद्ध एक चर के बजाय एक मान के विरुद्ध एकाधिक चर की जाँच करने के लिए भी उपयोगी है। COBOL भी इस प्रपत्र (और अन्य रूपों) का समर्थन करता है EVALUATE
कथन। PL/I का एक वैकल्पिक रूप है 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
खोजशब्द।[9][10][11][12] अन्य भाषाओं के विपरीत, पायथन विशेष रूप से पतनशील व्यवहार प्रदर्शित नहीं करता है।
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 में भी पाया जाता है।
विकल्प
स्विच स्टेटमेंट के कुछ विकल्प हो सकते हैं:
- if-else सशर्त (प्रोग्रामिंग) की एक श्रृंखला जो एक समय में लक्ष्य एक मान की जांच करती है। फ़ॉलथ्रू व्यवहार if सशर्त के अनुक्रम के साथ प्राप्त किया जा सकता है, जिनमें से प्रत्येक बिना किसी अन्य खंड के होता है।
- एक लुकअप तालिका, जिसमें कुंजियों के रूप में,
case
मूल्यों और, मूल्यों के रूप में, के तहत भागcase
कथन।
- (कुछ भाषाओं में, केवल वास्तविक डेटा प्रकारों को लुकअप तालिका में मान के रूप में अनुमति दी जाती है। अन्य भाषाओं में, फ़ंक्शन (कंप्यूटर विज्ञान) को लुकअप तालिका मानों के रूप में असाइन करना भी संभव है, वास्तविक के समान लचीलापन प्राप्त करना
switch
कथन। इस पर अधिक विवरण के लिए नियंत्रण तालिका आलेख देखें)। - लुआ (प्रोग्रामिंग भाषा) केस/स्विच स्टेटमेंट का समर्थन नहीं करता है।[13]यह लुकअप तकनीक लागू करने का एक तरीका है
switch
लुआ भाषा में बयान, जिसमें कोई अंतर्निहित नहीं हैswitch
.[13] - कुछ मामलों में, लुकअप तालिकाएँ गैर-प्रोग्राम अनुकूलन की तुलना में अधिक कुशल होती हैं
switch
बयान क्योंकि कई भाषाएं टेबल लुकअप को अनुकूलित कर सकती हैं, जबकि स्विच स्टेटमेंट तब तक अनुकूलित नहीं होते जब तक कि मूल्यों की सीमा कुछ अंतराल के साथ छोटी न हो। एक गैर-अनुकूलित, गैर-बाइनरी खोज लुकअप, हालांकि, लगभग निश्चित रूप से एक गैर-अनुकूलित स्विच या समतुल्य एकाधिक if-else कथनों की तुलना में धीमा होगा।[citation needed]
- (कुछ भाषाओं में, केवल वास्तविक डेटा प्रकारों को लुकअप तालिका में मान के रूप में अनुमति दी जाती है। अन्य भाषाओं में, फ़ंक्शन (कंप्यूटर विज्ञान) को लुकअप तालिका मानों के रूप में असाइन करना भी संभव है, वास्तविक के समान लचीलापन प्राप्त करना
- यदि आवश्यक हो तो एक नियंत्रण तालिका (जिसे एक साधारण लुकअप टेबल के रूप में लागू किया जा सकता है) को कई इनपुट पर कई स्थितियों को समायोजित करने के लिए भी अनुकूलित किया जा सकता है और आमतौर पर समकक्ष स्विच (जो कई बयानों पर कब्जा कर सकता है) की तुलना में अधिक 'दृश्य कॉम्पैक्टनेस' प्रदर्शित करता है।
- पैटर्न मिलान, जिसका उपयोग कई कार्यात्मक प्रोग्रामिंग भाषाओं में स्विच-जैसी कार्यक्षमता को कार्यान्वित करने के लिए किया जाता है।
यह भी देखें
- एल्गोरिथम दक्षता
- शाखा तालिका
- नियंत्रण तालिका
- डफ का उपकरण
- इंडेक्स मैपिंग
संदर्भ
- ↑ "Definition by cases", Kleene 1952:229
- ↑ van der Linden, Peter (1994). Expert C Programming: Deep C Secrets, p. 38. Prentice Hall, Eaglewood Cliffs. ISBN 0131774298.
- ↑ since version 4.0, released in 2009.
- ↑ Vlad Lazarenko. From Switch Statement Down to Machine Code
- ↑ Guntheroth, Kurt (April 27, 2016). अनुकूलित सी ++. O'Reilly Media. p. 182. ISBN 9781491922033.
- ↑ "JEP 325: Switch Expressions (Preview)". openjdk.java.net. Retrieved 2021-04-28.
- ↑ "JEP 354: Switch Expressions (Second Preview)". openjdk.java.net. Retrieved 2021-04-28.
- ↑ "JEP 361: Switch Expressions". openjdk.java.net. Retrieved 2021-04-28.
- ↑ Galindo Salgado, Pablo. "What's New In Python 3.10". Python 3.10.6 documentation. Retrieved 2022-08-19.
- ↑ Bucher, Brandt; van Rossum, Guido (2020-09-12). "PEP 634 – Structural Pattern Matching: Specification". Python Enhancement Proposals. Retrieved 2022-08-19.
- ↑ Kohn, Tobias; van Rossum, Guido (2020-09-12). "PEP 635 – Structural Pattern Matching: Motivation and Rationale". Python Enhancement Proposals. Retrieved 2022-08-19.
- ↑ Moisset, Daniel F. "PEP 636 – Structural Pattern Matching: Tutorial". Python Enhancement Proposals. Retrieved 2022-08-19.
- ↑ 13.0 13.1 Switch statement in Lua
अग्रिम पठन
- Stephen Kleene, 1952 (10th reprint 1991), Introduction to Metamathematics, North-Holland Publishing Company, Amsterdam NL, ISBN 0-7204-2103-9
- George Boolos, John Burgess, and Richard Jeffrey, 2002, Computability and Logic: Fourth Edition, Cambridge University Press, Cambridge UK, ISBN 0-521-00758-5 paperback. cf page 74-75.