अल्प परिपथ निरूपण: Difference between revisions

From Vigyanwiki
No edit summary
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Programming language construct}}
{{Short description|Programming language construct}}
{{distinguish|Short-circuit test}}
{{distinguish|अल्प परिपथ निरीक्षण}}
{{More citations needed|date=August 2013}}
{{Programming evaluation}}
{{Programming evaluation}}
शॉर्ट-सर्किट मूल्यांकन, न्यूनतम मूल्यांकन, या मैकार्थी मूल्यांकन (जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के बाद) कुछ [[प्रोग्रामिंग भाषा]]ओं में कुछ [[तार्किक संयोजक]]ों का शब्दार्थ है जिसमें दूसरा तर्क केवल तभी निष्पादित या मूल्यांकन किया जाता है जब पहला तर्क निर्धारित करने के लिए पर्याप्त नहीं होता है। अभिव्यक्ति का मूल्य: जब का पहला तर्क <code>AND</code> समारोह का मूल्यांकन करता है <code>false</code>, कुल मान होना चाहिए <code>false</code>; और जब का पहला तर्क <code>OR</code> समारोह का मूल्यांकन करता है <code>true</code>, कुल मान होना चाहिए <code>true</code>.
अल्प परिपथ निरूपण, न्यूनतम मूल्यांकन, या मैककार्थी मूल्यांकन (जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के बाद) कुछ [[प्रोग्रामिंग भाषा]]ओं में कुछ [[तार्किक संयोजक|बूलियन ऑपरेटरों]] का शब्दार्थ है जिसमें दूसरा तर्क केवल तभी निष्पादित या मूल्यांकन किया जाता है जब पहला तर्क निर्धारित करने के लिए पर्याप्त नहीं होता है। अभिव्यक्ति का मूल्य: जब <code>AND</code> का पहला तर्क <code>false</code> का मूल्यांकन करता है कुल मान <code>false</code> होना चाहिए; और जब <code>OR</code> का पहला तर्क <code>true</code> का मूल्यांकन करता है, तो कुल मान <code>true</code> होना चाहिए।


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


शॉर्ट-सर्किट ऑपरेटर, प्रभाव में, सरल अंकगणितीय ऑपरेटरों के बजाय [[नियंत्रण संरचना]]एं हैं, क्योंकि वे सख्त कार्य नहीं हैं। [[अनिवार्य भाषा]] के शब्दों में (विशेष रूप से [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]]), जहां साइड इफेक्ट महत्वपूर्ण हैं, शॉर्ट-सर्किट ऑपरेटर एक [[अनुक्रम बिंदु]] पेश करते हैं - वे किसी भी [[साइड इफेक्ट (कंप्यूटर विज्ञान)]] सहित पहले तर्क का पूरी तरह से मूल्यांकन करते हैं, इससे पहले (वैकल्पिक रूप से) दूसरा तर्क संसाधित करना। [[ALGOL 68]] ने उपयोगकर्ता-परिभाषित शॉर्ट-सर्किट ऑपरेटरों और प्रक्रियाओं को प्राप्त करने के लिए प्रक्रिया का उपयोग किया।
अल्प परिपथ ऑपरेटर, प्रभाव में, सरल अंकगणितीय ऑपरेटरों के बजाय [[नियंत्रण संरचना]]एं हैं, क्योंकि वे सख्त कार्य नहीं हैं। [[अनिवार्य भाषा]] के शब्दों में (विशेष रूप से [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]]), जहां दुष्प्रभाव महत्वपूर्ण, अल्प परिपथ ऑपरेटर [[अनुक्रम बिंदु]] प्रस्तुत करते हैं - वे वे दूसरे तर्क को संसाधित करने से पहले (वैकल्पिक रूप से) किसी भी [[साइड इफेक्ट (कंप्यूटर विज्ञान)|दुष्प्रभाव (कंप्यूटर विज्ञान)]] सहित पहले तर्क का पूरी तरह से मूल्यांकन करते हैं। [[ALGOL 68|ऐल्गॉल 68]] ने उपयोगकर्ता-परिभाषित अल्प परिपथ ऑपरेटरों और प्रक्रियाओं को प्राप्त करने के लिए प्रक्रिया का उपयोग किया था।


समस्यात्मक के रूप में शॉर्ट-सर्किट ऑपरेटरों के उपयोग की आलोचना की गई है:
समस्यात्मक के रूप में अल्प परिपथ ऑपरेटरों के उपयोग की आलोचना की गई है:
{{Quote  
{{Quote  
|text = The conditional connectives — "<u>cand</u>" and "<u>cor</u>" for short are ... less innocent than they might seem at first sight. For instance, <u>cor</u> does not distribute over <u>cand</u>: compare
|text = सशर्त संयोजक — "<u>cand</u>" और "<u>cor</u>" संक्षेप में — ... कम निर्दोष हैं जितना वे पहली द्रष्टि में लग सकते हैं। उदाहरण के लिए, <u>cor</u> <u>cand</u> पर वितरित नहीं करता: तुलना करें
:(A <u>cand</u> B) <u>cor</u> C ''with'' (A <u>cor</u> C) <u>cand</u> (B <u>cor</u> C);
(A cand B) cor C साथ (A cor C) cand (B cor C);
in the case ¬A ∧ C , the second expression requires B to be defined, the first one does not. Because the conditional connectives thus complicate the formal reasoning about programs, they are better avoided.
¬A ∧ C के स्थिति में, दूसरी अभिव्यक्ति के लिए B को परिभाषित करने की आवश्यकता है, पहले वाले को को परिभाषित करने की आवश्यकता नही है। क्योंकि सशर्त संयोजक इस प्रकार प्रोग्रामों के बारे में औपचारिक तर्क को जटिल करते हैं, उन्हें उत्तम विधि से टाला जाता है।
|author = [[Edsger W. Dijkstra]]<ref>[[Edsger W. Dijkstra]] "On a somewhat disappointing correspondence", EWD1009-0, 25 May 1987 [http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1009.PDF full text]</ref>}}
|author = [[एडजर डब्ल्यू. डिज्कस्ट्रा]]<रेफरी>[[एडजर डब्ल्यू. दिज्क्स्ट्रा]] "कुछ सीमा तक निराशाजनक पत्राचार पर", ईडब्ल्यूडी1009-0, 25 मई 1987 [http://www.cs.utexas.edu/users/EWD /ewd10xx/EWD1009.PDF पूरा टेक्स्ट]</ref>}}


== परिभाषा ==
== परिभाषा ==
किसी भी प्रोग्रामिंग भाषा में जो शॉर्ट-सर्किट मूल्यांकन लागू करता है, अभिव्यक्ति <code>''x'' and ''y''</code> [[सशर्त (प्रोग्रामिंग)]] के बराबर है <code>if ''x'' then ''y'' else ''x''</code>, और अभिव्यक्ति <code>''x'' or ''y''</code> के बराबर है <code>if ''x'' then ''x'' else ''y''</code>. किसी भी स्थिति में, x का मूल्यांकन केवल एक बार किया जाता है।
अल्प परिपथ निरूपण को लागू करने वाली किसी भी प्रोग्रामिंग भाषा में, अभिव्यक्ति <code>''x'' and ''y''</code> [[सशर्त (प्रोग्रामिंग)]] अभिव्यक्ति के बराबर है <code>if ''x'' then ''y'' else ''x''</code>, और अभिव्यक्ति <code>''x'' or ''y''</code> <code>if ''x'' then ''x'' else ''y''</code> के बराबर है।  किसी भी स्थिति में, x का मूल्यांकन केवल बार किया जाता है।


ऊपर दी गई सामान्यीकृत परिभाषा दो से अधिक सत्य-मूल्यों वाली ढीली टाइप की गई भाषाओं को समायोजित करती है <code>True</code> और <code>False</code>, जहां शॉर्ट-सर्किट ऑपरेटर अंतिम मूल्यांकन किए गए सबएक्सप्रेशन को वापस कर सकते हैं। इसे नीचे दी गई तालिका में अंतिम मान कहा जाता है। सख्ती से टाइप की गई भाषा के लिए, अभिव्यक्ति को सरल बनाया गया है <code>if ''x'' then ''y'' else '''false'''</code> और <code>if ''x'' then '''true''' else ''y''</code> क्रमशः बूलियन मामले के लिए।
ऊपर दी गई सामान्यीकृत परिभाषा शिथिल रूप से टाइप की गई भाषाओं को समायोजित करती है, जिनमें दो सत्य-मान <code>True</code> और <code>False</code> से अधिक होते हैं, जहां अल्प परिपथ ऑपरेटर अंतिम मूल्यांकन किए गए अभिव्यक्ति को वापस कर सकते हैं। इसे नीचे दी गई तालिका में अंतिम मान कहा जाता है। सख्ती से टाइप की गई भाषा के लिए, बूलियन स्थिति के लिए अभिव्यक्ति को क्रमशः <code>if ''x'' then ''y'' else '''false'''</code> और <code>if ''x'' then '''true''' else ''y''</code> के लिए सरल किया जाता है।


=== वरीयता ===
=== वरीयता ===
यद्यपि {{code|AND}} ऑपरेटर की प्राथमिकता लेता है {{code|OR}} कई भाषाओं में, यह शॉर्ट-सर्किट मूल्यांकन की सार्वभौमिक संपत्ति नहीं है। POSIX शेल का कमांड-लिस्ट सिंटैक्स समान प्राथमिकता लेने वाले और एक दूसरे के साथ बाएं-सहयोगी होने वाले दो ऑपरेटर का एक उदाहरण है।<ref>{{cite web |title=शेल कमांड लैंग्वेज|url=https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html |website=pubs.opengroup.org}}</ref>{{rp|at=§2.9.3}}
यद्यपि {{code|AND}} ऑपरेटर की प्राथमिकता लेता है {{code|OR}} कई भाषाओं में, यह अल्प परिपथ निरूपण की सार्वभौमिक संपत्ति नहीं है। पोसिक्स शेल का कमांड-लिस्ट सिंटैक्स समान प्राथमिकता लेने वाले और दूसरे के साथ बाएं-सहयोगी होने वाले दो ऑपरेटर का उदाहरण है।<ref>{{cite web |title=शेल कमांड लैंग्वेज|url=https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html |website=pubs.opengroup.org}}</ref>{{rp|at=§2.9.3}}


निम्नलिखित सरल बाएँ से दाएँ मूल्यांकनकर्ता की एक पूर्वता को लागू करता है {{code|AND}} ऊपर {{code|OR}} द्वारा ए {{code|continue}}:
निम्नलिखित सरल बाएँ से दाएँ मूल्यांकनकर्ता एक {{code|continue}} रखने के द्वारा {{code|AND}} ऊपर {{code|OR}} की प्राथमिकता को लागू करता है:<syntaxhighlight lang="d">
 
function short-circuit-eval (operators, values)
फंक्शन शॉर्ट-सर्किट-इवल (''ऑपरेटर्स'', ''वैल्यू'')
    let result := True
    चलो ''परिणाम'' := सच
    for each (op, val) in (operators, values):
    प्रत्येक के लिए (''op'', ''val'') in (''ऑपरेटर्स'', ''मान''):
        if op = "AND" && result = False
        if ''op'' = AND && ''result'' = False
            continue
            जारी रखना
        else if op = "OR" && result = True
        और अगर ''op'' = OR && ''result'' = True
            return result
            वापसी ''परिणाम''
        else
        अन्य
            result := val
            ''परिणाम'' := ''वैल''
    return result
    वापसी ''परिणाम''
</syntaxhighlight>


=== औपचारिकता ===
=== औपचारिकता ===
शॉर्ट-सर्किट लॉजिक, साइड-इफेक्ट्स के साथ या बिना, होरे लॉजिक # सशर्त नियम के आधार पर औपचारिक रूप दिया गया है। होरे की सशर्त। नतीजा यह है कि गैर-शॉर्ट सर्किटिंग ऑपरेटरों को मूल्यांकन के समान अनुक्रम के लिए शॉर्ट सर्किट तर्क से परिभाषित किया जा सकता है।<ref>{{cite arXiv |authors=Jan A. Bergstra, A. Ponse, D.J.C. Staudt |date=2010 |title=शॉर्ट-सर्किट तर्क|eprint=1010.3674|class=cs.LO}}</ref>
अल्प परिपथ लॉजिक, दुष्प्रभाव के साथ या बिना, होरे लॉजिक # सशर्त नियम के आधार पर औपचारिक रूप दिया गया है। होरे की सशर्त। नतीजा यह है कि गैर-अल्प परिपथिंग ऑपरेटरों को मूल्यांकन के समान अनुक्रम के लिए अल्प परिपथ तर्क से परिभाषित किया जा सकता है।<ref>{{cite arXiv |authors=Jan A. Bergstra, A. Ponse, D.J.C. Staudt |date=2010 |title=शॉर्ट-सर्किट तर्क|eprint=1010.3674|class=cs.LO}}</ref>




== सामान्य प्रोग्रामिंग और स्क्रिप्टिंग भाषाओं में समर्थन ==
== सामान्य प्रोग्रामिंग और स्क्रिप्टिंग भाषाओं में समर्थन ==
{| class="wikitable"
{| class="wikitable"
|+ Boolean operators in various languages
|+ विभिन्न भाषाओं में बूलियन ऑपरेटर
! Language !! [[Eager evaluation|Eager]] operators !! Short-circuit operators !! Result type
! भाषा !! [[Eager evaluation|इच्छुक]] संचालक !! अल्प-परिपथ संचालक !! परिणाम प्रकार
|-
|-
| Advanced Business Application Programming ([[ABAP]])
| उन्नत व्यापार अनुप्रयोग प्रोग्रामिंग [[ABAP|(एबीएपी)]]
| ''none''
| ''none''
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| Boolean<sup>1</sup>
| बूलियन<sup>1</sup>
|-
|-
| [[Ada (programming language)|Ada]]
| [[Ada (programming language)|एडीए]]
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| <code>and then</code>, <code>or else</code>
| <code>and then</code>, <code>or else</code>
| Boolean
| बूलियन
|-
|-
| [[ALGOL 68]]
| [[ALGOL 68|ऐल्गॉल 68]]
| and, &, ∧ ; or, ∨
| and, &, ∧ ; or, ∨
| {{depends|andf , orf ''(both user defined)''}}
| {{depends|andf , orf ''(both user defined)''}}
| Boolean
| बूलियन
|-
|-
| [[APL (programming language)|APL]]
| [[APL (programming language)|एपीएल]]
| <code>∧</code>, <code>∨</code>, <code>⍲</code> (nand), <code>⍱</code> (nor), etc.
| <code>∧</code>, <code>∨</code>, <code>⍲</code> (nand), <code>⍱</code> (nor), etc.
| <code>:AndIf</code>, <code>:OrIf</code>
| <code>:AndIf</code>, <code>:OrIf</code>
| Boolean<sup>1</sup>
| बूलियन<sup>1</sup>
|-
|-
| [[awk]]
| [[awk|एडब्लूके]]
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[Bash (Unix shell)|Bash]]
| [[Bash (Unix shell)|बश]]
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[C (programming language)|C]], [[Objective-C]]
| [[C (programming language)|सी]], [[Objective-C|उद्देश्य-सी]]
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code><ref>[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf ISO/IEC 9899 standard, section 6.5.13]</ref>
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code><ref>[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf ISO/IEC 9899 standard, section 6.5.13]</ref>
| int (<code>&&</code>,<code><nowiki>||</nowiki></code>), opnd-dependent (<code><nowiki>?</nowiki></code>)
| int (<code>&&</code>,<code><nowiki>||</nowiki></code>), ऑपंड-निर्भर (<code><nowiki>?</nowiki></code>)
|-
|-
| [[C++]]<sup>2</sup>
| [[C++|सी++]]<sup>2</sup>
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code><ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf ISO/IEC IS 14882 draft.]</ref>
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code><ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf ISO/IEC IS 14882 draft.]</ref>
| Boolean (<code>&&</code>,<code><nowiki>||</nowiki></code>), opnd-dependent (<code><nowiki>?</nowiki></code>)
| बूलियन (<code>&&</code>,<code><nowiki>||</nowiki></code>), ऑपंड-निर्भर (<code><nowiki>?</nowiki></code>)
|-
|-
| [[C Sharp (programming language)|C#]]
| [[C Sharp (programming language)|सी#]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code>, <code><nowiki>??</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code>, <code><nowiki>??</nowiki></code>
| Boolean (<code>&&</code>,<code><nowiki>||</nowiki></code>), opnd-dependent (<code><nowiki>?</nowiki></code>, <code><nowiki>??</nowiki></code>)
| बूलियन (<code>&&</code>,<code><nowiki>||</nowiki></code>), ऑपंड-निर्भर (<code><nowiki>?</nowiki></code>, <code><nowiki>??</nowiki></code>)
|-
|-
| [[ColdFusion Markup Language]] (CFML)
| [[ColdFusion Markup Language|कोल्डफ्यूजन मार्कअप भाषा]] (सीएफएमएल)
| ''none''
| ''none''
| <code>AND</code>, <code>OR</code>, <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>AND</code>, <code>OR</code>, <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[D (programming language)|D]]<sup>3</sup>
| [[D (programming language)|डी]]<sup>3</sup>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>, <code><nowiki>?</nowiki></code>
| Boolean (<code>&&</code>,<code><nowiki>||</nowiki></code>), opnd-dependent (<code><nowiki>?</nowiki></code>)
| बूलियन (<code>&&</code>,<code><nowiki>||</nowiki></code>), ऑपंड-निर्भर (<code><nowiki>?</nowiki></code>)
|-
|-
| [[Eiffel (programming language)|Eiffel]]
| [[Eiffel (programming language)|एफिल]]
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| <code>and then</code>, <code>or else</code>
| <code>and then</code>, <code>or else</code>
| Boolean
| बूलियन
|-
|-
| [[Erlang (programming language)|Erlang]]
| [[Erlang (programming language)|एर्लांगन]]
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| <code>andalso</code>, <code>orelse</code>
| <code>andalso</code>, <code>orelse</code>
| Boolean
| बूलियन
|-
|-
| [[Fortran]]<sup>4</sup>
| [[Fortran|फोरट्रान]]<sup>4</sup>
| <code>.and.</code>, <code>.or.</code>
| <code>.and.</code>, <code>.or.</code>
| <code>.and.</code>, <code>.or.</code>
| <code>.and.</code>, <code>.or.</code>
| Boolean
| बूलियन
|-
|-
| [[Go (programming language)|Go]], [[Haskell (programming language)|Haskell]], [[OCaml]]
| [[Go (programming language)|गो]], [[Haskell (programming language)|हास्केल]], [[OCaml|ओकैमल]]
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[Java (programming language)|Java]], [[MATLAB]], [[R (programming language)|R]], [[Swift (programming language)|Swift]]
| [[Java (programming language)|जावा]], [[MATLAB|मतलब]], [[R (programming language)|आर]], [[Swift (programming language)|स्विफ्ट]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[JavaScript]], [[Julia (programming language)|Julia]]
| [[JavaScript|जावास्क्रिप्ट]], [[Julia (programming language)|जूलिया]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Last value
| अंतिम मान
|-
|-
| [[Lasso (programming language)|Lasso]]
| [[Lasso (programming language)|लेस्सो]]
| ''none''
| ''none''
| <code>and</code>, <code>or</code>, <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>and</code>, <code>or</code>, <code>&&</code>, <code><nowiki>||</nowiki></code>
| Last value
| अंतिम मान
|-
|-
| [[Kotlin (programming language)|Kotlin]]
| [[Kotlin (programming language)|कोटलिन]]
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[Lisp (programming language)|Lisp]], [[Lua (programming language)|Lua]], [[Scheme (programming language)|Scheme]]
| [[Lisp (programming language)|लिस्प]], [[Lua (programming language)|लुआ]], [[Scheme (programming language)|स्कीम]]
| ''none''
| ''none''
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| Last value
| अंतिम मान
|-
|-
| [[MUMPS]] (M)
| [[MUMPS|मम्प्स]] (एम)
| <code>&</code>, <code>!</code>
| <code>&</code>, <code>!</code>
| ''none''
| ''none''
| Numeric
| संख्यात्मक
|-
|-
| [[Modula-2]]
| [[Modula-2|मोडुला -2]]
| ''none''
| ''none''
| <code>AND</code>, <code>OR</code>
| <code>AND</code>, <code>OR</code>
| Boolean
| बूलियन
|-
|-
| [[Oberon (programming language)|Oberon]]
| [[Oberon (programming language)|ओबेरॉन]]
| ''none''
| ''none''
| <code>&</code>, <code>OR</code>
| <code>&</code>, <code>OR</code>
| Boolean
| बूलियन
|-
|-
| [[OCaml]]
| [[OCaml|ओकैमल]]
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| [[Pascal (programming language)|Pascal]]
| [[Pascal (programming language)|पास्कल]]
| <code>and</code>, <code>or</code><sup>5</sup>,<sup>9</sup>
| <code>and</code>, <code>or</code><sup>5</sup>,<sup>9</sup>
| <code>and_then</code>, <code>or_else</code><sup>6</sup>,<sup>9</sup>
| <code>and_then</code>, <code>or_else</code><sup>6</sup>,<sup>9</sup>
| Boolean
| बूलियन
|-
|-
| [[Perl]]
| [[Perl|पर्ल]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code>and</code>, <code><nowiki>||</nowiki></code>, <code>or</code>
| <code>&&</code>, <code>and</code>, <code><nowiki>||</nowiki></code>, <code>or</code>
| Last value
| अंतिम मान
|-
|-
| [[Ruby (programming language)|Ruby]]
| [[Ruby (programming language)|रूबी]]
| <code>and</code>, <code><nowiki>or</nowiki></code>
| <code>and</code>, <code><nowiki>or</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Last value
| अंतिम मान
|-
|-
| [[PHP]]
| [[PHP|पीएचपी]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code>and</code>, <code><nowiki>||</nowiki></code>, <code>or</code>
| <code>&&</code>, <code>and</code>, <code><nowiki>||</nowiki></code>, <code>or</code>
| Boolean
| बूलियन
|-
|-
| [[POSIX shell]] (command list)
| [[POSIX shell|पोसिक्स शेल]] (कमांड सूची)
| ''none''
| ''none''
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code>
| Last value (exit)
| अंतिम मान (प्रस्थान)
|-
|-
| [[PowerShell]] Scripting Language
| [[PowerShell|पॉवरशेल]] स्क्रिप्टिंग भाषा
| ''none''
| ''none''
| <code>-and</code>, <code>-or</code>
| <code>-and</code>, <code>-or</code>
| Boolean
| बूलियन
|-
|-
| [[Python (programming language)|Python]]
| [[Python (programming language)|पायथन]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>and</code>, <code>or</code>
| <code>and</code>, <code>or</code>
| Last value
| अंतिम मान
|-
|-
| [[Rust (programming language)|Rust]]
| [[Rust (programming language)|रस्ट]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&&</code>, <code><nowiki>||</nowiki></code><ref>{{Cite web|url=https://doc.rust-lang.org/std/ops/index.html|title=std::ops - Rust|website=doc.rust-lang.org|access-date=2019-02-12}}</ref>
| <code>&&</code>, <code><nowiki>||</nowiki></code><ref>{{Cite web|url=https://doc.rust-lang.org/std/ops/index.html|title=std::ops - Rust|website=doc.rust-lang.org|access-date=2019-02-12}}</ref>
| Boolean
| बूलियन
|-
|-
| [[Smalltalk]]
| [[Smalltalk|स्मालटाक]]
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>and:</code>, <code>or:</code><sup>7</sup>
| <code>and:</code>, <code>or:</code><sup>7</sup>
| Boolean
| बूलियन
|-
|-
| [[Standard ML]]
| [[Standard ML|स्टैंडर्ड एमएल]]
| {{unk}}
| {{unk}}
| <code>andalso</code>, <code>orelse</code>
| <code>andalso</code>, <code>orelse</code>
| Boolean
| बूलियन
|-
|-
| [[TTCN-3]]
| [[TTCN-3|टीटीसीएन-3]]
| ''none''
| ''none''
| <code>and</code>, <code>or</code><ref>[https://www.etsi.org/deliver/etsi_es/201800_201899/20187301/04.10.01_60/es_20187301v041001p.pdf ETSI ES 201 873-1 V4.10.1, section 7.1.4]</ref>
| <code>and</code>, <code>or</code><ref>[https://www.etsi.org/deliver/etsi_es/201800_201899/20187301/04.10.01_60/es_20187301v041001p.pdf ETSI ES 201 873-1 V4.10.1, section 7.1.4]</ref>
| Boolean
| बूलियन
|-
|-
|Beckhoff TwinCAT® ([[IEC 61131-3]])<sup>10</sup>
|बेकहॉफ़ ट्विनकैट® ([[IEC 61131-3|आईईसी 61131-3]])<sup>10</sup>
|<code>AND</code>, <code>OR</code>
|<code>AND</code>, <code>OR</code>
|<code>AND_THEN</code>,<ref>{{Cite web|title=Beckhoff Information System - English|url=https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2528923787.html&id=|access-date=2021-08-16|website=infosys.beckhoff.com}}</ref> <code>OR_ELSE</code><ref>{{Cite web|title=Beckhoff Information System - English|url=https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2528923787.html&id=|access-date=2021-08-16|website=infosys.beckhoff.com}}</ref>
|<code>AND_THEN</code>,<ref>{{Cite web|title=Beckhoff Information System - English|url=https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2528923787.html&id=|access-date=2021-08-16|website=infosys.beckhoff.com}}</ref> <code>OR_ELSE</code><ref>{{Cite web|title=Beckhoff Information System - English|url=https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2528923787.html&id=|access-date=2021-08-16|website=infosys.beckhoff.com}}</ref>
|Boolean
|बूलियन
|-
|-
| [[Visual Basic .NET]]
| [[Visual Basic .NET|विजुअल बेसिक .नेट]]
| <code>And</code>, <code>Or</code>
| <code>And</code>, <code>Or</code>
| <code>AndAlso</code>, <code>OrElse</code>
| <code>AndAlso</code>, <code>OrElse</code>
| Boolean
| बूलियन
|-
|-
| [[Visual Basic]], [[Visual Basic for Applications]] (VBA)
| [[Visual Basic|विजुअल बेसिक]], [[Visual Basic for Applications|एप्लीकेशन के लिए विजुअल बेसिक]] (वीबीए)
| <code>And</code>, <code>Or</code>
| <code>And</code>, <code>Or</code>
| <code>Select Case</code><sup>8</sup>
| <code>Select Case</code><sup>8</sup>
| Numeric
| संख्यात्मक
|-
|-
| [[Wolfram Language]]
| [[Wolfram Language|वोल्फ्राम भाषा]]
| <code>And @@ {...}</code>, <code>Or @@ {...}</code>
| <code>And @@ {...}</code>, <code>Or @@ {...}</code>
| <code>And</code>, <code>Or</code>, <code>&&</code>, <code><nowiki>||</nowiki></code>
| <code>And</code>, <code>Or</code>, <code>&&</code>, <code><nowiki>||</nowiki></code>
| Boolean
| बूलियन
|-
|-
| ZTT
| जेडटीटी
| <code>&</code>, <code><nowiki>|</nowiki></code>
| <code>&</code>, <code><nowiki>|</nowiki></code>
| ''none''
| ''none''
| Boolean
| बूलियन
|}
|}
<sup>1</sup> ABAP और APL का कोई विशिष्ट बूलियन प्रकार नहीं है।<br/>
<sup>1</sup> एबीएपी और एपीएल का कोई विशिष्ट बूलियन प्रकार नहीं है।<br/><sup>2</sup> जब [[ऑपरेटर ओवरलोडिंग]] करता है, तो ऑपरेटर्स <code>&&</code> और <code>||</code> उत्सुक हैं और किसी भी प्रकार का रिटर्न दे सकते हैं।<br/><sup>3</sup> यह केवल रनटाइम-मूल्यांकित एक्सप्रेशन, <code>static if</code> और <code>static assert</code> पर लागू होता हैं। स्टेटिक इनिशियलाइज़र्स या मेनिफ़ेस्ट कांस्टेंट में एक्सप्रेशन उत्सुक मूल्यांकन का उपयोग करते हैं। <br><sup>4</sup> फोरट्रान ऑपरेटर न तो अल्प परिपथ हैं और न ही उत्सुक: भाषा विनिर्देश संकलक को अनुकूलन के लिए विधि का चयन करने की अनुमति देता है।<br/><sup>5</sup> पास्कल (प्रोग्रामिंग भाषा) आईएसओ/आईईसी 10206:1990 विस्तारित पास्कल आईएसओ/आईईसी 10206:1990 विस्तारित पास्कल अल्प परिपथिंग की अनुमति देता है, किन्तु इसकी आवश्यकता नहीं है।<br/><sup>6</sup> आईएसओ/आईईसी 10206:1990 एक्सटेंडेड पास्कल सपोर्ट करता है <code>and_then</code> और <code>or_else</code>.<ref>{{cite web|url=http://www.gnu-pascal.de/gpc/and_005fthen.html#and_005fthen#GNU |title=and_then - The GNU Pascal Manual |publisher=Gnu-pascal.de |access-date=2013-08-24}}</ref><br><sup>7</sup> स्मॉलटाक तर्क के रूप में लंबे समय तक अल्प परिपथ शब्दार्थ का उपयोग करता है <code>and:</code> ब्लॉक (उदाहरण के लिए, <code>false and: [Transcript show: 'Wont see me']</code>) है।<br><sup>8</sup> सीएएसई कथनों का समर्थन करने वाली [[बुनियादी|मूलभूत]] भाषाएं सशर्त मूल्यांकन प्रणाली का उपयोग करके, न कि स्थिर लेबलों तक सीमित जंप टेबल के रूप में ऐसा करती हैं।<br><sup>9</sup> डेल्फी (प्रोग्रामिंग भाषा) और अल्प परिपथ मूल्यांकन के लिए [[ फ़्री पास्कल ]] डिफॉल्ट होता हैं। इसे कंपाइलर विकल्पों द्वारा बदला जा सकता है किन्तु व्यापक रूप से उपयोग नहीं किया जाता है।<br><sup>10</sup> मानक [[IEC 61131-3|आईईसी 61131-3]] वास्तव में यदि परिभाषित नहीं करता है कि क्या <code>AND</code> और <code>OR</code> अल्प परिपथ निरूपण का उपयोग करते हैं और यह ऑपरेटरों <code>AND_THEN</code> और <code>OR_ELSE</code> को परिभाषित नहीं करता है। तालिका में प्रविष्टियाँ दिखाती हैं कि यह बेकहॉफ़ ट्विनकैट® के लिए कैसे काम करता है।
<sup>2</sup> जब [[ऑपरेटर ओवरलोडिंग]] करता है, तो ऑपरेटर्स <code>&&</code> और <code>||</code> उत्सुक हैं और किसी भी प्रकार का रिटर्न दे सकते हैं।<br/>
<sup>3</sup> यह केवल रनटाइम-मूल्यांकित एक्सप्रेशन पर लागू होता है, <code>static if</code> और <code>static assert</code>. स्टेटिक इनिशियलाइज़र्स या मेनिफ़ेस्ट कांस्टेंट में एक्सप्रेशन उत्सुक मूल्यांकन का उपयोग करते हैं। <br>
<sup>4</sup> फोरट्रान ऑपरेटर न तो शॉर्ट-सर्किट हैं और न ही उत्सुक: भाषा विनिर्देश संकलक को अनुकूलन के लिए विधि का चयन करने की अनुमति देता है।<br/>
<sup>5</sup> पास्कल (प्रोग्रामिंग भाषा)#ISO/IEC 10206:1990 विस्तारित पास्कल|ISO/IEC 10206:1990 विस्तारित पास्कल शॉर्ट-सर्किटिंग की अनुमति देता है, लेकिन इसकी आवश्यकता नहीं है।<br/>
<sup>6</sup> ISO/IEC 10206:1990 एक्सटेंडेड पास्कल सपोर्ट करता है <code>and_then</code> और <code>or_else</code>.<ref>{{cite web|url=http://www.gnu-pascal.de/gpc/and_005fthen.html#and_005fthen#GNU |title=and_then - The GNU Pascal Manual |publisher=Gnu-pascal.de |access-date=2013-08-24}}</ref><br>
<sup>7</sup> स्मॉलटाक तर्क के रूप में लंबे समय तक शॉर्ट-सर्किट शब्दार्थ का उपयोग करता है <code>and:</code> एक ब्लॉक है (उदाहरण के लिए, <code>false and: [Transcript show: 'Wont see me']</code>).<br>
<sup>8</sup> CASE कथनों का समर्थन करने वाली [[बुनियादी]] भाषाएं सशर्त मूल्यांकन प्रणाली का उपयोग करके ऐसा करती हैं, न कि स्थिर लेबलों तक सीमित जंप टेबल के रूप में।<br>
<sup>9</sup> डेल्फी (प्रोग्रामिंग भाषा) और शॉर्ट सर्किट मूल्यांकन के लिए [[ फ़्री पास्कल ]] डिफॉल्ट। इसे कंपाइलर विकल्पों द्वारा बदला जा सकता है लेकिन व्यापक रूप से उपयोग नहीं किया जाता है।<br>
<sup>10</sup> मानक [[IEC 61131-3]] वास्तव में यदि परिभाषित नहीं करता है <code>AND</code> और <code>OR</code> शॉर्ट-सर्किट मूल्यांकन का उपयोग करें और यह ऑपरेटरों को परिभाषित नहीं करता है <code>AND_THEN</code> और <code>OR_ELSE</code>. तालिका में प्रविष्टियाँ दिखाती हैं कि यह बेकहॉफ़ ट्विनकैट® के लिए कैसे काम करता है।


== सामान्य उपयोग ==
== सामान्य उपयोग ==


=== दूसरे तर्क के अवांछित दुष्प्रभावों से बचना ===
=== दूसरे तर्क के अवांछित दुष्प्रभावों से बचना ===
C (प्रोग्रामिंग भाषा)|C-आधारित भाषा का उपयोग करते हुए सामान्य उदाहरण:
सी-आधारित भाषा का उपयोग करते हुए सामान्य उदाहरण:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
int denom = 0;
int denom = 0;
Line 276: Line 266:
}
}
</syntaxhighlight>
</syntaxhighlight>
इस उदाहरण में, शॉर्ट-सर्किट मूल्यांकन इसकी गारंटी देता है <code>myfunc(b)</code> कभी नहीं बुलाया जाता है। यह है क्योंकि <code>a != 0</code> असत्य का मूल्यांकन करता है। यह सुविधा दो उपयोगी प्रोग्रामिंग निर्माणों की अनुमति देती है।
इस उदाहरण में, अल्प परिपथ निरूपण इसकी गारंटी देता है कि <code>myfunc(b)</code> को कभी कॉल नहीं जाता है। यह है ऐसा इसलिए है क्योंकि <code>a!= 0</code> असत्य का मूल्यांकन करता है। यह सुविधा दो उपयोगी प्रोग्रामिंग निर्माणों की अनुमति देती है।


# यदि पहली उप-अभिव्यक्ति यह जाँचती है कि क्या एक महंगी संगणना की आवश्यकता है और जाँच असत्य का मूल्यांकन करती है, तो दूसरे तर्क में महंगी संगणना को समाप्त किया जा सकता है।
# यदि पहली उप-अभिव्यक्ति यह जाँचती है कि क्या महंगी संगणना की आवश्यकता है और जाँच असत्य का मूल्यांकन करती है, तो दूसरे तर्क में महंगी संगणना को समाप्त किया जा सकता है।
# यह एक निर्माण की अनुमति देता है जहां पहली अभिव्यक्ति ऐसी स्थिति की गारंटी देती है जिसके बिना दूसरी अभिव्यक्ति रन-टाइम त्रुटि का कारण बन सकती है।
# यह निर्माण की अनुमति देता है जहां पहली अभिव्यक्ति ऐसी स्थिति की गारंटी देती है जिसके बिना दूसरी अभिव्यक्ति रन-टाइम त्रुटि का कारण बन सकती है।


दोनों को निम्नलिखित सी स्निपेट में चित्रित किया गया है जहां न्यूनतम मूल्यांकन शून्य सूचक विचलन और अतिरिक्त मेमोरी दोनों को रोकता है:
दोनों को निम्नलिखित सी स्निपेट में चित्रित किया गया है जहां न्यूनतम मूल्यांकन शून्य सूचक विचलन और अतिरिक्त मेमोरी दोनों को रोकता है:
Line 295: Line 285:




=== मुहावरेदार सशर्त निर्माण ===
=== सिद्धप्रयुक्त सशर्त निर्माण ===


चूंकि न्यूनतम मूल्यांकन एक ऑपरेटर की सिमेंटिक परिभाषा का हिस्सा है और एक वैकल्पिक [[संकलक अनुकूलन]] नहीं है, इसलिए कई कोडिंग मुहावरे एक संक्षिप्त सशर्त निर्माण के रूप में इस पर भरोसा करते हैं। उदाहरणों में शामिल:
चूंकि न्यूनतम मूल्यांकन ऑपरेटर की सिमेंटिक परिभाषा का भाग है और वैकल्पिक [[संकलक अनुकूलन]] नहीं है, इसलिए कई कोडिंग शैली संक्षिप्त सशर्त निर्माण के रूप में इस पर विश्वाश करते हैं। उदाहरणों में सम्मिलित:


पर्ल मुहावरे:
पर्ल शैली:
<syntaxhighlight lang="perl">
<syntaxhighlight lang="perl">
some_condition or die;    # Abort execution if some_condition is false
some_condition or die;    # Abort execution if some_condition is false
some_condition and die;  # Abort execution if some_condition is true
some_condition and die;  # Abort execution if some_condition is true
</syntaxhighlight>
</syntaxhighlight>
POSIX शेल मुहावरे:<ref>{{cite web |url=https://unix.stackexchange.com/questions/190543/what-does-mean-in-bash |title=What does {{!}}{{!}} mean in bash? |publisher=stackexchange.com |access-date=2019-01-09}}</ref>
पोसिक्स शेल शैली:<ref>{{cite web |url=https://unix.stackexchange.com/questions/190543/what-does-mean-in-bash |title=What does {{!}}{{!}} mean in bash? |publisher=stackexchange.com |access-date=2019-01-09}}</ref>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
modprobe -q some_module && echo "some_module installed" || echo "some_module not installed"
modprobe -q some_module && echo "some_module installed" || echo "some_module not installed"
</syntaxhighlight>
</syntaxhighlight>
यह मुहावरा ऐसा मानता है <code>echo</code> विफल नहीं हो सकता।
यह शैली ऐसा मानती है <code>echo</code> विफल नहीं हो सकती हैं।


== संभावित समस्याएं ==
== संभावित समस्याएं ==


=== अनुपचारित दूसरी स्थिति अकुशल साइड इफेक्ट === की ओर ले जाती है
'''अनुपचारित दूसरी स्थिति अकुशल दुष्प्रभाव''' '''की ओर ले जाती है'''
इन लाभों के बावजूद, न्यूनतम मूल्यांकन उन प्रोग्रामरों के लिए समस्याएँ पैदा कर सकता है जो यह नहीं समझते (या भूल जाते हैं) कि यह हो रहा है। उदाहरण के लिए, कोड में
 
इन लाभों के अतिरिक्त, न्यूनतम मूल्यांकन उन प्रोग्रामरों के लिए समस्याएँ पैदा कर सकता है जो यह नहीं समझते (या भूल जाते हैं) कि यह हो रहा है। उदाहरण के लिए, कोड में
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
if (expressionA && myfunc(b)) {
if (expressionA && myfunc(b)) {
Line 319: Line 310:
}
}
</syntaxhighlight>
</syntaxhighlight>
अगर <code>myfunc(b)</code> इस पर ध्यान दिए बिना कुछ आवश्यक संचालन करने वाला है <code>do_something()</code> निष्पादित किया जाता है, जैसे कि सिस्टम संसाधनों का आवंटन, और <code>expressionA</code> तब असत्य के रूप में मूल्यांकन करता है <code>myfunc(b)</code> नहीं चलेगा, जिससे परेशानी हो सकती है। इस समस्या से बचने के लिए कुछ प्रोग्रामिंग भाषाओं, जैसे कि जावा (प्रोग्रामिंग लैंग्वेज) में दो ऑपरेटर होते हैं, एक जो न्यूनतम मूल्यांकन करता है और दूसरा जो नहीं करता है।
यदि <code>myfunc(b)</code> इस पर ध्यान दिए बिना कुछ आवश्यक संचालन करने वाला है चाहे <code>do_something()</code> सिस्टम संसाधनों को आवंटित करने जैसे निष्पादित किया गया हो, और <code>expressionA</code> तब असत्य के रूप में मूल्यांकन करता है तो <code>myfunc(b)</code> निष्पादित नहीं होगा जो समस्याएं उत्पन्न कर सकता है। कुछ प्रोग्रामिंग भाषा, जैसे कि जावा में दो ऑपरेटर होते हैं, एक जो न्यूनतम मूल्यांकन को नियोजित करता है और एक जो इस समस्या से बचने के लिए नहीं होता है।


खराब प्रदर्शन वाले साइड इफेक्ट स्टेटमेंट की समस्याओं को उचित प्रोग्रामिंग शैली के साथ आसानी से हल किया जा सकता है, यानी, बूलियन स्टेटमेंट में साइड इफेक्ट्स का उपयोग नहीं करना, क्योंकि मूल्यांकन में साइड इफेक्ट वाले मूल्यों का उपयोग आम तौर पर कोड को अपारदर्शी और त्रुटि-प्रवण बनाता है।<ref>{{cite web |url=http://www.itu.dk/people/sestoft/papers/SondergaardSestoft1990.pdf |title=संदर्भात्मक पारदर्शिता, निश्चितता और अनफोल्डेबिलिटी|publisher=Itu.dk |access-date=2013-08-24}}</ref>
खराब प्रदर्शन वाले दुष्प्रभाव कथन की समस्याओं को उचित प्रोग्रामिंग शैली के साथ आसानी से समाधान किया जा सकता है, अर्थात्, बूलियन कथन में दुष्प्रभावों का उपयोग नहीं करना, क्योंकि मूल्यांकन में दुष्प्रभाव वाले मूल्यों का उपयोग सामान्यतः कोड को अपारदर्शी और त्रुटि-प्रवण बनाता है।<ref>{{cite web |url=http://www.itu.dk/people/sestoft/papers/SondergaardSestoft1990.pdf |title=संदर्भात्मक पारदर्शिता, निश्चितता और अनफोल्डेबिलिटी|publisher=Itu.dk |access-date=2013-08-24}}</ref>




=== सीमित अनुकूलन के कारण कम दक्षता ===
=== सीमित अनुकूलन के कारण कम दक्षता ===


शॉर्ट-सर्किटिंग से आधुनिक [[सेंट्रल प्रोसेसिंग यूनिट]] (सीपीयू) पर [[शाखा भविष्यवाणी]] में त्रुटियां हो सकती हैं, और नाटकीय रूप से प्रदर्शन कम हो सकता है। एक उल्लेखनीय उदाहरण रे ट्रेसिंग (भौतिकी) में अक्ष संरेखित बॉक्स चौराहे कोड के साथ अत्यधिक अनुकूलित किरण है।{{clarify|date=November 2010}} कुछ संकलक ऐसे मामलों का पता लगा सकते हैं और तेज़ कोड उत्सर्जित कर सकते हैं, लेकिन प्रोग्रामिंग भाषा शब्दार्थ इस तरह के अनुकूलन को बाधित कर सकता है।{{citation needed|date=October 2016}}
अल्प परिपथिंग से आधुनिक [[सेंट्रल प्रोसेसिंग यूनिट]] (सीपीयू) पर [[शाखा भविष्यवाणी]] में त्रुटियां हो सकती हैं, और नाटकीय रूप से प्रदर्शन कम हो सकता है। उल्लेखनीय उदाहरण रे ट्रेसिंग (भौतिकी) में अक्ष संरेखित बॉक्स चौराहे कोड के साथ अत्यधिक अनुकूलित किरण है।{{clarify|date=November 2010}} कुछ संकलक ऐसे स्थितियों का पता लगा सकते हैं और तेज़ कोड उत्सर्जित कर सकते हैं, किन्तु प्रोग्रामिंग भाषा शब्दार्थ इस प्रकार के अनुकूलन को बाधित कर सकता है।{{citation needed|date=October 2016}}


ऐसे मामले के लिए अनुकूलन करने में असमर्थ एक कंपाइलर का एक उदाहरण जावा (प्रोग्रामिंग भाषा) का हॉटस्पॉट वीएम 2012 तक है।<ref>{{cite web |last1=Wasserman |first1=Louis |title=java - ऐसे कौन से मामले हैं जिनमें बिना शर्त AND (& के बजाय &&) का उपयोग करना बेहतर है|url=https://stackoverflow.com/a/11412121 |website=Stack Overflow}}</ref>
ऐसे स्थिति के लिए अनुकूलन करने में असमर्थ कंपाइलर का उदाहरण जावा (प्रोग्रामिंग भाषा) का हॉटस्पॉट वीएम 2012 तक है।<ref>{{cite web |last1=Wasserman |first1=Louis |title=java - ऐसे कौन से मामले हैं जिनमें बिना शर्त AND (& के बजाय &&) का उपयोग करना बेहतर है|url=https://stackoverflow.com/a/11412121 |website=Stack Overflow}}</ref>




Line 336: Line 327:
==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}
[[Category: उदाहरण सी कोड वाले लेख]] [[Category: पर्ल कोड के उदाहरण वाले लेख]] [[Category: संकलक अनुकूलन]] [[Category: सशर्त निर्माण]] [[Category: मूल्यांकन रणनीति]] [[Category: कार्यात्मक प्रोग्रामिंग भाषाओं का कार्यान्वयन]]


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with unsourced statements from October 2016]]
[[Category:CS1 maint]]
[[Category:Created On 01/03/2023]]
[[Category:Created On 01/03/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia articles needing clarification from November 2010]]
[[Category:उदाहरण सी कोड वाले लेख]]
[[Category:कार्यात्मक प्रोग्रामिंग भाषाओं का कार्यान्वयन]]
[[Category:पर्ल कोड के उदाहरण वाले लेख]]
[[Category:मूल्यांकन रणनीति]]
[[Category:संकलक अनुकूलन]]
[[Category:सशर्त निर्माण]]

Latest revision as of 17:46, 19 March 2023

अल्प परिपथ निरूपण, न्यूनतम मूल्यांकन, या मैककार्थी मूल्यांकन (जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के बाद) कुछ प्रोग्रामिंग भाषाओं में कुछ बूलियन ऑपरेटरों का शब्दार्थ है जिसमें दूसरा तर्क केवल तभी निष्पादित या मूल्यांकन किया जाता है जब पहला तर्क निर्धारित करने के लिए पर्याप्त नहीं होता है। अभिव्यक्ति का मूल्य: जब AND का पहला तर्क false का मूल्यांकन करता है कुल मान false होना चाहिए; और जब OR का पहला तर्क true का मूल्यांकन करता है, तो कुल मान true होना चाहिए।

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

अल्प परिपथ ऑपरेटर, प्रभाव में, सरल अंकगणितीय ऑपरेटरों के बजाय नियंत्रण संरचनाएं हैं, क्योंकि वे सख्त कार्य नहीं हैं। अनिवार्य भाषा के शब्दों में (विशेष रूप से सी (प्रोग्रामिंग भाषा) और सी ++), जहां दुष्प्रभाव महत्वपूर्ण, अल्प परिपथ ऑपरेटर अनुक्रम बिंदु प्रस्तुत करते हैं - वे वे दूसरे तर्क को संसाधित करने से पहले (वैकल्पिक रूप से) किसी भी दुष्प्रभाव (कंप्यूटर विज्ञान) सहित पहले तर्क का पूरी तरह से मूल्यांकन करते हैं। ऐल्गॉल 68 ने उपयोगकर्ता-परिभाषित अल्प परिपथ ऑपरेटरों और प्रक्रियाओं को प्राप्त करने के लिए प्रक्रिया का उपयोग किया था।

समस्यात्मक के रूप में अल्प परिपथ ऑपरेटरों के उपयोग की आलोचना की गई है:

सशर्त संयोजक — "cand" और "cor" संक्षेप में — ... कम निर्दोष हैं जितना वे पहली द्रष्टि में लग सकते हैं। उदाहरण के लिए, cor cand पर वितरित नहीं करता: तुलना करें

(A cand B) cor C साथ (A cor C) cand (B cor C);

¬A ∧ C के स्थिति में, दूसरी अभिव्यक्ति के लिए B को परिभाषित करने की आवश्यकता है, पहले वाले को को परिभाषित करने की आवश्यकता नही है। क्योंकि सशर्त संयोजक इस प्रकार प्रोग्रामों के बारे में औपचारिक तर्क को जटिल करते हैं, उन्हें उत्तम विधि से टाला जाता है।

— एडजर डब्ल्यू. डिज्कस्ट्रा<रेफरी>एडजर डब्ल्यू. दिज्क्स्ट्रा "कुछ सीमा तक निराशाजनक पत्राचार पर", ईडब्ल्यूडी1009-0, 25 मई 1987 /ewd10xx/EWD1009.PDF पूरा टेक्स्ट</ref>

परिभाषा

अल्प परिपथ निरूपण को लागू करने वाली किसी भी प्रोग्रामिंग भाषा में, अभिव्यक्ति x and y सशर्त (प्रोग्रामिंग) अभिव्यक्ति के बराबर है if x then y else x, और अभिव्यक्ति x or y if x then x else y के बराबर है। किसी भी स्थिति में, x का मूल्यांकन केवल बार किया जाता है।

ऊपर दी गई सामान्यीकृत परिभाषा शिथिल रूप से टाइप की गई भाषाओं को समायोजित करती है, जिनमें दो सत्य-मान True और False से अधिक होते हैं, जहां अल्प परिपथ ऑपरेटर अंतिम मूल्यांकन किए गए अभिव्यक्ति को वापस कर सकते हैं। इसे नीचे दी गई तालिका में अंतिम मान कहा जाता है। सख्ती से टाइप की गई भाषा के लिए, बूलियन स्थिति के लिए अभिव्यक्ति को क्रमशः if x then y else false और if x then true else y के लिए सरल किया जाता है।

वरीयता

यद्यपि AND ऑपरेटर की प्राथमिकता लेता है OR कई भाषाओं में, यह अल्प परिपथ निरूपण की सार्वभौमिक संपत्ति नहीं है। पोसिक्स शेल का कमांड-लिस्ट सिंटैक्स समान प्राथमिकता लेने वाले और दूसरे के साथ बाएं-सहयोगी होने वाले दो ऑपरेटर का उदाहरण है।[1]: §2.9.3 

निम्नलिखित सरल बाएँ से दाएँ मूल्यांकनकर्ता एक continue रखने के द्वारा AND ऊपर OR की प्राथमिकता को लागू करता है:

function short-circuit-eval (operators, values)
    let result := True
    for each (op, val) in (operators, values):
        if op = "AND" && result = False
            continue
        else if op = "OR" && result = True
            return result
        else
            result := val
    return result

औपचारिकता

अल्प परिपथ लॉजिक, दुष्प्रभाव के साथ या बिना, होरे लॉजिक # सशर्त नियम के आधार पर औपचारिक रूप दिया गया है। होरे की सशर्त। नतीजा यह है कि गैर-अल्प परिपथिंग ऑपरेटरों को मूल्यांकन के समान अनुक्रम के लिए अल्प परिपथ तर्क से परिभाषित किया जा सकता है।[2]


सामान्य प्रोग्रामिंग और स्क्रिप्टिंग भाषाओं में समर्थन

विभिन्न भाषाओं में बूलियन ऑपरेटर
भाषा इच्छुक संचालक अल्प-परिपथ संचालक परिणाम प्रकार
उन्नत व्यापार अनुप्रयोग प्रोग्रामिंग (एबीएपी) none and, or बूलियन1
एडीए and, or and then, or else बूलियन
ऐल्गॉल 68 and, &, ∧ ; or, ∨ andf , orf (both user defined) बूलियन
एपीएल , , (nand), (nor), etc. :AndIf, :OrIf बूलियन1
एडब्लूके none &&, || बूलियन
बश none &&, || बूलियन
सी, उद्देश्य-सी none &&, ||, ?[3] int (&&,||), ऑपंड-निर्भर (?)
सी++2 none &&, ||, ?[4] बूलियन (&&,||), ऑपंड-निर्भर (?)
सी# &, | &&, ||, ?, ?? बूलियन (&&,||), ऑपंड-निर्भर (?, ??)
कोल्डफ्यूजन मार्कअप भाषा (सीएफएमएल) none AND, OR, &&, || बूलियन
डी3 &, | &&, ||, ? बूलियन (&&,||), ऑपंड-निर्भर (?)
एफिल and, or and then, or else बूलियन
एर्लांगन and, or andalso, orelse बूलियन
फोरट्रान4 .and., .or. .and., .or. बूलियन
गो, हास्केल, ओकैमल none &&, || बूलियन
जावा, मतलब, आर, स्विफ्ट &, | &&, || बूलियन
जावास्क्रिप्ट, जूलिया &, | &&, || अंतिम मान
लेस्सो none and, or, &&, || अंतिम मान
कोटलिन and, or &&, || बूलियन
लिस्प, लुआ, स्कीम none and, or अंतिम मान
मम्प्स (एम) &, ! none संख्यात्मक
मोडुला -2 none AND, OR बूलियन
ओबेरॉन none &, OR बूलियन
ओकैमल none &&, || बूलियन
पास्कल and, or5,9 and_then, or_else6,9 बूलियन
पर्ल &, | &&, and, ||, or अंतिम मान
रूबी and, or &&, || अंतिम मान
पीएचपी &, | &&, and, ||, or बूलियन
पोसिक्स शेल (कमांड सूची) none &&, || अंतिम मान (प्रस्थान)
पॉवरशेल स्क्रिप्टिंग भाषा none -and, -or बूलियन
पायथन &, | and, or अंतिम मान
रस्ट &, | &&, ||[5] बूलियन
स्मालटाक &, | and:, or:7 बूलियन
स्टैंडर्ड एमएल Un­known andalso, orelse बूलियन
टीटीसीएन-3 none and, or[6] बूलियन
बेकहॉफ़ ट्विनकैट® (आईईसी 61131-3)10 AND, OR AND_THEN,[7] OR_ELSE[8] बूलियन
विजुअल बेसिक .नेट And, Or AndAlso, OrElse बूलियन
विजुअल बेसिक, एप्लीकेशन के लिए विजुअल बेसिक (वीबीए) And, Or Select Case8 संख्यात्मक
वोल्फ्राम भाषा And @@ {...}, Or @@ {...} And, Or, &&, || बूलियन
जेडटीटी &, | none बूलियन

1 एबीएपी और एपीएल का कोई विशिष्ट बूलियन प्रकार नहीं है।
2 जब ऑपरेटर ओवरलोडिंग करता है, तो ऑपरेटर्स && और || उत्सुक हैं और किसी भी प्रकार का रिटर्न दे सकते हैं।
3 यह केवल रनटाइम-मूल्यांकित एक्सप्रेशन, static if और static assert पर लागू होता हैं। स्टेटिक इनिशियलाइज़र्स या मेनिफ़ेस्ट कांस्टेंट में एक्सप्रेशन उत्सुक मूल्यांकन का उपयोग करते हैं।
4 फोरट्रान ऑपरेटर न तो अल्प परिपथ हैं और न ही उत्सुक: भाषा विनिर्देश संकलक को अनुकूलन के लिए विधि का चयन करने की अनुमति देता है।
5 पास्कल (प्रोग्रामिंग भाषा) आईएसओ/आईईसी 10206:1990 विस्तारित पास्कल आईएसओ/आईईसी 10206:1990 विस्तारित पास्कल अल्प परिपथिंग की अनुमति देता है, किन्तु इसकी आवश्यकता नहीं है।
6 आईएसओ/आईईसी 10206:1990 एक्सटेंडेड पास्कल सपोर्ट करता है and_then और or_else.[9]
7 स्मॉलटाक तर्क के रूप में लंबे समय तक अल्प परिपथ शब्दार्थ का उपयोग करता है and: ब्लॉक (उदाहरण के लिए, false and: [Transcript show: 'Wont see me']) है।
8 सीएएसई कथनों का समर्थन करने वाली मूलभूत भाषाएं सशर्त मूल्यांकन प्रणाली का उपयोग करके, न कि स्थिर लेबलों तक सीमित जंप टेबल के रूप में ऐसा करती हैं।
9 डेल्फी (प्रोग्रामिंग भाषा) और अल्प परिपथ मूल्यांकन के लिए फ़्री पास्कल डिफॉल्ट होता हैं। इसे कंपाइलर विकल्पों द्वारा बदला जा सकता है किन्तु व्यापक रूप से उपयोग नहीं किया जाता है।
10 मानक आईईसी 61131-3 वास्तव में यदि परिभाषित नहीं करता है कि क्या AND और OR अल्प परिपथ निरूपण का उपयोग करते हैं और यह ऑपरेटरों AND_THEN और OR_ELSE को परिभाषित नहीं करता है। तालिका में प्रविष्टियाँ दिखाती हैं कि यह बेकहॉफ़ ट्विनकैट® के लिए कैसे काम करता है।

सामान्य उपयोग

दूसरे तर्क के अवांछित दुष्प्रभावों से बचना

सी-आधारित भाषा का उपयोग करते हुए सामान्य उदाहरण:

int denom = 0;
if (denom != 0 && num / denom)
{
    ... // ensures that calculating num/denom never results in divide-by-zero error   
}

निम्नलिखित उदाहरण पर विचार करें:

int a = 0;
if (a != 0 && myfunc(b))
{
    do_something();
}

इस उदाहरण में, अल्प परिपथ निरूपण इसकी गारंटी देता है कि myfunc(b) को कभी कॉल नहीं जाता है। यह है ऐसा इसलिए है क्योंकि a!= 0 असत्य का मूल्यांकन करता है। यह सुविधा दो उपयोगी प्रोग्रामिंग निर्माणों की अनुमति देती है।

  1. यदि पहली उप-अभिव्यक्ति यह जाँचती है कि क्या महंगी संगणना की आवश्यकता है और जाँच असत्य का मूल्यांकन करती है, तो दूसरे तर्क में महंगी संगणना को समाप्त किया जा सकता है।
  2. यह निर्माण की अनुमति देता है जहां पहली अभिव्यक्ति ऐसी स्थिति की गारंटी देती है जिसके बिना दूसरी अभिव्यक्ति रन-टाइम त्रुटि का कारण बन सकती है।

दोनों को निम्नलिखित सी स्निपेट में चित्रित किया गया है जहां न्यूनतम मूल्यांकन शून्य सूचक विचलन और अतिरिक्त मेमोरी दोनों को रोकता है:

bool is_first_char_valid_alpha_unsafe(const char *p)
{
    return isalpha(p[0]); // SEGFAULT highly possible with p == NULL
}

bool is_first_char_valid_alpha(const char *p)
{
    return p != NULL && isalpha(p[0]); // 1) no unneeded isalpha() execution with p == NULL, 2) no SEGFAULT risk
}


सिद्धप्रयुक्त सशर्त निर्माण

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

पर्ल शैली:

some_condition or die;    # Abort execution if some_condition is false
some_condition and die;   # Abort execution if some_condition is true

पोसिक्स शेल शैली:[10]

modprobe -q some_module && echo "some_module installed" || echo "some_module not installed"

यह शैली ऐसा मानती है echo विफल नहीं हो सकती हैं।

संभावित समस्याएं

अनुपचारित दूसरी स्थिति अकुशल दुष्प्रभाव की ओर ले जाती है

इन लाभों के अतिरिक्त, न्यूनतम मूल्यांकन उन प्रोग्रामरों के लिए समस्याएँ पैदा कर सकता है जो यह नहीं समझते (या भूल जाते हैं) कि यह हो रहा है। उदाहरण के लिए, कोड में

if (expressionA && myfunc(b)) {
    do_something();
}

यदि myfunc(b) इस पर ध्यान दिए बिना कुछ आवश्यक संचालन करने वाला है चाहे do_something() सिस्टम संसाधनों को आवंटित करने जैसे निष्पादित किया गया हो, और expressionA तब असत्य के रूप में मूल्यांकन करता है तो myfunc(b) निष्पादित नहीं होगा जो समस्याएं उत्पन्न कर सकता है। कुछ प्रोग्रामिंग भाषा, जैसे कि जावा में दो ऑपरेटर होते हैं, एक जो न्यूनतम मूल्यांकन को नियोजित करता है और एक जो इस समस्या से बचने के लिए नहीं होता है।

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


सीमित अनुकूलन के कारण कम दक्षता

अल्प परिपथिंग से आधुनिक सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) पर शाखा भविष्यवाणी में त्रुटियां हो सकती हैं, और नाटकीय रूप से प्रदर्शन कम हो सकता है। उल्लेखनीय उदाहरण रे ट्रेसिंग (भौतिकी) में अक्ष संरेखित बॉक्स चौराहे कोड के साथ अत्यधिक अनुकूलित किरण है।[clarification needed] कुछ संकलक ऐसे स्थितियों का पता लगा सकते हैं और तेज़ कोड उत्सर्जित कर सकते हैं, किन्तु प्रोग्रामिंग भाषा शब्दार्थ इस प्रकार के अनुकूलन को बाधित कर सकता है।[citation needed]

ऐसे स्थिति के लिए अनुकूलन करने में असमर्थ कंपाइलर का उदाहरण जावा (प्रोग्रामिंग भाषा) का हॉटस्पॉट वीएम 2012 तक है।[12]


यह भी देखें

  • परवाह न करने की स्थिति

संदर्भ

  1. "शेल कमांड लैंग्वेज". pubs.opengroup.org.
  2. Jan A. Bergstra, A. Ponse, D.J.C. Staudt (2010). "शॉर्ट-सर्किट तर्क". arXiv:1010.3674 [cs.LO].{{cite arXiv}}: CS1 maint: uses authors parameter (link)
  3. ISO/IEC 9899 standard, section 6.5.13
  4. ISO/IEC IS 14882 draft.
  5. "std::ops - Rust". doc.rust-lang.org. Retrieved 2019-02-12.
  6. ETSI ES 201 873-1 V4.10.1, section 7.1.4
  7. "Beckhoff Information System - English". infosys.beckhoff.com. Retrieved 2021-08-16.
  8. "Beckhoff Information System - English". infosys.beckhoff.com. Retrieved 2021-08-16.
  9. "and_then - The GNU Pascal Manual". Gnu-pascal.de. Retrieved 2013-08-24.
  10. "What does || mean in bash?". stackexchange.com. Retrieved 2019-01-09.
  11. "संदर्भात्मक पारदर्शिता, निश्चितता और अनफोल्डेबिलिटी" (PDF). Itu.dk. Retrieved 2013-08-24.
  12. Wasserman, Louis. "java - ऐसे कौन से मामले हैं जिनमें बिना शर्त AND (& के बजाय &&) का उपयोग करना बेहतर है". Stack Overflow.