संबंधपरक प्रचालक

कंप्यूटर विज्ञान में, एक संबंधपरक संकारक (संबंधपरक प्रचालक) एक प्रोग्रामिंग भाषा निर्माण या प्रचालक (प्रोग्रामिंग) है जो दो संस्थाओं के बीच किसी प्रकार के संबंध (गणित) का परीक्षण या परिभाषित करता है। इनमें संख्यात्मक समानता (गणित) (जैसे,5 &#61; 5) और असमानता (गणित) (जैसे, 4 ≥ 3) सम्मिलित है।

प्रोग्रामिंग भाषाओं में, जिसमें उनके प्रकार की प्रणाली में एक अलग बूलियन डेटा प्रकार सम्मिलित हैं, जैसे पास्कल (प्रोग्रामिंग भाषा), एडीए (प्रोग्रामिंग भाषा), या जावा (प्रोग्रामिंग भाषा), ये ऑपरेटर सामान्यतः सही या गलत का मूल्यांकन करते हैं, इस यह बात पर निर्भर करता है कि दो ओपेरंड के बीच सशर्त संबंध है या नहीं है। सी (प्रोग्रामिंग भाषा) जैसी भाषाओं में, संबंधपरक प्रचालक पूर्णांक 0 या 1 को प्रदर्शित करते  हैं, जहां 0 असत्य को तथा कोई भी गैर-शून्य मान सत्य के लिए होता है।

अभिव्यक्ति (प्रोग्रामिंग) एक संबंधपरक प्रचालक का उपयोग करके बनाई गई एक अभिव्यक्ति को एक रिलेशनल एक्सप्रेशन या एक शर्त कहा जाता है। संबंधपरक संचालकों को तार्किक विधेय के विशेष मामलों के रूप में देखा जा सकता है।

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

स्थान समानता बनाम सामग्री समानता
कभी-कभी, विशेष रूप से वस्तु-उन्मुख (वस्तु ओरिएंटेड) प्रोग्रामिंग में, तुलना डेटा प्रकार और वंशानुक्रम, समानता और पहचान (गणित) के प्रश्न उठाती है। इसके बीच अंतर करना प्रायः आवश्यक होता है:
 * एक ही प्रकार की दो अलग -अलग वस्तुएं, जैसे, दो हाथ
 * दो वस्तुएं समान हैं, लेकिन अलग हैं, जैसे, दो $ 10 बैंकनोट्स
 * दो वस्तुएं समान हैं लेकिन अलग -अलग प्रतिनिधित्व करते हैं, जैसे, एक $ 1 बिल और एक $ 1 का सिक्का
 * एक ही वस्तु के दो अलग -अलग संदर्भ, जैसे, एक ही व्यक्ति के लिए दो उपनाम


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

समानता का पहला प्रकार सामान्यतः दूसरे का तात्पर्य है (संख्या (एनएएन) जैसी चीजों को छोड़कर जो स्वयं के लिए असमान हैं), लेकिन बातचीत आवश्यक रूप से सत्य नहीं है। उदाहरण के लिए, दो स्ट्रिंग (कंप्यूटर विज्ञान) वस्तु अलग -अलग वस्तु हो सकते हैं (पहले अर्थ में असमान), लेकिन इसमें वर्णों का समान अनुक्रम (दूसरे अर्थ में समान) होता है। इस मुद्दे के अधिक के लिए पहचान (वस्तु-ओरिएंटेड प्रोग्रामिंग) देखें।
 * स्थान समानता (पहचान): यदि दो संदर्भ (ए और बी) एक ही वस्तु का संदर्भ देते हैं। ए के माध्यम से वस्तु के साथ बातचीत बी के माध्यम से समान इंटरैक्शन से अप्रभेद्य हैं, और ए के माध्यम से वस्तु (वस्तु) में विशेष रूप से परिवर्तन बी के माध्यम से परिलक्षित होते हैं।
 * सामग्री समानता: यदि दो संदर्भों (ए और बी) द्वारा संदर्भित वस्तुएं कुछ अर्थों में समतुल्य हैं:
 * संरचनात्मक समानता (यानी, उनकी सामग्री समान हैं)। जो या तो उथला हो सकता है (केवल तत्काल उप -परीक्षण का परीक्षण), या गहरा (उप -भागों की समानता के लिए परीक्षण)। इसे प्राप्त करने का एक सरल तरीका प्रतिनिधित्वात्मक समानता के माध्यम से है: यह जाँचना कि मूल्यों का एक ही प्रतिनिधित्व है।
 * तदनुकूल, बाहरी व्यवहार को संरक्षित करना। उदाहरण के लिए, 1/2 और 2/4 को एक तर्कसंगत संख्या के रूप में देखे जाने पर समान माना जाता है। एक संभावित आवश्यकता यह होगी कि ए = बी यदि और केवल यदि वस्तु ए और बी पर सभी संचालन में एक ही परिणाम होगा, तो रिफ्लेक्टिव रिलेशन, समरूपता और सकर्मक संबंध के अलावा है।

कई सरल अंश (गणित) सहित वास्तविक संख्याओं को फ्लोटिंग-पॉइंट अंकगणित में बिल्कुल दर्शाया नहीं जा सकता है, और किसी दिए गए सहिष्णुता के भीतर समानता के लिए परीक्षण करना आवश्यक हो सकता है। इस तरह की सहिष्णुता, हालांकि, आसानी से वांछित गुणों जैसे कि संक्रामिता को तोड़ सकती है, जबकि स्वतुल्यता (रिफ्लेक्सिटी) टूट जाती है: आईईईई 754। आईईईई फ्लोटिंग-पॉइंट स्टैंडर्ड के लिए आवश्यक है कि नान ≠ नान होल्ड्स हो। इसके विपरीत, (2022) पॉज़िट (नंबर प्रारूप) अंकगणित के लिए तकनीकी मानक (पॉज़िट समर्थकों का अर्थ है आईईईई फ्लोट्स को बदलने के लिए) एक समान अवधारणा है, NएR (वास्तविक नहीं), जहां nएr = nएr पकड़ता है। अन्य प्रोग्रामिंग तत्व जैसे कि कम्प्यूटेबल फ़ंक्शंस, या तो समानता की कोई भावना नहीं हो सकती है, या एक समानता जो असमान है। इन कारणों के लिए, कुछ भाषाएं एक आधार वर्ग, एक इंटरफ़ेस, एक विशेषता या एक प्रोटोकॉल के रूप में तुलनीय की एक स्पष्ट धारणा को परिभाषित करती हैं, जिसका उपयोग या तो स्पष्ट रूप से उपयोग किया जाता है, स्रोत कोड में घोषणा द्वारा, या निहित रूप से, संरचना के माध्यम से सम्मिलित प्रकार के है।

विभिन्न प्रकार के मूल्यों की तुलना करना
जावास्क्रिप्ट,, पीएचपी, वीबीस्क्रिप्ट और कुछ अन्य गतिशील रूप से टाइप की गई भाषाओं में, मानक समानता ऑपरेटर सत्य का मूल्यांकन करता है यदि दो मान समान हैं, भले ही उनके पास अलग-अलग प्रकार हों, उदाहरण के लिए संख्या 4 पाठ स्ट्रिंग "4" के बराबर तुलना करें। एक टाइप किया गया समानता ऑपरेटर प्रायः ऐसी भाषाओं में भी उपलब्ध होता है, जो केवल समान या समकक्ष प्रकार वाले मानों के लिए सही होता है (PHP में, 4 === "4" गलत है, हालांकि 4 == "4" सत्य है)। उन भाषाओं के लिए जहां संख्या 0 को असत्य के रूप में व्याख्यायित किया जा सकता है, यह ऑपरेटर शून्य की जांच करने जैसी चीजों को सरल बना सकता है (जैसा कि x == 0 x के लिए सत्य होगा या तो 0 या "0" प्रकार के अज्ञेयवादी समानता ऑपरेटर का उपयोग कर के)।

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

जब यह दो डेटा आइटमों के बीच तुलना के परिणाम के साथ एक संख्यात्मक मान को जोड़ने के लिए वांछित होता है, तो कहते हैं कि ए और बी, सामान्य सम्मेलन को असाइन करना और माइनस करना है; 1 यदि ए <बी, 0 यदि ए = बी और 1 अगर ए> बी अगर ए> बी। उदाहरण के लिए, सी फ़ंक्शन इस सम्मेलन के अनुसार तीन-तरफ़ा तुलना और रिटर्न & माइनस; 1, 0, या 1 करता है, और क्यू सॉर्ट  को इस सम्मेलन के अनुसार मूल्यों को वापस करने के लिए तुलना समारोह की उम्मीद है। एल्गोरिदम को छांटने में, तुलना कोड की दक्षता महत्वपूर्ण है क्योंकि यह छंटाई प्रदर्शन में योगदान देने वाले प्रमुख कारकों में से एक है।

प्रोग्रामर-डिफाइंड डेटा प्रकारों की तुलना (डेटा प्रकार जिसके लिए प्रोग्रामिंग भाषा में कोई इन-बिल्ट समझ नहीं है) कस्टम-लिखित या लाइब्रेरी फ़ंक्शंस (जैसे) द्वारा किया जा सकता है ऊपर उल्लेख किया गया है), या, कुछ भाषाओं में, ऑपरेटर द्वारा एक तुलना ऑपरेटर को ओवरलोड करके-अर्थात्, एक प्रोग्रामर-परिभाषित अर्थ को असाइन करना जो डेटा प्रकारों की तुलना में निर्भर करता है।एक अन्य विकल्प कुछ सम्मेलन का उपयोग कर रहा है जैसे कि सदस्य-वार तुलना किया जाता है।

तार्किक समतुल्यता
हालांकि शायद सबसे पहले, बूलियन तर्क तार्किक प्रचालक  XOR, AND, OR, और NOT, संबंधपरक प्रचालकों को तार्किक समतुल्यता के लिए डिज़ाइन किया जा सकता है, जैसे कि वे सभी को एक दूसरे के संदर्भ में परिभाषित किया जा सकता है।निम्नलिखित चार सशर्त कथनों में किसी भी दिए गए एक्स और वाई मानों के लिए एक ही तार्किक समतुल्यता E (या तो सभी सत्य या सभी झूठे) हैं:

E = \begin{cases} x < y \\ y > x \\ x \ngeq y \\ y \nleq x \end{cases}$$ यह डोमेन पर अच्छी तरह से आदेश दिया जा रहा है।

मानक संबंधपरक ऑपरेटर
प्रोग्रामिंग भाषाओं में उपयोग किए जाने वाले सबसे आम संख्यात्मक संबंधपरक ऑपरेटर नीचे दिखाए गए हैं। मानक SQL, एक ही ऑपरेटरों को बुनियादी के रूप में उपयोग करता है, जबकि कई डेटाबेस अनुमति देते हैं  निम्न के अलावा   मानक से। SQL सख्त बूलियन बीजगणित का अनुसरण करता है, यानी शॉर्ट-सर्किट मूल्यांकन का उपयोग नहीं करता है, जो नीचे अधिकांश भाषाओं के लिए आम है। उदाहरण PHP के पास है, लेकिन अन्यथा इसमें इन दो ऑपरेटरों को कई SQL डेटाबेस की तरह उपनाम के रूप में परिभाषित किया गया है।

अन्य सम्मेलन कम आम हैं: आम LISP और MएcSymए/Mएximए (सॉफ्टवेयर) असमानता को छोड़कर बुनियादी जैसे ऑपरेटरों का उपयोग करते हैं, जो है  आम लिस्प में और   MएcSymए/Mएximए में।पुराने LISP (प्रोग्रामिंग भाषा) का उपयोग किया ,  , और  ;और उनका उपयोग करके उन्हें नकार दिया   शेष ऑपरेटरों के लिए हैं।

सिंटैक्स
संबंधपरक ऑपरेटरों का उपयोग शब्दों के बजाय तकनीकी साहित्य में भी किया जाता है। संबंधपरक प्रचालकों को सामान्यतः Infix नोटेशन में लिखा जाता है, यदि प्रोग्रामिंग भाषा द्वारा समर्थित है, जिसका अर्थ है कि वे अपने ऑपरेंड्स (दो अभिव्यक्तियों से संबंधित) के बीच दिखाई देते हैं। उदाहरण के लिए, पायथन में एक अभिव्यक्ति संदेश को प्रिंट करेगी यदि x y से कम है: अन्य प्रोग्रामिंग भाषाएं, जैसे LISP (प्रोग्रामिंग भाषा), उपसर्ग संकेतन का उपयोग करें, निम्नानुसार हैं:

ऑपरेटर चेनिंग
गणित में, चेन संबंधपरक प्रचालकों के लिए यह आम बात है, जैसे कि 3 <x <y <20 (जिसका अर्थ है 3 <x और x <y और y <20)। वाक्यविन्यास स्पष्ट है क्योंकि गणित में ये संबंधपरक ऑपरेटर सकर्मक हैं।

हालाँकि, कई हालिया प्रोग्रामिंग भाषाओं में 3 <x <y जैसी अभिव्यक्ति दिखाई देगी, जिसमें दो बाएं (या दाएं-) साहचर्य ऑपरेटरों को सम्मिलित किया जाएगा, इसे कुछ के रूप में व्याख्या करना । अगर हम कहते हैं कि x = 4, हम तब प्राप्त करते हैं , और मूल्यांकन देगा   जो आम तौर पर समझ में नहीं आता है।हालांकि, यह C/C ++ और कुछ अन्य भाषाओं में संकलित करता है, आश्चर्यजनक परिणाम प्राप्त करता है (जैसा कि सच 1 नंबर 1 द्वारा दर्शाया जाएगा)।

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

कुछ भाषाएं, जैसे सामान्यतः लिस्प, इसके लिए कई तर्क का उपयोग करती हैं। लिस्प में  सच है जब x 1 और 10 के बीच होता है।

असाइनमेंट ऑपरेटरों के साथ भ्रम
प्रारंभिक फोरट्रान (1956-57) भारी प्रतिबंधित वर्ण सेटों से घिरा हुआ था जहां = एकमात्र रिलेशनल ऑपरेटर उपलब्ध था। कोई <या> (और निश्चित रूप से कोई ≤ या ≥) नहीं थे। इसने डिजाइनरों को .GT., .LT., .GE., .EQ जैसे प्रतीकों को परिभाषित करने के लिए मजबूर किया। आदि और बाद में गणितीय उपयोग (X=X+1 असंभव होना चाहिए) के साथ स्पष्ट असंगति के बावजूद, प्रतिलिपि बनाने के लिए शेष = वर्ण का उपयोग करने के लिए आकर्षक बना दिया हैं।

अंतर्राष्ट्रीय बीजगणितीय भाषा (आईएएल, एल्गोल 58) और एल्गोल (1958 और 1960) इस प्रकार पेश किए गए: = असाइनमेंट के लिए, मानक छोड़कर = समानता के लिए उपलब्ध, CPL, ALGOL W, ALGOL 68, बेसिक कंबाइंड प्रोग्रामिंग लैंग्वेज (बीसीपीएल) के बाद एक कन्वेंशन, सिमुला, सेट लैंग्वेज (एसईएलटी), पास्कल (प्रोग्रामिंग लैंग्वेज), स्मॉलटॉक, मोडुला -2, एDए (प्रोग्रामिंग लैंग्वेज), मानक एमएल , OCएML, एफिल (प्रोग्रामिंग लैंग्वेज),  वस्तु पास्कल (डेल्फी (प्रोग्रामिंग भाषा) ), ओबेरोन, डायलन (प्रोग्रामिंग भाषा) , वीएचएसआईसी हार्डवेयर विवरण भाषा (वीएचडीएल), और कई अन्य भाषाएँ होती है।

बी और सी
अधिकांश प्रोग्रामिंग भाषाओं के बीच इस समान वास्तविक मानक को अंततः बदल दिया गया था, अप्रत्यक्ष रूप से, बी (प्रोग्रामिंग भाषा) नामक एक न्यूनतम संकलित भाषा द्वारा।इसका एकमात्र इच्छित एप्लिकेशन पहले बंदरगाह (तत्कालीन बहुत आदिम) यूनिक्स के लिए एक वाहन के रूप में था, लेकिन यह बहुत प्रभावशाली सी (प्रोग्रामिंग भाषा) भाषा में भी विकसित हुआ।

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

बाद में एक छोटे प्रकार की प्रणाली को पेश किया गया था, बी तब सी बन गया। यूनिक्स के साथ इसके जुड़ाव के साथ इस भाषा की लोकप्रियता, जावा, सी#, और कई अन्य भाषाओं के बाद सूट के बाद, वाक्यात्मक रूप से, इस अनावश्यक संघर्ष के बावजूद गणितीय अर्थ के साथ इस अनावश्यक संघर्ष के बावजूद, समान संकेत।

भाषाएँ
C में असाइनमेंट का एक मूल्य (प्रोग्रामिंग) होता है और चूंकि किसी भी गैर-शून्य स्केलर मान को सशर्त (प्रोग्रामिंग) में सही के रूप में व्याख्या किया जाता है, कोड  कानूनी है, लेकिन इसका बहुत अलग अर्थ है  । पूर्व कोड टुकड़ा का अर्थ है y को x असाइन करें, और यदि X का नया मान शून्य नहीं है, तो निम्नलिखित कथन को निष्पादित करें।बाद के टुकड़े का मतलब है कि यदि और केवल यदि x y के बराबर है, तो निम्न कथन को निष्पादित करें। हालांकि जावा (प्रोग्रामिंग लैंग्वेज) और सी शार्प (प्रोग्रामिंग लैंग्वेज) C# में सी के समान ऑपरेटर हैं, यह गलती सामान्यतः इन भाषाओं में एक संकलन त्रुटि का कारण बनती है, क्योंकि IF- स्थिति प्रकार की होनी चाहिए, और अन्य प्रकारों (जैसे, संख्या) से परिवर्तित करने का कोई निहित तरीका नहीं है बूलियन एस। इसलिए जब तक कि वैरिएबल को टाइप नहीं किया जाता है   (या आवरण प्रकार  ), एक संकलन त्रुटि होगी।

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

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

कुछ प्रोग्रामर सामान्य आदेश के उल्टे में एक निरंतरता के खिलाफ तुलना लिखने की आदत में मिलते हैं:

अगर  गलती से उपयोग किया जाता है, परिणामी कोड अमान्य है क्योंकि 2 एक चर नहीं है। कंपाइलर एक त्रुटि संदेश उत्पन्न करेगा, जिस पर उचित ऑपरेटर को प्रतिस्थापित किया जा सकता है। इस कोडिंग शैली को बाएं हाथ की तुलना, या योदा की स्थिति कहा जाता है।

यह तालिका विभिन्न भाषाओं में इन दो प्रकार की समानता के लिए परीक्षण करने के लिए विभिन्न तंत्रों को सूचीबद्ध करती है:

यह भी देखें

 * द्विआधारी संबंध
 * सामान्य ऑपरेटर संकेतन
 * सशर्त (कंप्यूटर प्रोग्रामिंग)
 * समानता (गणित)
 * बराबर साइन
 * लॉजिकल ऑपरेटर
 * ऑपरेशन (गणित)
 * ऑपरेटर (गणित)
 * प्रचालक (कंप्यूटर प्रोग्रामिंग)
 * अंतरिक्ष यान प्रचालक
 * त्रैमासिक संबंध

नोट्स और संदर्भ
