ऑपरेटर (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
Line 1: Line 1:
{{short description|Construct associated with a mathematical operation in computer programs}}{{About|कंप्यूटर प्रोग्रामिंग में ऑपरेटर|अन्य उपयोग|ऑपरेटर (बहुविकल्पी)}}
{{About|कंप्यूटर प्रोग्रामिंग में ऑपरेटर|अन्य उपयोग|ऑपरेटर (बहुविकल्पी)}}
[[कंप्यूटर प्रोग्रामिंग|कंप्यूटर क्रमदेशन]] में, ऑपरेटर क्रमदेशन भाषाओं के भीतर परिभाषित निर्माण होते हैं जो सामान्यतः [[सबरूटीन|कार्यों की]] तरह व्यवहार करते हैं, लेकिन जो वाक्य-विन्यास (सिंटैक्स) या शब्दार्थ (सिमेंटिक्स) से भिन्न होते हैं।
[[कंप्यूटर प्रोग्रामिंग|कंप्यूटर क्रमदेशन]] में, ऑपरेटर क्रमदेशन लैंग्वेज के भीतर परिभाषित निर्माण होते हैं जो सामान्यतः [[सबरूटीन|कार्यों की]] तरह व्यवहार करते हैं, लेकिन जो वाक्य-विन्यास (सिंटैक्स) या शब्दार्थ (सिमेंटिक्स) से भिन्न होते हैं।


सामान्य सरल उदाहरणों में अंकगणित (उदाहरण के साथ जोड़), तुलना (उदाहरण के लिए "greater than" with <code>></code>), और तार्किक संचालन (जैसे <code>AND</code>, कुछ भाषाओं में <code>&amp;&amp;</code> भी लिखा गया) शामिल हैं। अधिक शामिल उदाहरणों में [[असाइनमेंट (कंप्यूटर विज्ञान)|प्रदत्त कार्य]] (सामान्यतः <code>=</code> या <code>:=</code>), अभिलेख या उद्देश्य में क्षेत्र अभिगम (सामान्यतः <code>.</code>), और [[स्कोप रिज़ॉल्यूशन ऑपरेटर|विस्तार समाधान ऑपरेटर]] (प्रायः <code>::</code> या <code>.</code>) शामिल हैं। भाषाएं सामान्यतः अंतर्निहित ऑपरेटरों के एक समूह को परिभाषित करती हैं, और कुछ मामलों में उपयोगकर्ताओं को मौजूदा ऑपरेटरों के लिए नए अर्थ जोड़ने या पूरी तरह से नए ऑपरेटरों को परिभाषित करने की अनुमति देती हैं।
सामान्य सरल उदाहरणों में अंकगणित (उदाहरण के साथ जोड़), तुलना (उदाहरण के लिए "greater than" with <code>></code>), और तार्किक संचालन (जैसे <code>AND</code>, कुछ लैंग्वेज में <code>&amp;&amp;</code> भी लिखा गया) सम्मिलित हैं। अधिक सम्मिलित उदाहरणों में [[असाइनमेंट (कंप्यूटर विज्ञान)|प्रदत्त कार्य]] (सामान्यतः <code>=</code> या <code>:=</code>), अभिलेख या उद्देश्य में क्षेत्र अभिगम (सामान्यतः <code>.</code>), और [[स्कोप रिज़ॉल्यूशन ऑपरेटर|विस्तार समाधान ऑपरेटर]] (प्रायः <code>::</code> या <code>.</code>) सम्मिलित हैं। लैंग्वेज सामान्यतः अंतर्निहित ऑपरेटरों के एक समूह को परिभाषित करती हैं, और कुछ मामलों में उपयोगकर्ताओं को उस्थिपत ऑपरेटरों के लिए नए अर्थ जोड़ने या पूरी तरह से नए ऑपरेटरों को परिभाषित करने की अनुमति देती हैं।


== रचनाक्रम ==
== रचनाक्रम ==
वाक्य-विन्यास रूप से ऑपरेटर सामान्यतः कार्यों के विपरीत होते हैं। अधिकांश भाषाओं में, कार्यों को संचालन स्तर और संबद्धता के निश्चित क्रम के साथ उपसर्ग ऑपरेटर के एक विशेष रूप के रूप में देखा जा सकता है, प्रायः अनिवार्य कोष्ठकों के साथ उदा <code>Func(a)</code> (या <code>(Func a)</code> लिस्प में (क्रमदेशन भाषा))। अधिकांश भाषाएँ क्रमादेशक (प्रोग्रामर)-परिभाषित कार्यों का समर्थन करती हैं, लेकिन वास्तव में क्रमादेशक-परिभाषित ऑपरेटरों का समर्थन करने का दावा नहीं कर सकती हैं, जब तक कि उनके पास उपसर्ग संकेतन से अधिक और एक से अधिक पूर्ववर्ती स्तर न हों। शब्दार्थतः रूप से ऑपरेटरों को अलग-अलग उद्यम संकेतन और सीमित संख्या में प्राचल (पैरामीटर) (सामान्यतः 1 या 2) के साथ कार्य के विशेष रूप के रूप में देखा जा सकता है।
वाक्य-विन्यास रूप से ऑपरेटर सामान्यतः कार्यों के विपरीत होते हैं। अधिकांश लैंग्वेज में, कार्यों को संचालन स्तर और संबद्धता के निश्चित क्रम के साथ उपसर्ग ऑपरेटर के एक विशेष रूप के रूप में देखा जा सकता है, प्रायः अनिवार्य कोष्ठकों के साथ उदा <code>Func(a)</code> (या <code>(Func a)</code> लिस्प में (क्रमदेशन लैंग्वेज))। अधिकांश भाषाएँ क्रमादेशक (प्रोग्रामर)-परिभाषित कार्यों का समर्थन करती हैं, लेकिन वास्तव में क्रमादेशक-परिभाषित ऑपरेटरों का समर्थन करने का दावा नहीं कर सकती हैं, जब तक कि उनके पास उपसर्ग संकेतन से अधिक और एक से अधिक पूर्ववर्ती स्तर न हों। शब्दार्थतः रूप से ऑपरेटरों को अलग-अलग उद्यम संकेतन और सीमित संख्या में प्राचल (पैरामीटर) (सामान्यतः 1 या 2) के साथ कार्य के विशेष रूप के रूप में देखा जा सकता है।


इसके संकार्य (संकार्य) के संबंध में ऑपरेटर की स्थिति [[पोलिश संकेतन|उपसर्ग]], [[इंफिक्स नोटेशन|इंफिक्स]] या [[पोस्टफिक्स नोटेशन|पोस्टफिक्स]] हो सकती है, और एक ऑपरेटर को शामिल करने वाली अभिव्यक्ति (कंप्यूटर साइंस) का रचनाक्रम इसकी एरिटी (संचालन की संख्या), पूर्वता, और (यदि लागू हो), सहयोगीता पर निर्भर करता है ।अधिकांश क्रमदेशन भाषाएं [[बाइनरी ऑपरेशन|बाइनरी ऑपरेटरों]] और कुछ [[एकात्मक ऑपरेशन|एकात्मक ऑपरेटरों]] का समर्थन करती हैं, कुछ अधिक संकार्य का समर्थन करती हैं, कुछ अधिक संकार्य का समर्थन करती हैं, जैसे ?: C में ऑपरेटर, जो त्रिगुट है। उपसर्ग एकाधारी (यूनरी) ऑपरेटर हैं, जैसे एकाधारी ऋण <code>-x</code>, और पोस्टफ़िक्स एकाधारी ऑपरेटर्स, जैसे [[बाद वेतन वृद्धि]] <code>x++</code>; और बाइनरी संचालन इंफिक्स हैं, जैसे <code>x + y</code> या <code>x = y</code>. उच्च एरिटी के इन्फिक्स संचालन के लिए अतिरिक्त प्रतीकों की आवश्यकता होती है, जैसे [[टर्नरी ऑपरेटर|त्रिगुट ऑपरेटर]]?: C में, एक के रूप में लिखा जाता है <code>a? b: c</code> - वास्तव में, चूंकि यह एकमात्र सामान्य उदाहरण है, इसे प्रायः त्रिगुटरी ऑपरेटर के रूप में जाना जाता है। हालाँकि, उपसर्ग और पोस्टफ़िक्स संचालन किसी भी वांछित धर्मार्थ का समर्थन कर सकते हैं, जैसे कि <code>1 2 3 4 +</code>.
इसके संकार्य (संकार्य) के संबंध में ऑपरेटर की स्थिति [[पोलिश संकेतन|उपसर्ग]], [[इंफिक्स नोटेशन|इंफिक्स]] या [[पोस्टफिक्स नोटेशन|पोस्टफिक्स]] हो सकती है, और एक ऑपरेटर को सम्मिलित करने वाली अभिव्यक्ति (कंप्यूटर साइंस) का रचनाक्रम इसकी एरिटी (संचालन की संख्या), पूर्वता, और (यदि लागू हो), सहयोगीता पर निर्भर करता हैlअ धिकांश क्रमदेशन लैंग्वेज [[बाइनरी ऑपरेशन|बाइनरी ऑपरेटरों]] और कुछ [[एकात्मक ऑपरेशन|एकात्मक ऑपरेटरों]] का समर्थन करती हैं, कुछ अधिक संकार्य का समर्थन करती हैं, कुछ अधिक संकार्य का समर्थन करती हैं, जैसे ?: C में ऑपरेटर, जो त्रिगुट है। उपसर्ग एकाधारी (यूनरी) ऑपरेटर हैं, जैसे एकाधारी ऋण <code>-x</code>, और पोस्टफ़िक्स एकाधारी ऑपरेटर्स, जैसे [[बाद वेतन वृद्धि]] <code>x++</code>; और बाइनरी संचालन इंफिक्स हैं, जैसे <code>x + y</code> या <code>x = y</code>. उच्च एरिटी के इन्फिक्स संचालन के लिए अतिरिक्त प्रतीकों की आवश्यकता होती है, जैसे [[टर्नरी ऑपरेटर|त्रिगुट ऑपरेटर]]?: C में, एक के रूप में लिखा जाता है <code>a? b: c</code> - वास्तव में, चूंकि यह एकमात्र सामान्य उदाहरण है, इसे प्रायः त्रिगुटरी ऑपरेटर के रूप में जाना जाता है। हालाँकि, उपसर्ग और पोस्टफ़िक्स संचालन किसी भी वांछित धर्मार्थ का समर्थन कर सकते हैं, जैसे कि <code>1 2 3 4 +</code>.


कभी-कभी<ref>{{Cite web|url=https://reference.wolfram.com/language/tutorial/OperatorInputForms.html.en|title=ऑपरेटर इनपुट फॉर्म-वोल्फ्राम लैंग्वेज डॉक्यूमेंटेशन|website=reference.wolfram.com}}</ref><ref>{{Cite web|url=http://maxima.sourceforge.net/docs/manual/maxima_7.html|title=मैक्सिमा 5.42.0 मैनुअल: 7. ऑपरेटर्स|website=maxima.sourceforge.net}}</ref> किसी भाषा के कुछ हिस्सों को "मैचफिक्स" या "सिकमफिक्स" ऑपरेटरों के रूप में वर्णित किया जा सकता है,<ref>{{Cite web|url=https://mythryl.org/my-Prefix__Postfix_and_Circumfix_Operators.html|title=उपसर्ग, पोस्टफिक्स और सर्कमफिक्स ऑपरेटर्स|website=mythryl.org}}</ref><ref>{{Cite web|url=http://doc.perl6.org/language/operators#___top|title=ऑपरेटर्स|website=doc.perl6.org}}</ref> या तो भाषा के विवरण या कार्यान्वयन को सरल बनाने के लिए। एक सिकमफ़िक्स ऑपरेटर में दो या दो से अधिक भाग होते हैं जो इसके संकार्य को घेरते हैं। सर्कमफ़िक्स ऑपरेटरों की सर्वोच्च प्राथमिकता होती है, उनकी सामग्री का मूल्यांकन किया जाता है और परिणामी मूल्य आसपास की अभिव्यक्ति में उपयोग किया जाता है। सबसे परिचित सर्कमफ़िक्स ऑपरेटर ऊपर उल्लिखित कोष्ठक हैं, जो यह इंगित करने के लिए उपयोग किया जाता है कि किसी अभिव्यक्ति के किन हिस्सों का मूल्यांकन दूसरों से पहले किया जाना है। भौतिकी से एक अन्य उदाहरण डीरेक के ब्रा-केट संकेतन का [[आंतरिक उत्पाद स्थान|आंतरिक उत्पाद]] अंकन है। सर्कमफ़िक्स ऑपरेटर विशेष रूप से उन संचालन को निरूपित करने के लिए उपयोगी होते हैं जिनमें कई या अलग-अलग संख्या में संकार्य शामिल होते हैं।
कभी-कभी<ref>{{Cite web|url=https://reference.wolfram.com/language/tutorial/OperatorInputForms.html.en|title=ऑपरेटर इनपुट फॉर्म-वोल्फ्राम लैंग्वेज डॉक्यूमेंटेशन|website=reference.wolfram.com}}</ref><ref>{{Cite web|url=http://maxima.sourceforge.net/docs/manual/maxima_7.html|title=मैक्सिमा 5.42.0 मैनुअल: 7. ऑपरेटर्स|website=maxima.sourceforge.net}}</ref> किसी लैंग्वेज के कुछ हिस्सों को "मैचफिक्स" या "सिकमफिक्स" ऑपरेटरों के रूप में वर्णित किया जा सकता है,<ref>{{Cite web|url=https://mythryl.org/my-Prefix__Postfix_and_Circumfix_Operators.html|title=उपसर्ग, पोस्टफिक्स और सर्कमफिक्स ऑपरेटर्स|website=mythryl.org}}</ref><ref>{{Cite web|url=http://doc.perl6.org/language/operators#___top|title=ऑपरेटर्स|website=doc.perl6.org}}</ref> या तो लैंग्वेज के विवरण या कार्यान्वयन को सरल बनाने के लिए। एक सिकमफ़िक्स ऑपरेटर में दो या दो से अधिक भाग होते हैं जो इसके संकार्य को घेरते हैं। सर्कमफ़िक्स ऑपरेटरों की सर्वोच्च प्राथमिकता होती है, उनकी सामग्री का मूल्यांकन किया जाता है और परिणामी मूल्य आसपास की अभिव्यक्ति में उपयोग किया जाता है। सबसे परिचित सर्कमफ़िक्स ऑपरेटर ऊपर उल्लिखित कोष्ठक हैं, जो यह इंगित करने के लिए उपयोग किया जाता है कि किसी अभिव्यक्ति के किन हिस्सों का मूल्यांकन दूसरों से पहले किया जाना है। भौतिकी से एक अन्य उदाहरण डीरेक के ब्रा-केट संकेतन का [[आंतरिक उत्पाद स्थान|आंतरिक उत्पाद]] अंकन है। सर्कमफ़िक्स ऑपरेटर विशेष रूप से उन संचालन को निरूपित करने के लिए उपयोगी होते हैं जिनमें कई या अलग-अलग संख्या में संकार्य सम्मिलित होते हैं।


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


== शब्दार्थ ==
== शब्दार्थ ==
Line 18: Line 18:
साधारण मामलों में यह सामान्य कार्य आवाहन के समान होता है; उदाहरण के लिए, अतिरिक्त <code>x + y</code> सामान्यतः कार्य आवाहन <code>add(x, y)</code> और तुलना <code>x &lt; y</code> प्रति <code>lt(x, y)</code> के बराबर होता है, जिसका अर्थ है कि तर्कों का मूल्यांकन उनके सामान्य तरीके से किया जाता है, फिर कुछ कार्य का मूल्यांकन किया जाता है और परिणाम मान के रूप में लौटाया जाता है। हालाँकि, शब्दार्थ काफी भिन्न हो सकते हैं। उदाहरण के लिए, समनुदेशन में <code>a = b</code> लक्ष्य <code>a</code> का मूल्यांकन नहीं किया जाता है, बल्कि इसके स्थान (पता) का उपयोग b मूल्य को संग्रहीत करने के लिए किया जाता है - [[कॉल-टू-संदर्भ द्वारा]] शब्दार्थ के अनुरूप। इसके अलावा, एक समनुदेशन एक बयान (कोई मूल्य नहीं) हो सकता है, या एक अभिव्यक्ति (मान) हो सकता है, मूल्य के साथ या तो एक r - मूल्य (सिर्फ एक मूल्य) या एक l - मूल्य (जिसे निर्दिष्ट किया जा सकता है)। एक अन्य उदाहरण के रूप में, कार्यक्षेत्र विश्लेषण ऑपरेटर :: और तत्व अभिगम ऑपरेटर। (जैसे की <code>Foo::Bar</code> या <code>a.b</code>) मूल्यों पर नहीं, बल्कि नामों पर काम करता हैं, अनिवार्य रूप से [[कॉल-बाय-नाम]] शब्दार्थ, और उनका मूल्य एक नाम है।
साधारण मामलों में यह सामान्य कार्य आवाहन के समान होता है; उदाहरण के लिए, अतिरिक्त <code>x + y</code> सामान्यतः कार्य आवाहन <code>add(x, y)</code> और तुलना <code>x &lt; y</code> प्रति <code>lt(x, y)</code> के बराबर होता है, जिसका अर्थ है कि तर्कों का मूल्यांकन उनके सामान्य तरीके से किया जाता है, फिर कुछ कार्य का मूल्यांकन किया जाता है और परिणाम मान के रूप में लौटाया जाता है। हालाँकि, शब्दार्थ काफी भिन्न हो सकते हैं। उदाहरण के लिए, समनुदेशन में <code>a = b</code> लक्ष्य <code>a</code> का मूल्यांकन नहीं किया जाता है, बल्कि इसके स्थान (पता) का उपयोग b मूल्य को संग्रहीत करने के लिए किया जाता है - [[कॉल-टू-संदर्भ द्वारा]] शब्दार्थ के अनुरूप। इसके अलावा, एक समनुदेशन एक बयान (कोई मूल्य नहीं) हो सकता है, या एक अभिव्यक्ति (मान) हो सकता है, मूल्य के साथ या तो एक r - मूल्य (सिर्फ एक मूल्य) या एक l - मूल्य (जिसे निर्दिष्ट किया जा सकता है)। एक अन्य उदाहरण के रूप में, कार्यक्षेत्र विश्लेषण ऑपरेटर :: और तत्व अभिगम ऑपरेटर। (जैसे की <code>Foo::Bar</code> या <code>a.b</code>) मूल्यों पर नहीं, बल्कि नामों पर काम करता हैं, अनिवार्य रूप से [[कॉल-बाय-नाम]] शब्दार्थ, और उनका मूल्य एक नाम है।


ऑपरेटर संकार्य के रूप में l - मूल्य का उपयोग विशेष रूप से एकाधारी [[वृद्धि और कमी ऑपरेटरों]] में उल्लेखनीय है। C में, उदाहरण के लिए, निम्नलिखित बयान कानूनी और अच्छी तरह से परिभाषित है, और इस तथ्य पर निर्भर करता है कि सरणी अनुक्रमण एक l - मूल्य देता है:
ऑपरेटर संकार्य के रूप में l - मूल्य का उपयोग विशेष रूप से एकाधारी [[वृद्धि और कमी ऑपरेटरों]] में उल्लेखनीय है। C में, उदाहरण के लिए, निम्नलिखित बयान कानूनी और अच्छी तरह से परिभाषित है, और इस तथ्य पर निर्भर करता है कि सरणी अनुक्रमण एक - मूल्य देता है:


x = ++a[ i ];
x = ++a[ i ];
Line 27: Line 27:


== उपयोगकर्ता परिभाषित ऑपरेटरों ==
== उपयोगकर्ता परिभाषित ऑपरेटरों ==
एक भाषा में निश्चित संख्या में अन्तर्निहित (बिल्ट-इन) ऑपरेटरों हो सकते है (उदा। {{mono|1=+, -, *, &lt;, &lt;=, !, =}}, आदि C और C++, [[PHP]] में ऑपरेटरों में), या यह क्रमादेशक-परिभाषित ऑपरेटरों के निर्माण की अनुमति दे सकता है (उदाहरण के लिए प्रस्तावना (प्रोलॉग),<ref>{{Cite web|url=https://www.swi-prolog.org/pldoc/man?predicate=op/3|title=एसडब्ल्यूआई-प्रोलॉग -- ऑप/3|website=www.swi-prolog.org}}</ref> सीड 7,<ref>{{Cite web|url=http://seed7.sourceforge.net/examples/operator.htm|title=एक ऑपरेटर घोषित करें|website=seed7.sourceforge.net}}</ref> F #, [[OCaml]], [[हास्केल प्रोग्रामिंग भाषा|Haskell]])। कुछ क्रमादेशक भाषायें ऑपरेटर संकेताक्षर को विशेष विशेष्ता जैसे प्रतिबंधित करती हैं {{mono|1='''[[Addition|+]]'''}} या {{mono|1='''[[Assignment (computer science)|:=]]'''}} तक सीमित करती हैं जबकि अन्य <code>[[Integer_division#Division_of_integers|'''div''']]</code> (जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल (क्रमदेशन भाषा)]]) जैसे नामों की भी अनुमति देती हैं।।
एक लैंग्वेज में निश्चित संख्या में अन्तर्निहित (बिल्ट-इन) ऑपरेटरों हो सकते है (उदा। {{mono|1=+, -, *, &lt;, &lt;=, !, =}}, आदि C और C++, [[PHP]] में ऑपरेटरों में), या यह क्रमादेशक-परिभाषित ऑपरेटरों के निर्माण की अनुमति दे सकता है (उदाहरण के लिए प्रस्तावना (प्रोलॉग),<ref>{{Cite web|url=https://www.swi-prolog.org/pldoc/man?predicate=op/3|title=एसडब्ल्यूआई-प्रोलॉग -- ऑप/3|website=www.swi-prolog.org}}</ref> सीड 7,<ref>{{Cite web|url=http://seed7.sourceforge.net/examples/operator.htm|title=एक ऑपरेटर घोषित करें|website=seed7.sourceforge.net}}</ref> F #, [[OCaml]], [[हास्केल प्रोग्रामिंग भाषा|Haskell]])। कुछ क्रमादेशक भाषायें ऑपरेटर संकेताक्षर को विशेष विशेष्ता जैसे प्रतिबंधित करती हैं {{mono|1='''[[Addition|+]]'''}} या {{mono|1='''[[Assignment (computer science)|:=]]'''}} तक सीमित करती हैं जबकि अन्य <code>[[Integer_division#Division_of_integers|'''div''']]</code> (जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल (क्रमदेशन लैंग्वेज)]]) जैसे नामों की भी अनुमति देती हैं।।


अधिकांश भाषाओं में ऑपरेटरों का एक अंतर्निहित समूह होता है, लेकिन उपयोगकर्ता परिभाषित ऑपरेटरों को अनुमति नहीं देते, क्योंकि यह पदव्याख्या (पार्सिंग) को काफी जटिल करता है।{{efn|Introducing a new operator changes the [[lexical specification]] of the language, which changes the [[lexical analysis]]. The arity and precedence of the operator is then part of the phrase syntax of the language, which changes the phrase-level analysis. For example, adding an operator <code>@</code> requires lexing and tokenizing this character, and the phrase structure (syntax tree) depends on the arity and precedence of this operator.}} कई भाषाएँ केवल ऑपरेटरों को अन्तर्निहित प्रकारों के लिए उपयोग करने की अनुमति देती हैं, लेकिन अन्य मौजूदा ऑपरेटरों को उपयोगकर्ता-परिभाषित प्रकारों के लिए उपयोग किया जाता है; इसे [[ऑपरेटर ओवरलोडिंग|ऑपरेटर अधिक भार]] के रूप में जाना जाता है। कुछ भाषाएँ नए ऑपरेटरों को परिभाषित करने की अनुमति देती हैं, हालाँकि, या तो संकलन समय पर या कार्यावधि पर। इसमें मेटा-क्रमादेशक (एक अलग भाषा में ऑपरेटरों को निर्दिष्ट करना) या भाषा के भीतर ही शामिल हो सकता है। नए ऑपरेटरों की परिभाषा, विशेष रूप से कार्यावधि परिभाषा, प्रायः कार्यक्रमों के सही [[स्थैतिक विश्लेषण]] को असंभव बना देती है, क्योंकि भाषा का रचनाक्रम ट्यूरिंग-पूर्ण हो सकता है, इसलिए रचनाक्रम तरू (ट्री) के निर्माण के लिए भी विरामतः (हॉल्टिंग) समस्या को हल करने की आवश्यकता हो सकती है, जो असंभव है। यह [[पर्ल]] के लिए होता है, उदाहरण के लिए, और लिस्प (क्रमदेशन भाषा) की कुछ बोलियाँ।
अधिकांश लैंग्वेज में ऑपरेटरों का एक अंतर्निहित समूह होता है, लेकिन उपयोगकर्ता परिभाषित ऑपरेटरों को अनुमति नहीं देते, क्योंकि यह पदव्याख्या (पार्सिंग) को काफी जटिल करता है।{{efn|Introducing a new operator changes the [[lexical specification]] of the language, which changes the [[lexical analysis]]. The arity and precedence of the operator is then part of the phrase syntax of the language, which changes the phrase-level analysis. For example, adding an operator <code>@</code> requires lexing and tokenizing this character, and the phrase structure (syntax tree) depends on the arity and precedence of this operator.}} कई भाषाएँ केवल ऑपरेटरों को अन्तर्निहित प्रकारों के लिए उपयोग करने की अनुमति देती हैं, लेकिन अन्य उस्थिपत ऑपरेटरों को उपयोगकर्ता-परिभाषित प्रकारों के लिए उपयोग किया जाता है; इसे [[ऑपरेटर ओवरलोडिंग|ऑपरेटर अधिक भार]] के रूप में जाना जाता है। कुछ भाषाएँ नए ऑपरेटरों को परिभाषित करने की अनुमति देती हैं, हालाँकि, या तो संकलन समय पर या कार्यावधि पर। इसमें मेटा-क्रमादेशक (एक अलग लैंग्वेज में ऑपरेटरों को निर्दिष्ट करना) या लैंग्वेज के भीतर ही सम्मिलित हो सकता है। नए ऑपरेटरों की परिभाषा, विशेष रूप से कार्यावधि परिभाषा, प्रायः कार्यक्रमों के सही [[स्थैतिक विश्लेषण]] को असंभव बना देती है, क्योंकि लैंग्वेज का रचनाक्रम ट्यूरिंग-पूर्ण हो सकता है, इसलिए रचनाक्रम तरू (ट्री) के निर्माण के लिए भी विरामतः (हॉल्टिंग) समस्या को हल करने की आवश्यकता हो सकती है, जो असंभव है। यह [[पर्ल]] के लिए होता है, उदाहरण के लिए, और लिस्प (क्रमदेशन लैंग्वेज) की कुछ बोलियाँ।


== उदाहरण ==
== उदाहरण ==
{{category see also|Operators (programming)}}
सामान्य उदाहरण जो वाक्यात्मक रूप से भिन्न होते हैं, गणितीय अंकगणितीय संक्रियाएँ हैं, उदा। ">" "से अधिक" के लिए, प्रायः कार्यों के लिए [[पहचानकर्ता (कंप्यूटर विज्ञान)]] के लैंग्वेज के समूह के बाहर के नामों के साथ, और कार्य को आवाहन करने के लिए लैंग्वेज के रचनाक्रम से भिन्न रचनाक्रम के साथ बुलाया जाता है। एक समारोह के रूप में, "से अधिक" सामान्यतः एक पहचानकर्ता द्वारा नामित किया जाएगा, जैसे कि <code>gt</code> या <code>greater_than और gt(x, y) के रूप में एक कार्य के रूप में कहा जाता है।</code> इसके बजाय, संचालन विशेष वर्ण का उपयोग करता है <code>&gt;</code> (जो व्याख्यात्मक विश्लेषण के दौरान अलग से चिन्हित किया गया है), और इंफिक्स नोटेशन, जैसा <code>x &gt; y के रूप में।</code>
सामान्य उदाहरण जो वाक्यात्मक रूप से भिन्न होते हैं, गणितीय अंकगणितीय संक्रियाएँ हैं, उदा। ">" "से अधिक" के लिए, प्रायः कार्यों के लिए [[पहचानकर्ता (कंप्यूटर विज्ञान)]] के भाषा के समूह के बाहर के नामों के साथ, और कार्य को आवाहन करने के लिए भाषा के रचनाक्रम से भिन्न रचनाक्रम के साथ बुलाया जाता है। एक समारोह के रूप में, "से अधिक" सामान्यतः एक पहचानकर्ता द्वारा नामित किया जाएगा, जैसे कि <code>gt</code> या <code>greater_than और gt(x, y) के रूप में एक कार्य के रूप में कहा जाता है।</code> इसके बजाय, संचालन विशेष वर्ण का उपयोग करता है <code>&gt;</code> (जो व्याख्यात्मक विश्लेषण के दौरान अलग से चिन्हित किया गया है), और इंफिक्स नोटेशन, जैसा <code>x &gt; y के रूप में।</code>


सामान्य उदाहरण जो शब्दार्थ से भिन्न होते हैं (तर्क पासिंग मोड द्वारा) बूलियन संचालन होते हैं, जो प्रायः [[शॉर्ट सर्किट मूल्यांकन]] की सुविधा देते हैं: उदा। एक शॉर्ट-सर्किटिंग कंजंक्शन (X AND Y) जो केवल बाद के तर्कों का मूल्यांकन करता है यदि पहले वाले गलत नहीं हैं, सख्त आवाहन-से-मूल्य कार्य वाली भाषा में। इसके बजाय यह if/then/else के समान व्यवहार करता है।
सामान्य उदाहरण जो शब्दार्थ से भिन्न होते हैं (तर्क पासिंग मोड द्वारा) बूलियन संचालन होते हैं, जो प्रायः [[शॉर्ट सर्किट मूल्यांकन]] की सुविधा देते हैं: उदा। एक शॉर्ट-सर्किटिंग कंजंक्शन (X AND Y) जो केवल बाद के तर्कों का मूल्यांकन करता है यदि पहले वाले गलत नहीं हैं, सख्त आवाहन-से-मूल्य कार्य वाली लैंग्वेज में। इसके बजाय यह if/then/else के समान व्यवहार करता है।


कम आम ऑपरेटरों में शामिल हैं:
कम आम ऑपरेटरों में सम्मिलित हैं:
* [[अल्पविराम संचालिका]]: <code>e, f</code>
* [[अल्पविराम संचालिका]]: <code>e, f</code>
* [[डेरेफरेंस ऑपरेटर]]: <code>*p</code> और पता-ऑपरेटर: <code>&amp;x</code>
* [[डेरेफरेंस ऑपरेटर]]: <code>*p</code> और पता-ऑपरेटर: <code>&amp;x</code>
Line 44: Line 43:
* [[अशक्त कोलेसिंग ऑपरेटर]]: <code>x ?? y</code>
* [[अशक्त कोलेसिंग ऑपरेटर]]: <code>x ?? y</code>
* [[अंतरिक्ष यान संचालक]] (तीन तरह से तुलना के लिए): <code>x &lt;=&gt; y</code>
* [[अंतरिक्ष यान संचालक]] (तीन तरह से तुलना के लिए): <code>x &lt;=&gt; y</code>
== संकलन ==
== संकलन ==
एक संकलनकर्ता (कंपाइलर) ऑपरेटरों और कार्यों को उपनित्यक्रम (सबरूटीन) या समरेखीय ([[इनलाइन विस्तार|इनलाइन) संहिता]] के साथ कार्यान्वित कर सकता है। भाषा द्वारा समर्थित कुछ अन्तर्निहित ऑपरेटरों के पास सामान्यतः केंद्रीय प्रसंस्करण इकाइयों पर पाए जाने वाले [[मशीन कोड|निर्देशों]] की एक छोटी संख्या के लिए प्रत्यक्ष मानचित्रण होता है, हालांकि अन्य (जैसे '+' लड़ी संघनन को व्यक्त करने के लिए उपयोग किया जाता है) में जटिल कार्यान्वयन हो सकते हैं।
एक संकलनकर्ता (कंपाइलर) ऑपरेटरों और कार्यों को उपनित्यक्रम (सबरूटीन) या समरेखीय ([[इनलाइन विस्तार|इनलाइन) संहिता]] के साथ कार्यान्वित कर सकता है। लैंग्वेज द्वारा समर्थित कुछ अन्तर्निहित ऑपरेटरों के पास सामान्यतः केंद्रीय प्रसंस्करण इकाइयों पर पाए जाने वाले [[मशीन कोड|निर्देशों]] की एक छोटी संख्या के लिए प्रत्यक्ष मानचित्रण होता है, हालांकि अन्य (जैसे '+' लड़ी संघनन को व्यक्त करने के लिए उपयोग किया जाता है) में जटिल कार्यान्वयन हो सकते हैं।


== संचालक अतिभारक ==
== संचालक अतिभारक ==
{{main|Operator overloading}}
कुछ क्रमदेशन लैंग्वेज में एक ऑपरेटर तदर्थ बहुरूपी हो सकता है, अर्थात्, एक से अधिक प्रकार के तथ्य के लिए परिभाषाएँ होती हैं, (जैसे कि [[जावा (प्रोग्रामिंग भाषा)|जावा (क्रमदेशन लैंग्वेज)]] में जहाँ {{mono|+}} ऑपरेटर का उपयोग संख्याओं को जोड़ने और डोरी (स्ट्रिंग्स) के संयोजन के लिए किया जाता है)। ऐसे ऑपरेटर को अतिभारित कहा जाता है। उन लैंग्वेज में जो क्रमदेशन (जैसे [[सी ++|C ++]]) द्वारा ऑपरेटर अतिभारित का समर्थन करते हैं लेकिन ऑपरेटरों का एक सीमित समूह है, ऑपरेटर अतिभारित प्रायः ऑपरेटरों के लिए अनुकूलित उपयोगों को परिभाषित करने के लिए उपयोग किया जाता है।
कुछ क्रमदेशन भाषाओं में एक ऑपरेटर तदर्थ बहुरूपी हो सकता है, अर्थात्, एक से अधिक प्रकार के तथ्य के लिए परिभाषाएँ होती हैं, (जैसे कि [[जावा (प्रोग्रामिंग भाषा)|जावा (क्रमदेशन भाषा)]] में जहाँ {{mono|+}} ऑपरेटर का उपयोग संख्याओं को जोड़ने और डोरी (स्ट्रिंग्स) के संयोजन के लिए किया जाता है)। ऐसे ऑपरेटर को अतिभारित कहा जाता है। उन भाषाओं में जो क्रमदेशन (जैसे [[सी ++|C ++]]) द्वारा ऑपरेटर अतिभारित का समर्थन करते हैं लेकिन ऑपरेटरों का एक सीमित समूह है, ऑपरेटर अतिभारित प्रायः ऑपरेटरों के लिए अनुकूलित उपयोगों को परिभाषित करने के लिए उपयोग किया जाता है।


उदाहरण में <code>IF ORDER_DATE > "12/31/2011" AND ORDER_DATE < "01/01/2013" THEN CONTINUE ELSE STOP</code>, ऑपरेटर हैं: ">" (इससे बड़ा), AND और "<" (इससे कम)।
उदाहरण में <code>IF ORDER_DATE > "12/31/2011" AND ORDER_DATE < "01/01/2013" THEN CONTINUE ELSE STOP</code>, ऑपरेटर हैं: ">" (इससे बड़ा), AND और "<" (इससे कम)।


== संकार्य जबरदस्ती ==
== संकार्य जबरदस्ती ==
{{further|Type conversion}}
कुछ लैंग्वेज किसी ऑपरेटर के संकार्य को ऑपरेशन होने के लिए उपयुक्त तथ्य प्रकारों में अंतर्निहित रूप से परिवर्तित करने, या मजबूर करने की अनुमति भी देती हैं। उदाहरण के लिए, पर्ल में ज़बरदस्ती के नियमों में <code>15.14 के परिणाम का उत्पादन करने वाले</code><code>12 + "3.14"</code> का नेतृत्व होता है। जोड़ने से पहले टेक्स्ट "3.14" को संख्या 3.14 में बदल दिया जाता है। इसके अलावा, <code>12</code> एक पूर्णांक है और <code>3.14</code> या तो एक फ़्लोटिंग या फिक्स्ड-पॉइंट नंबर है (एक संख्या जिसमें दशमलव स्थान है) इसलिए पूर्णांक क्रमशः विचल अंक (फ़्लोटिंग पॉइंट) या स्थायी (फिक्स्ड)-अंक संख्या में परिवर्तित कर दिया जाता है।
कुछ भाषाएं किसी ऑपरेटर के संकार्य को ऑपरेशन होने के लिए उपयुक्त तथ्य प्रकारों में अंतर्निहित रूप से परिवर्तित करने, या मजबूर करने की अनुमति भी देती हैं। उदाहरण के लिए, पर्ल में ज़बरदस्ती के नियमों में <code>15.14 के परिणाम का उत्पादन करने वाले</code><code>12 + "3.14"</code> का नेतृत्व होता है। जोड़ने से पहले टेक्स्ट "3.14" को संख्या 3.14 में बदल दिया जाता है। इसके अलावा, <code>12</code> एक पूर्णांक है और <code>3.14</code> या तो एक फ़्लोटिंग या फिक्स्ड-पॉइंट नंबर है (एक संख्या जिसमें दशमलव स्थान है) इसलिए पूर्णांक क्रमशः विचल अंक (फ़्लोटिंग पॉइंट) या स्थायी (फिक्स्ड)-अंक संख्या में परिवर्तित कर दिया जाता है।


[[जावास्क्रिप्ट]] विपरीत नियमों का पालन करती है - उपर्युक्त समान व्यंजक खोजने पर, यह पूर्णांक <code>12</code> को एक तार में <code>"12" में बदल देगी,</code>फिर दो संकार्य को <code>"123.14" बनाने के लिए जोड़ देगी ।</code>
[[जावास्क्रिप्ट]] विपरीत नियमों का पालन करती है - उपर्युक्त समान व्यंजक खोजने पर, यह पूर्णांक <code>12</code> को एक तार में <code>"12" में बदल देगी,</code>फिर दो संकार्य को <code>"123.14" बनाने के लिए जोड़ देगी ।</code>


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


== क्रमदेशन भाषाओं में ऑपरेटर सुविधाएँ ==
== क्रमदेशन लैंग्वेज में ऑपरेटर सुविधाएँ ==
निम्न तालिका कई क्रमदेशन भाषाओं में ऑपरेटर सुविधाओं को दिखाती है:
निम्न तालिका कई क्रमदेशन लैंग्वेज में ऑपरेटर सुविधाओं को दिखाती है:


{| class="sortable wikitable"
{| class="sortable wikitable"
|-
|-
!क्रमदेशन भाषा
!क्रमदेशन लैंग्वेज
!गैरअक्षरांकीय ऑपरेटर प्रतीक
!गैरअक्षरांकीय ऑपरेटर प्रतीक
!अक्षरांकीय ऑपरेटर प्रतीक
!अक्षरांकीय ऑपरेटर प्रतीक

Latest revision as of 15:37, 27 October 2023

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

सामान्य सरल उदाहरणों में अंकगणित (उदाहरण के साथ जोड़), तुलना (उदाहरण के लिए "greater than" with >), और तार्किक संचालन (जैसे AND, कुछ लैंग्वेज में && भी लिखा गया) सम्मिलित हैं। अधिक सम्मिलित उदाहरणों में प्रदत्त कार्य (सामान्यतः = या :=), अभिलेख या उद्देश्य में क्षेत्र अभिगम (सामान्यतः .), और विस्तार समाधान ऑपरेटर (प्रायः :: या .) सम्मिलित हैं। लैंग्वेज सामान्यतः अंतर्निहित ऑपरेटरों के एक समूह को परिभाषित करती हैं, और कुछ मामलों में उपयोगकर्ताओं को उस्थिपत ऑपरेटरों के लिए नए अर्थ जोड़ने या पूरी तरह से नए ऑपरेटरों को परिभाषित करने की अनुमति देती हैं।

रचनाक्रम

वाक्य-विन्यास रूप से ऑपरेटर सामान्यतः कार्यों के विपरीत होते हैं। अधिकांश लैंग्वेज में, कार्यों को संचालन स्तर और संबद्धता के निश्चित क्रम के साथ उपसर्ग ऑपरेटर के एक विशेष रूप के रूप में देखा जा सकता है, प्रायः अनिवार्य कोष्ठकों के साथ उदा Func(a) (या (Func a) लिस्प में (क्रमदेशन लैंग्वेज))। अधिकांश भाषाएँ क्रमादेशक (प्रोग्रामर)-परिभाषित कार्यों का समर्थन करती हैं, लेकिन वास्तव में क्रमादेशक-परिभाषित ऑपरेटरों का समर्थन करने का दावा नहीं कर सकती हैं, जब तक कि उनके पास उपसर्ग संकेतन से अधिक और एक से अधिक पूर्ववर्ती स्तर न हों। शब्दार्थतः रूप से ऑपरेटरों को अलग-अलग उद्यम संकेतन और सीमित संख्या में प्राचल (पैरामीटर) (सामान्यतः 1 या 2) के साथ कार्य के विशेष रूप के रूप में देखा जा सकता है।

इसके संकार्य (संकार्य) के संबंध में ऑपरेटर की स्थिति उपसर्ग, इंफिक्स या पोस्टफिक्स हो सकती है, और एक ऑपरेटर को सम्मिलित करने वाली अभिव्यक्ति (कंप्यूटर साइंस) का रचनाक्रम इसकी एरिटी (संचालन की संख्या), पूर्वता, और (यदि लागू हो), सहयोगीता पर निर्भर करता हैlअ धिकांश क्रमदेशन लैंग्वेज बाइनरी ऑपरेटरों और कुछ एकात्मक ऑपरेटरों का समर्थन करती हैं, कुछ अधिक संकार्य का समर्थन करती हैं, कुछ अधिक संकार्य का समर्थन करती हैं, जैसे ?: C में ऑपरेटर, जो त्रिगुट है। उपसर्ग एकाधारी (यूनरी) ऑपरेटर हैं, जैसे एकाधारी ऋण -x, और पोस्टफ़िक्स एकाधारी ऑपरेटर्स, जैसे बाद वेतन वृद्धि x++; और बाइनरी संचालन इंफिक्स हैं, जैसे x + y या x = y. उच्च एरिटी के इन्फिक्स संचालन के लिए अतिरिक्त प्रतीकों की आवश्यकता होती है, जैसे त्रिगुट ऑपरेटर?: C में, एक के रूप में लिखा जाता है a? b: c - वास्तव में, चूंकि यह एकमात्र सामान्य उदाहरण है, इसे प्रायः त्रिगुटरी ऑपरेटर के रूप में जाना जाता है। हालाँकि, उपसर्ग और पोस्टफ़िक्स संचालन किसी भी वांछित धर्मार्थ का समर्थन कर सकते हैं, जैसे कि 1 2 3 4 +.

कभी-कभी[1][2] किसी लैंग्वेज के कुछ हिस्सों को "मैचफिक्स" या "सिकमफिक्स" ऑपरेटरों के रूप में वर्णित किया जा सकता है,[3][4] या तो लैंग्वेज के विवरण या कार्यान्वयन को सरल बनाने के लिए। एक सिकमफ़िक्स ऑपरेटर में दो या दो से अधिक भाग होते हैं जो इसके संकार्य को घेरते हैं। सर्कमफ़िक्स ऑपरेटरों की सर्वोच्च प्राथमिकता होती है, उनकी सामग्री का मूल्यांकन किया जाता है और परिणामी मूल्य आसपास की अभिव्यक्ति में उपयोग किया जाता है। सबसे परिचित सर्कमफ़िक्स ऑपरेटर ऊपर उल्लिखित कोष्ठक हैं, जो यह इंगित करने के लिए उपयोग किया जाता है कि किसी अभिव्यक्ति के किन हिस्सों का मूल्यांकन दूसरों से पहले किया जाना है। भौतिकी से एक अन्य उदाहरण डीरेक के ब्रा-केट संकेतन का आंतरिक उत्पाद अंकन है। सर्कमफ़िक्स ऑपरेटर विशेष रूप से उन संचालन को निरूपित करने के लिए उपयोगी होते हैं जिनमें कई या अलग-अलग संख्या में संकार्य सम्मिलित होते हैं।

एक लैंग्वेज का विनिर्देश उस रचनाक्रम को निर्दिष्ट करेगा जो ऑपरेटरों का समर्थन करता है, जबकि क्रमदेशन-परिभाषित ऑपरेटरों का समर्थन करने वाली प्रस्तावना जैसी लैंग्वेज प्रोग्रामर द्वारा रचनाक्रम को परिभाषित करने की आवश्यकता होती हैं।

शब्दार्थ

ऑपरेटरों का शब्दार्थ विशेष रूप से मूल्य, मूल्यांकन रणनीति और तर्क अस्थायी प्रणाली (जैसे बूलियन शॉर्ट सर्किटिंग) पर निर्भर करता है। बस, एक ऑपरेटर से जुड़ी एक अभिव्यक्ति का मूल्यांकन किसी तरह से किया जाता है, और परिणामी मूल्य (कंप्यूटर विज्ञान) केवल एक मूल्य (एक r-परिमाण) हो सकता है, या समनुदेशन (एक l- परिमाण) की अनुमति देने वाली वस्तु हो सकती है ।

साधारण मामलों में यह सामान्य कार्य आवाहन के समान होता है; उदाहरण के लिए, अतिरिक्त x + y सामान्यतः कार्य आवाहन add(x, y) और तुलना x < y प्रति lt(x, y) के बराबर होता है, जिसका अर्थ है कि तर्कों का मूल्यांकन उनके सामान्य तरीके से किया जाता है, फिर कुछ कार्य का मूल्यांकन किया जाता है और परिणाम मान के रूप में लौटाया जाता है। हालाँकि, शब्दार्थ काफी भिन्न हो सकते हैं। उदाहरण के लिए, समनुदेशन में a = b लक्ष्य a का मूल्यांकन नहीं किया जाता है, बल्कि इसके स्थान (पता) का उपयोग b मूल्य को संग्रहीत करने के लिए किया जाता है - कॉल-टू-संदर्भ द्वारा शब्दार्थ के अनुरूप। इसके अलावा, एक समनुदेशन एक बयान (कोई मूल्य नहीं) हो सकता है, या एक अभिव्यक्ति (मान) हो सकता है, मूल्य के साथ या तो एक r - मूल्य (सिर्फ एक मूल्य) या एक l - मूल्य (जिसे निर्दिष्ट किया जा सकता है)। एक अन्य उदाहरण के रूप में, कार्यक्षेत्र विश्लेषण ऑपरेटर :: और तत्व अभिगम ऑपरेटर। (जैसे की Foo::Bar या a.b) मूल्यों पर नहीं, बल्कि नामों पर काम करता हैं, अनिवार्य रूप से कॉल-बाय-नाम शब्दार्थ, और उनका मूल्य एक नाम है।

ऑपरेटर संकार्य के रूप में l - मूल्य का उपयोग विशेष रूप से एकाधारी वृद्धि और कमी ऑपरेटरों में उल्लेखनीय है। C में, उदाहरण के लिए, निम्नलिखित बयान कानूनी और अच्छी तरह से परिभाषित है, और इस तथ्य पर निर्भर करता है कि सरणी अनुक्रमण एक - मूल्य देता है:

x = ++a[ i ];

एक महत्वपूर्ण उपयोग तब होता है जब एक बाएं-सहयोगी बाइनरी ऑपरेटर अपने बाएं तर्क को संशोधित करता है (या एक साइड इफेक्ट पैदा करता है) और फिर उस तर्क को l - मूल्य के रूप में मूल्यांकन करता है।[lower-alpha 1] यह ऑपरेटरों के अनुक्रम को मूल तर्क को प्रभावित करने की अनुमति देता है, विधि सोपानन (कैस्केडिंग) के समान धाराप्रवाह अंतराफलक (इंटरफ़ेस) की अनुमति देते हैं। एक सामान्य उदाहरण है << C++ में ऑपरेटर iostreamपुस्तकालय, जो धाराप्रवाह उत्पादन की अनुमति देता है, निम्नानुसार है:

cout << "Hello" << " " << "world!" << end;

उपयोगकर्ता परिभाषित ऑपरेटरों

एक लैंग्वेज में निश्चित संख्या में अन्तर्निहित (बिल्ट-इन) ऑपरेटरों हो सकते है (उदा। +, -, *, <, <=, !, =, आदि C और C++, PHP में ऑपरेटरों में), या यह क्रमादेशक-परिभाषित ऑपरेटरों के निर्माण की अनुमति दे सकता है (उदाहरण के लिए प्रस्तावना (प्रोलॉग),[5] सीड 7,[6] F #, OCaml, Haskell)। कुछ क्रमादेशक भाषायें ऑपरेटर संकेताक्षर को विशेष विशेष्ता जैसे प्रतिबंधित करती हैं + या := तक सीमित करती हैं जबकि अन्य div (जैसे पास्कल (क्रमदेशन लैंग्वेज)) जैसे नामों की भी अनुमति देती हैं।।

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

उदाहरण

सामान्य उदाहरण जो वाक्यात्मक रूप से भिन्न होते हैं, गणितीय अंकगणितीय संक्रियाएँ हैं, उदा। ">" "से अधिक" के लिए, प्रायः कार्यों के लिए पहचानकर्ता (कंप्यूटर विज्ञान) के लैंग्वेज के समूह के बाहर के नामों के साथ, और कार्य को आवाहन करने के लिए लैंग्वेज के रचनाक्रम से भिन्न रचनाक्रम के साथ बुलाया जाता है। एक समारोह के रूप में, "से अधिक" सामान्यतः एक पहचानकर्ता द्वारा नामित किया जाएगा, जैसे कि gt या greater_than और gt(x, y) के रूप में एक कार्य के रूप में कहा जाता है। इसके बजाय, संचालन विशेष वर्ण का उपयोग करता है > (जो व्याख्यात्मक विश्लेषण के दौरान अलग से चिन्हित किया गया है), और इंफिक्स नोटेशन, जैसा x > y के रूप में।

सामान्य उदाहरण जो शब्दार्थ से भिन्न होते हैं (तर्क पासिंग मोड द्वारा) बूलियन संचालन होते हैं, जो प्रायः शॉर्ट सर्किट मूल्यांकन की सुविधा देते हैं: उदा। एक शॉर्ट-सर्किटिंग कंजंक्शन (X AND Y) जो केवल बाद के तर्कों का मूल्यांकन करता है यदि पहले वाले गलत नहीं हैं, सख्त आवाहन-से-मूल्य कार्य वाली लैंग्वेज में। इसके बजाय यह if/then/else के समान व्यवहार करता है।

कम आम ऑपरेटरों में सम्मिलित हैं:

संकलन

एक संकलनकर्ता (कंपाइलर) ऑपरेटरों और कार्यों को उपनित्यक्रम (सबरूटीन) या समरेखीय (इनलाइन) संहिता के साथ कार्यान्वित कर सकता है। लैंग्वेज द्वारा समर्थित कुछ अन्तर्निहित ऑपरेटरों के पास सामान्यतः केंद्रीय प्रसंस्करण इकाइयों पर पाए जाने वाले निर्देशों की एक छोटी संख्या के लिए प्रत्यक्ष मानचित्रण होता है, हालांकि अन्य (जैसे '+' लड़ी संघनन को व्यक्त करने के लिए उपयोग किया जाता है) में जटिल कार्यान्वयन हो सकते हैं।

संचालक अतिभारक

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

उदाहरण में IF ORDER_DATE > "12/31/2011" AND ORDER_DATE < "01/01/2013" THEN CONTINUE ELSE STOP, ऑपरेटर हैं: ">" (इससे बड़ा), AND और "<" (इससे कम)।

संकार्य जबरदस्ती

कुछ लैंग्वेज किसी ऑपरेटर के संकार्य को ऑपरेशन होने के लिए उपयुक्त तथ्य प्रकारों में अंतर्निहित रूप से परिवर्तित करने, या मजबूर करने की अनुमति भी देती हैं। उदाहरण के लिए, पर्ल में ज़बरदस्ती के नियमों में 15.14 के परिणाम का उत्पादन करने वाले12 + "3.14" का नेतृत्व होता है। जोड़ने से पहले टेक्स्ट "3.14" को संख्या 3.14 में बदल दिया जाता है। इसके अलावा, 12 एक पूर्णांक है और 3.14 या तो एक फ़्लोटिंग या फिक्स्ड-पॉइंट नंबर है (एक संख्या जिसमें दशमलव स्थान है) इसलिए पूर्णांक क्रमशः विचल अंक (फ़्लोटिंग पॉइंट) या स्थायी (फिक्स्ड)-अंक संख्या में परिवर्तित कर दिया जाता है।

जावास्क्रिप्ट विपरीत नियमों का पालन करती है - उपर्युक्त समान व्यंजक खोजने पर, यह पूर्णांक 12 को एक तार में "12" में बदल देगी,फिर दो संकार्य को "123.14" बनाने के लिए जोड़ देगी ।

किसी लैंग्वेज में ज़बरदस्ती की उपस्थिति में, सूक्ष्म क्रमदेशन गलतियों से बचने के लिए क्रमदेशन को संकार्य प्रकार और ऑपरेशन परिणाम प्रकार के बारे में विशिष्ट नियमों के बारे में पता होना चाहिए।

क्रमदेशन लैंग्वेज में ऑपरेटर सुविधाएँ

निम्न तालिका कई क्रमदेशन लैंग्वेज में ऑपरेटर सुविधाओं को दिखाती है:

क्रमदेशन लैंग्वेज गैरअक्षरांकीय ऑपरेटर प्रतीक अक्षरांकीय ऑपरेटर प्रतीक उपसर्ग मध्यप्रत्यय अनुलग्न पूर्ववर्तिता संबद्धता अधिक भार क्रमदेशन - परिभाषितअधिक भार क्रमदेशन - परिभाषित ऑपरेटरप्रतीक
ALGOL 68 +* ** * / % %* %× - + < <= >= > = /= & -:= +:= *:= /:= %:= %*:= +=: :=: :/=:

(सभी ऑपरेटरों के पास स्पष्ट अक्षरांकीय समकक्ष हैं, c.f. अगला स्तम्भ। कुछ के पास गैर ASCII समकक्ष हैं, c.f. नीचे।) ¬ +× ⊥ ↑ ↓ ⌊ ⌈ × ÷ ÷× ÷* □ ≤ ≥ ≠ ∧ ∨ ×:= ÷:= ÷×:= ÷*:= %×:= :≠:

not abs arg bin entier leng level odd repr round shorten i shl shr up down lwb upb lt le ge gt eq ne and or over mod elem minusab plusab timesab divab overab modab plusto is isnt Yes Yes No Yes (prefix operators always have priority 10) मध्यप्रत्यय ऑपरेटर बाएं सहयोगी हैं, उपसर्ग ऑपरेटर सही सहयोगी हैं Yes Yes Yes
APL + - × ÷ ⌈ ⌊ * ⍟ | ! ○ ~ ∨ ∧ ⍱ ⍲ < ≤ = ≥ > ≠ . @ ≡ ≢ ⍴ , ⍪ ⍳ ↑ ↓ ? ⍒ ⍋ ⍉ ⌽ ⊖ ∊ ⊥ ⊤ ⍎ ⍕ ⌹ ⊂ ⊃ ∪ ∩ ⍷ ⌷ ∘ → ← / ⌿ \ ⍀ ¨ ⍣ & ⍨ ⌶ ⊆ ⊣ ⊢ ⍠ ⍤ ⌸ ⌺ ⍸ अक्षरांकीय प्रतीकों को मूलशब्द से पहले ⎕ की आवश्यकता होती है Yes (first-order functions only) Yes Yes (higher-order functions only) च्च-क्रम के कार्य प्रथम-क्रम के कार्यों से पहले होते हैं उच्च-क्रम के कार्य बाएं साहचर्य हैं, प्रथम-क्रम के कार्य सही साहचर्य हैं Yes Yes Yes (alphanumeric only)
C () [] -> . ! ~ ++ -- + - * & / % << >> < <= > >= == != ^ | && || ?: = += -= *= /= %= &= ^= sizeof Yes Yes Yes Yes Yes Yes No No
C++ ( अधिक) sizeof typeid new delete throw decltype static_cast dynamic cast reinterpret_cast const_cast Yes Yes Yes Yes Yes Yes Yes No
C# ( अधिक) उसी प्रकार से C/C++, के साथ ?. ?[] ?? ??= sizeof nameof new stackalloc await throw checked unchecked is as delegate default true false
LINQ: from select where group...by group...by...into join...in...on...equals join...in...on...equals...into orderby orderby...descending
Roslyn-only: __makeref __refvalue __reftype
Yes Yes Yes Yes Yes Yes Yes No
Java उसी प्रकार से C/C++ new throw instanceof Yes Yes Yes Yes Yes Yes No No
Eiffel [] + - * / // = /= not and or implies "and then" "or else" Yes Yes No Yes Yes No Yes Yes
Haskell + - * / ^ ^^ ** == /= > < >= <= && || >>= >> $ $! . ++ !! : आम पुस्तकालयों में और भी बहुत कुछ कार्य का नाम पश्च में रखा जाना चाहिए Yes Yes No Yes Yes Yes, using Type classes Yes
Pascal * / + - = < > <> <= >= := not div mod and or in Yes Yes No Yes Yes Yes No No
Perl -> ++ -- ** ! ~ \ + - . =~ !~ * / % < > <= >= == != <=> ~~ & | ^ && || ' print sort chmod chdir rand and or not xor lt gt le ge eq ne cmp x Yes Yes Yes Yes Yes Yes Yes No
PHP [] ** ++ -- ~ @![7] * / % + - . << >> < <= > >= == != === !== <> <=> & ^ | && || ?? ?: = += -= *= **= /= .= %= &= |= ^= <<= >>= clone new unset print echo isset instanceof and or xor Yes Yes Yes Yes Yes No No No
PL/I ( ) -> + - * / ** > ¬> >= = ¬= <= < ¬< ¬ & | || Yes Yes No Yes Yes No No No
Prolog :- ?- ; , . =.. = \= < =< >= > == \== - + / * spy nospy not is mod Yes Yes Yes Yes Yes No No Yes
Raku ++ -- ** ! ~ ~~ * / + - . < > <= >= == != <=> & | ^ && || // [8] print sort chmod chdir rand and or not xor lt gt le ge eq ne leg cmp x xx Yes Yes Yes Yes Yes Yes Yes Yes[9]
Seed7 {} [] -> ** ! + - * / << >> & >< | = <> > >= < <= <& := +:= -:= *:= /:= <<:= >>:= &:= @:= conv varConv parse conj div rem mdiv mod times mult in not and or digits lpad rpad lpad0 Yes Yes Yes Yes Yes Yes Yes Yes
Smalltalk ( हाँ - दो वर्णों तक[10]) अक्षरांकीय प्रतीकों को मूलशब्द के बाद एक अपूर्ण विराम की आवश्यकता होती है No Yes Yes No No Yes Yes Yes
Swift कोई भी एकल कूटप्रतीक तार., सहित ! ~ + - * / % =+ =- =* =/ =% &+ &- &* =&+ =&- =&* && || << >> & | ^ == != < <= > >= ?? ... ..< मानक पुस्तकालय में के रूप में है? Yes Yes Yes Yes (defined as partial order in precedence groups) Yes (defined as part of precedence groups) Yes Yes Yes
Visual Basic .NET () . ! ?() ?. ?! + - * / \ & << >> < <= > >= ^ <> = += -= *= /= \= &= ^= <<= >>= New Await Mod Like Is IsNot Not And AndAlso Or OrElse Xor If(...,...) If(...,...,...) GetXmlNamespace(...) GetType(...) NameOf(...) TypeOf...Is TypeOf...IsNot DirectCast(...,...) TryCast(...,...) CType(...,...) CBool(...) CByte(...) CChar(...) CDate(...) CDec(...) CDbl(...) CInt(...) CLng(...) CObj(...) CSByte(...) CShort(...) CSng(...) CStr(...) CUInt(...) CULng(...) CUShort(...)
LINQ: From Aggregate...Into Select Distinct Where <Order By>...[Ascending|Descending] Take <Take While> Skip <Skip While> Let Group...By...Into Join...On <Group Join...On...Into>
Yes Yes Yes Yes Yes Yes Yes No


यह भी देखें

टिप्पणियाँ

  1. Conversely a right-associative operator with its right argument, though this is rarer.
  2. Introducing a new operator changes the lexical specification of the language, which changes the lexical analysis. The arity and precedence of the operator is then part of the phrase syntax of the language, which changes the phrase-level analysis. For example, adding an operator @ requires lexing and tokenizing this character, and the phrase structure (syntax tree) depends on the arity and precedence of this operator.

संदर्भ

  1. "ऑपरेटर इनपुट फॉर्म-वोल्फ्राम लैंग्वेज डॉक्यूमेंटेशन". reference.wolfram.com.
  2. "मैक्सिमा 5.42.0 मैनुअल: 7. ऑपरेटर्स". maxima.sourceforge.net.
  3. "उपसर्ग, पोस्टफिक्स और सर्कमफिक्स ऑपरेटर्स". mythryl.org.
  4. "ऑपरेटर्स". doc.perl6.org.
  5. "एसडब्ल्यूआई-प्रोलॉग -- ऑप/3". www.swi-prolog.org.
  6. "एक ऑपरेटर घोषित करें". seed7.sourceforge.net.
  7. "PHP: Error Control Operators - Manual". php.net.
  8. "Operators". docs.perl6.org.
  9. "Functions". docs.perl6.org.
  10. Goldberg, Adele. "Smalltalk-80: The Language and its Implementation, p. 27, ISBN 0-201-11371-6" (PDF).