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

कंप्यूटर प्रोग्रामिंग में, ऑपरेटर प्रोग्रामिंग भाषाओं के भीतर परिभाषित निर्माण होते हैं जो आम तौर पर सबरूटीन की तरह व्यवहार करते हैं, लेकिन जो सिंटैक्स (प्रोग्रामिंग भाषा) या सिमेंटिक्स_ (कंप्यूटर विज्ञान) से भिन्न होते हैं।

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

सिंटेक्स
सिंटैक्स (प्रोग्रामिंग लैंग्वेज) ऑपरेटर आमतौर पर फंक्शन (कंप्यूटर साइंस) के विपरीत होते हैं। अधिकांश भाषाओं में, कार्यों को संचालन स्तर और संबद्धता के निश्चित क्रम के साथ उपसर्ग ऑपरेटर के एक विशेष रूप के रूप में देखा जा सकता है, अक्सर अनिवार्य ब्रैकेट # कोष्ठक के साथ .28 .29 उदा।  (या   लिस्प में (प्रोग्रामिंग भाषा))। अधिकांश भाषाएँ प्रोग्रामर-परिभाषित कार्यों का समर्थन करती हैं, लेकिन वास्तव में प्रोग्रामर-परिभाषित ऑपरेटरों का समर्थन करने का दावा नहीं कर सकती हैं, जब तक कि उनके पास उपसर्ग संकेतन से अधिक और एक से अधिक पूर्ववर्ती स्तर न हों। सिमेंटिक रूप से ऑपरेटरों को अलग-अलग कॉलिंग नोटेशन और सीमित संख्या में पैरामीटर (आमतौर पर 1 या 2) के साथ फ़ंक्शन के विशेष रूप के रूप में देखा जा सकता है।

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

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

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

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

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

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

एक महत्वपूर्ण उपयोग तब होता है जब एक बाएं-सहयोगी बाइनरी ऑपरेटर अपने बाएं तर्क को संशोधित करता है (या एक साइड इफेक्ट पैदा करता है) और फिर उस तर्क का एल-वैल्यू के रूप में मूल्यांकन करता है। यह ऑपरेटरों के अनुक्रम की अनुमति देता है जो सभी मूल तर्क को प्रभावित करते हैं, विधि कैस्केडिंग के समान धाराप्रवाह इंटरफ़ेस की अनुमति देते हैं। एक सामान्य उदाहरण है  सी ++ में ऑपरेटर   पुस्तकालय, जो धाराप्रवाह उत्पादन की अनुमति देता है, निम्नानुसार है: <वाक्यविन्यास लैंग = सीपीपी> cout << हैलो << << दुनिया! << एंडल; 

उपयोगकर्ता परिभाषित ऑपरेटरों
एक भाषा में बिल्ट-इन ऑपरेटरों की एक निश्चित संख्या हो सकती है (उदा। +, -, *, &lt;, &lt;=, !, =, आदि C और C++|C और C++, PHP में ऑपरेटरों में), या यह प्रोग्रामर-परिभाषित ऑपरेटरों के निर्माण की अनुमति दे सकता है (जैसे प्रोलॉग, चिल्लाओ, एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ #, OCaml, हास्केल प्रोग्रामिंग भाषा)। कुछ प्रोग्रामिंग लैंग्वेज ऑपरेटर सिंबल को विशेष कैरेक्टर जैसे प्रतिबंधित करती हैं + या = जबकि अन्य नामों को भी अनुमति देते हैं  (जैसे पास्कल (प्रोग्रामिंग भाषा))।

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

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

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

कम आम ऑपरेटरों में शामिल हैं:
 * अल्पविराम संचालिका:
 * डेरेफरेंस ऑपरेटर:  और पता-ऑपरेटर:
 * ?: या टर्नरी ऑपरेटर:
 * एल्विस ऑपरेटर:
 * अशक्त कोलेसिंग ऑपरेटर:
 * अंतरिक्ष यान संचालक (तीन तरह से तुलना के लिए):

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

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

उदाहरण में, ऑपरेटर हैं: > (इससे बड़ा), AND और < (इससे कम)।

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

जावास्क्रिप्ट विपरीत नियमों का पालन करता है - ऊपर समान अभिव्यक्ति खोजने पर, यह पूर्णांक को रूपांतरित कर देगा  एक तार में , फिर बनाने के लिए दो ऑपरेंड को जोड़ें.

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

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

यह भी देखें

 * रिलेशनल ऑपरेटर

इस पेज में लापता आंतरिक लिंक की सूची

 * अधिक से अधिक चिह्न
 * प्रोग्रामिंग की भाषाएँ
 * सिंटेक्स (प्रोग्रामिंग भाषाएं)
 * वस्तु (कंप्यूटर विज्ञान)
 * क्षेत्र (कंप्यूटर विज्ञान)
 * कार्रवाई के आदेश
 * समारोह (कंप्यूटर विज्ञान)
 * अभिव्यक्ति (कंप्यूटर विज्ञान)
 * कैस्केडिंग विधि
 * सी और सी ++ में ऑपरेटर्स
 * सही
 * अंकगणितीय ऑपरेशन
 * शाब्दिक विश्लेषण
 * तीन तरह की तुलना
 * केंद्रीय प्रसंस्करण इकाइयां
 * स्ट्रिंग संयोजन