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

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

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

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

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

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

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

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

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

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

x = ++a[ i ];

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

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

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

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

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

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

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

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

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

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

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

जावास्क्रिप्ट विपरीत नियमों का पालन करती है - उपर्युक्त समान व्यंजक खोजने पर, यह पूर्णांक  को एक तार में  फिर दो संकार्य को

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

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

यह भी देखें

 * संबंधात्मक ऑपरेटर