रिलेशनल ऑपरेटर
This article needs additional citations for verification. (March 2022) (Learn how and when to remove this template message) |
कंप्यूटर विज्ञान में, एक रिलेशनल ऑपरेटर एक प्रोग्रामिंग भाषा निर्माण या ऑपरेटर (प्रोग्रामिंग) है जो बाइनरी फ़ंक्शन के बीच किसी प्रकार के संबंध (गणित) का परीक्षण या परिभाषित करता है। इनमें संख्यात्मक समानता (गणित) (जैसे, 5 = 5) और असमानता (गणित) (जैसे, 4 ≥ 3).
प्रोग्रामिंग लैंग्वेज में, जिसमें पास्कल (प्रोग्रामिंग भाषा), एडा (प्रोग्रामिंग लैंग्वेज), या जावा (प्रोग्रामिंग भाषा) जैसे उनके प्रकार प्रणाली में एक अलग बूलियन डेटा प्रकार शामिल होता है, ये ऑपरेटर आमतौर पर सही या गलत का मूल्यांकन करते हैं, यह निर्भर करता है कि क्या सशर्त संबंध दो ओपेरंड के बीच होल्ड होता है या नहीं। C (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में, रिलेशनल ऑपरेटर पूर्णांक 0 या 1 लौटाते हैं, जहाँ 0 का अर्थ असत्य होता है और कोई भी गैर-शून्य मान सत्य के लिए होता है।
एक रिलेशनल ऑपरेटर का उपयोग करके बनाई गई एक अभिव्यक्ति (प्रोग्रामिंग) को एक रिलेशनल एक्सप्रेशन या कंडीशन कहा जाता है। संबंधपरक संचालकों को तार्किक विधेय (गणितीय तर्क) के विशेष मामलों के रूप में देखा जा सकता है।
समानता
उपयोग
कई प्रोग्रामिंग भाषा निर्माण और डेटा प्रकारों में समानता का उपयोग किया जाता है। यह परीक्षण करने के लिए प्रयोग किया जाता है कि क्या कोई तत्व पहले से ही सेट (कंप्यूटर विज्ञान) में मौजूद है, या कुंजी के माध्यम से किसी मान तक पहुंचने के लिए। इसका उपयोग स्विच स्टेटमेंट में नियंत्रण प्रवाह को सही शाखा में भेजने के लिए और तर्क प्रोग्रामिंग में एकीकरण प्रक्रिया के दौरान किया जाता है।
समानता का एक संभावित अर्थ यह है कि यदि a, b के बराबर है, तो a या b को बिना किसी अंतर पर ध्यान दिए किसी भी संदर्भ में एक दूसरे के स्थान पर इस्तेमाल किया जा सकता है। लेकिन यह कथन अनिवार्य रूप से धारण नहीं करता है, विशेष रूप से सामग्री समानता के साथ-साथ परिवर्तनशीलता को ध्यान में रखते हुए।
स्थान समानता बनाम सामग्री समानता
कभी-कभी, विशेष रूप से वस्तु-उन्मुख प्रोग्रामिंग में, तुलना डेटा प्रकार और वंशानुक्रम (कंप्यूटर विज्ञान), समानता (गणित) और पहचान (गणित) के प्रश्न उठाती है। इसके बीच अंतर करना अक्सर आवश्यक होता है:
- एक ही प्रकार की दो भिन्न वस्तुएँ, जैसे दो हाथ
- दो वस्तुएँ समान लेकिन अलग-अलग हों, उदाहरण के लिए, $10 के दो नोट
- दो वस्तुओं का समान होना लेकिन अलग-अलग प्रतिनिधित्व होना, उदाहरण के लिए, $1 का बिल और $1 का सिक्का
- एक ही वस्तु के दो अलग-अलग संदर्भ, उदाहरण के लिए, एक ही व्यक्ति के लिए दो उपनाम
कई आधुनिक प्रोग्रामिंग भाषाओं में, वस्तुओं और डेटा संरचनाओं को संदर्भ (कंप्यूटर विज्ञान) के माध्यम से एक्सेस किया जाता है। ऐसी भाषाओं में, दो भिन्न प्रकार की समानता के परीक्षण की आवश्यकता हो जाती है:
- स्थान समानता (पहचान): यदि दो संदर्भ (ए और बी) एक ही वस्तु का संदर्भ देते हैं। ए के माध्यम से वस्तु के साथ बातचीत बी के माध्यम से समान बातचीत से अप्रभेद्य है, और विशेष रूप से ए के माध्यम से वस्तु में परिवर्तन बी के माध्यम से परिलक्षित होते हैं।
- सामग्री समानता: यदि दो संदर्भों (ए और बी) द्वारा संदर्भित वस्तुएं कुछ अर्थों में समान हैं:
- संरचनात्मक समानता (अर्थात, उनकी सामग्री समान हैं)। जो या तो उथला हो सकता है (केवल तत्काल उप-भागों का परीक्षण), या गहरा (उप-भागों की पुनरावर्ती समानता के लिए परीक्षण)। इसे प्राप्त करने का एक सरल तरीका प्रतिनिधित्वात्मक समानता के माध्यम से है: यह जाँचना कि मूल्यों का समान प्रतिनिधित्व है।
- कुछ अन्य दर्जी समानता, बाहरी व्यवहार को संरक्षित करना। उदाहरण के लिए, 1/2 और 2/4 को एक परिमेय संख्या के रूप में देखे जाने पर समान माना जाता है। एक संभावित आवश्यकता यह होगी कि ए = बी अगर और केवल अगर ऑब्जेक्ट ए और बी पर सभी ऑपरेशनों का एक ही परिणाम होगा, इसके अलावा प्रतिवर्त संबंध, समरूपता और सकर्मक संबंध होगा।
समानता का पहला प्रकार आम तौर पर दूसरे का तात्पर्य है (संख्या (NaN) जैसी चीजों को छोड़कर जो स्वयं के लिए असमान हैं), लेकिन बातचीत आवश्यक रूप से सत्य नहीं है। उदाहरण के लिए, दो स्ट्रिंग (कंप्यूटर विज्ञान) वस्तुएं अलग-अलग वस्तुएं हो सकती हैं (पहले अर्थ में असमान) लेकिन वर्णों के समान अनुक्रम (दूसरे अर्थ में समान) होते हैं। इस मुद्दे के बारे में अधिक जानकारी के लिए [[पहचान (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग)]] देखें।
कई सरल अंश (गणित) सहित वास्तविक संख्याएं, फ़्लोटिंग-पॉइंट अंकगणित में सटीक रूप से प्रदर्शित नहीं की जा सकती हैं, और किसी दिए गए सहिष्णुता के भीतर समानता के लिए परीक्षण करना आवश्यक हो सकता है। हालांकि, इस तरह की सहिष्णुता वांछित गुणों जैसे कि ट्रांज़िटिविटी को आसानी से तोड़ सकती है, जबकि रिफ्लेक्सिविटी भी टूट जाती है: IEEE 754|IEEE फ़्लोटिंग-पॉइंट मानक के लिए आवश्यक है कि NaN ≠ NaN हो। इसके विपरीत, पॉज़िट (संख्या प्रारूप) अंकगणित के लिए (2022) तकनीकी मानक (आईईईई फ़्लोट्स को बदलने के लिए पॉज़िट प्रस्तावक का अर्थ है) की एक समान अवधारणा है, NaR (वास्तविक नहीं), जहाँ NaR = NaR धारण करता है।[1] अन्य प्रोग्रामिंग तत्व जैसे कि संगणनीय कार्य, या तो समानता की भावना नहीं रखते हैं, या एक समानता जो कि अगणनीय है। इन कारणों से, कुछ भाषाएँ तुलनीय की एक स्पष्ट धारणा को एक आधार वर्ग, एक इंटरफ़ेस, एक विशेषता या एक प्रोटोकॉल के रूप में परिभाषित करती हैं, जिसका उपयोग या तो स्पष्ट रूप से, स्रोत कोड में घोषणा द्वारा, या निहित रूप से, की संरचना के माध्यम से किया जाता है। शामिल प्रकार।
विभिन्न प्रकार के मूल्यों की तुलना
जावास्क्रिप्ट, पीएचपी, वीबीस्क्रिप्ट और कुछ अन्य टाइप सिस्टम # डायनामिक भाषाओं में, मानक समानता ऑपरेटर सत्य का मूल्यांकन करता है यदि दो मान समान हैं, भले ही उनके पास अलग-अलग प्रकार हों, उदाहरण के लिए संख्या 4 की तुलना पाठ स्ट्रिंग 4 के बराबर करें . एक टाइप किया गया समानता ऑपरेटर अक्सर ऐसी भाषाओं में भी उपलब्ध होता है, जो केवल समान या समकक्ष प्रकार वाले मानों के लिए सही होता है (PHP में, 4 === "4"
हालांकि झूठा है 4 == "4"
क्या सच है)।[2][3] उन भाषाओं के लिए जहां संख्या 0 की गलत व्याख्या की जा सकती है, यह ऑपरेटर शून्य की जांच करने जैसी चीजों को सरल बना सकता है (जैसे x == 0
अज्ञेयवादी समानता ऑपरेटर प्रकार का उपयोग करके x या तो 0 या 0 होने के लिए सही होगा)।
आदेश देना
गैर-संख्यात्मक डेटा की तुलना से अधिक और उससे कम एक सॉर्ट कन्वेंशन (जैसे, टेक्स्ट स्ट्रिंग्स के लिए, लेक्सिकोग्राफिक ऑर्डर) के अनुसार किया जाता है, जिसे प्रोग्रामिंग भाषा में बनाया जा सकता है और/या प्रोग्रामर द्वारा कॉन्फ़िगर किया जा सकता है।
जब दो डेटा आइटम्स, मान लीजिए a और b के बीच तुलना के परिणाम के साथ एक संख्यात्मक मान को संबद्ध करने की इच्छा होती है, तो सामान्य परिपाटी यह है कि -1 यदि a <b, 0 यदि a = b और 1 यदि a > b निर्दिष्ट किया जाए। उदाहरण के लिए, सी समारोह strcmp
इस परिपाटी के अनुसार तीन-तरफ़ा तुलना करता है और -1, 0, या 1 लौटाता है, और qsort अपेक्षा करता है कि तुलना फलन इस परिपाटी के अनुसार मान लौटाए। छँटाई एल्गोरिदम में, तुलना कोड की दक्षता महत्वपूर्ण है क्योंकि यह छँटाई प्रदर्शन में योगदान देने वाले प्रमुख कारकों में से एक है।
प्रोग्रामर-परिभाषित डेटा प्रकारों की तुलना (डेटा प्रकार जिनके लिए प्रोग्रामिंग भाषा में कोई अंतर्निर्मित समझ नहीं है) कस्टम-लिखित या लाइब्रेरी फ़ंक्शंस (जैसे कि strcmp
ऊपर उल्लेख किया गया है), या, कुछ भाषाओं में, ऑपरेटर द्वारा एक तुलना ऑपरेटर को ओवरलोड किया जाता है - अर्थात, एक प्रोग्रामर-परिभाषित अर्थ निर्दिष्ट करना जो कि तुलना किए जा रहे डेटा प्रकारों पर निर्भर करता है। एक अन्य विकल्प सदस्य-वार तुलना जैसे कुछ सम्मेलनों का उपयोग कर रहा है।
तार्किक समानता
हालांकि शुरू में शायद स्पष्ट न हो, जैसे बूलियन तर्क तार्किक ऑपरेटर XOR, AND, OR, और NOT, रिलेशनल ऑपरेटर्स को तार्किक तुल्यता के लिए डिज़ाइन किया जा सकता है, जैसे कि वे सभी एक दूसरे के संदर्भ में परिभाषित किए जा सकते हैं। किसी भी दिए गए x और y मानों के लिए निम्नलिखित चार सशर्त बयानों में समान तार्किक समानता ई (या तो सभी सत्य या सभी गलत) हैं:
यह डोमेन के सुव्यवस्थित होने पर निर्भर करता है।
मानक संबंधपरक ऑपरेटर
प्रोग्रामिंग भाषाओं में उपयोग किए जाने वाले सबसे आम संख्यात्मक संबंधपरक ऑपरेटर नीचे दिखाए गए हैं। मानक SQL, BASIC के समान ऑपरेटरों का उपयोग करता है, जबकि कई डेटाबेस अनुमति देते हैं !=
के अतिरिक्त <>
मानक से। SQL सख्त बूलियन बीजगणित का पालन करता है, यानी शॉर्ट सर्किट मूल्यांकन का उपयोग नहीं करता है, जो नीचे दी गई अधिकांश भाषाओं के लिए सामान्य है। उदा. PHP के पास यह है, लेकिन अन्यथा इसमें वही दो ऑपरेटर हैं जो उपनाम के रूप में परिभाषित हैं, जैसे कि कई SQL डेटाबेस।
Convention | equal to | not equal to | greater than | less than | greater than or equal to |
less than or equal to |
---|---|---|---|---|---|---|
In print | = | ≠ | > | < | ≥ | ≤ |
FORTRAN[note 1] | .EQ.
|
.NE.
|
.GT.
|
.LT.
|
.GE.
|
.LE.
|
ALGOL 68[note 2] | =
|
≠
|
>
|
<
|
≥
|
≤
|
/=
|
>=
|
<=
| ||||
eq
|
ne
|
gt
|
lt
|
ge
|
le
| |
APL | =
|
≠
|
>
|
<
|
≥
|
≤
|
BASIC, ML, Pascal[note 3] | =
|
<>
|
>
|
<
|
>=
|
<=
|
C-like[note 4] | ==
|
!=
|
>
|
<
|
>=
|
<=
|
MUMPS | =
|
'=
|
>
|
<
|
'<
|
'>
|
Lua | ==
|
~=
|
>
|
<
|
>=
|
<=
|
Erlang | ==
|
/=
|
>
|
<
|
>=
|
=<
|
=:=
|
=/=
| |||||
Bourne-like shells[note 5] | -eq
|
-ne
|
-gt
|
-lt
|
-ge
|
-le
|
Batch file | EQU
|
NEQ
|
GTR
|
LSS
|
GEQ
|
LEQ
|
MATLAB[note 6] | ==
|
~=
|
>
|
<
|
>=
|
<=
|
eq(x,y)
|
ne(x,y)
|
gt(x,y)
|
lt(x,y)
|
ge(x,y)
|
le(x,y)
| |
Fortran 90,[note 7] Haskell | ==
|
/=
|
>
|
<
|
>=
|
<=
|
Mathematica[4] | ==
|
!=
|
>
|
<
|
>=
|
<=
|
Equal[x,y]
|
Unequal[x,y]
|
Greater[x,y]
|
Less[x,y]
|
GreaterEqual[x,y]
|
LessEqual[x,y]
|
- ↑ Including FORTRAN II, III, IV, 66 and 77.
- ↑ ALGOL 68: stropping regimes are used in code on platforms with limited character sets (e.g., use
>=
orGE
instead of≥
), platforms with nobold
emphasis (use'ge'
), or platforms with only UPPERCASE (use.GE
or'GE'
). - ↑ Including ALGOL, Simula, Modula-2, Eiffel, SQL, spreadsheet formulas, and others.
- ↑ Including C, C++, C#, Go, Java, JavaScript, Perl (numerical comparison only), PHP, Python, Ruby, and R.
- ↑ Including Bourne shell, Bash, KornShell, and Windows PowerShell. The symbols
<
and>
are usually used in a shell for redirection, so other symbols must be used. Without the hyphen, is used in Perl for string comparison. - ↑ MATLAB, although in other respects using similar syntax as C, does not use
!=
, as!
in MATLAB sends the following text as a command line to the operating system. The first form is also used in Smalltalk, with the exception of equality, which is=
. - ↑ Including FORTRAN 95, 2003, 2008 and 2015.
अन्य परंपराएं कम आम हैं: सामान्य लिस्प और मैकसिमा/मैक्सिमा (सॉफ्टवेयर) असमानता को छोड़कर बेसिक जैसे ऑपरेटरों का उपयोग करते हैं, जो कि /=
आम लिस्प में और #
मैकसिमा/मैक्सिमा में। पुराने लिस्प (प्रोग्रामिंग भाषा) का इस्तेमाल किया equal
, greaterp
, और lessp
; और उनका उपयोग करने से मना कर दिया not
शेष ऑपरेटरों के लिए।
सिंटेक्स
तकनीकी साहित्य में शब्दों के स्थान पर संबंधपरक संकारकों का भी प्रयोग किया जाता है। रिलेशनल ऑपरेटर्स आमतौर पर इंफिक्स नोटेशन में लिखे जाते हैं, अगर प्रोग्रामिंग लैंग्वेज द्वारा समर्थित है, जिसका अर्थ है कि वे अपने ऑपरेंड के बीच दिखाई देते हैं (दो भाव संबंधित हैं)। उदाहरण के लिए, पायथन में एक अभिव्यक्ति संदेश को प्रिंट करेगी यदि x y से कम है: <वाक्यविन्यास लैंग = अजगर> अगर एक्स <वाई:
प्रिंट (x इस उदाहरण में y से कम है)
</वाक्यविन्यास हाइलाइट>
अन्य प्रोग्रामिंग लैंग्वेज, जैसे लिस्प (प्रोग्रामिंग लैंग्वेज), उपसर्ग अंकन का उपयोग इस प्रकार करते हैं: <वाक्यविन्यास प्रकाश लैंग = लिस्प> (>= एक्स वाई) </वाक्यविन्यास हाइलाइट>
ऑपरेटर श्रृंखलन
गणित में, रिलेशनल ऑपरेटर्स को चेन करना आम बात है, जैसे 3 < x < y < 20 (मतलब 3 < x और x < y और y < 20)। सिंटैक्स स्पष्ट है क्योंकि गणित में ये रिलेशनल ऑपरेटर सकर्मक हैं।
हालाँकि, हाल ही की कई प्रोग्रामिंग भाषाओं में 3 <x <y जैसी अभिव्यक्ति दिखाई देगी, जिसमें दो बाएँ (या दाएँ-) साहचर्य संचालक शामिल हैं, इसे कुछ इस तरह से व्याख्या करते हैं (3 < x) < y
. अगर हम कहते हैं कि x = 4, तो हमें मिलता है (3 < 4) < y
, और मूल्यांकन देगा true < y
जो आम तौर पर समझ में नहीं आता है। हालाँकि, यह C/C++ और कुछ अन्य भाषाओं में संकलित करता है, आश्चर्यजनक परिणाम देता है (जैसा कि सत्य को यहाँ संख्या 1 द्वारा दर्शाया जाएगा)।
अभिव्यक्ति देना संभव है x < y < z
इसका परिचित गणितीय अर्थ, और कुछ प्रोग्रामिंग लैंग्वेज जैसे कि पायथन और राकू (प्रोग्रामिंग भाषा) ऐसा करते हैं। अन्य, जैसे सी # और जावा, आंशिक रूप से नहीं करते हैं क्योंकि यह सी-जैसी भाषाओं में अधिकांश अन्य इन्फिक्स ऑपरेटरों के काम करने के तरीके से अलग होगा। डी प्रोग्रामिंग भाषा ऐसा नहीं करती है क्योंकि यह सी के साथ कुछ संगतता बनाए रखती है, और सी अभिव्यक्तियों को अनुमति देती है लेकिन अलग-अलग अर्थशास्त्र के साथ (यद्यपि सही दिशा में तर्कसंगत रूप से) सुविधा से अधिक भ्रम जोड़ती है।[5]
कुछ भाषाएँ, जैसे सामान्य लिस्प, इसके लिए बहु तर्क विधेय का उपयोग करती हैं। लिस्प में (<= 1 x 10)
सत्य है जब x 1 और 10 के बीच है।
असाइनमेंट ऑपरेटरों के साथ भ्रम
प्रारंभिक फोरट्रान (1956-57) अत्यधिक प्रतिबंधित चरित्र सेटों से घिरा हुआ था =
एकमात्र रिलेशनल ऑपरेटर उपलब्ध था। वहां नहीं था <
या >
(और निश्चित रूप से नहीं ≤
या ≥
). इसने डिजाइनरों को प्रतीकों को परिभाषित करने के लिए मजबूर किया .GT.
, .LT.
, .GE.
, .EQ.
आदि और बाद में इसे शेष का उपयोग करने के लिए आकर्षक बना दिया =
गणितीय उपयोग के साथ स्पष्ट असंगति के बावजूद कॉपी करने के लिए चरित्र (X=X+1
असंभव होना चाहिए)।
अंतर्राष्ट्रीय बीजगणितीय भाषा (IAL, ALGOL 58) और ALGOL (1958 और 1960) इस प्रकार पेश किए गए :=
असाइनमेंट के लिए, मानक छोड़कर =
समानता के लिए उपलब्ध, CPL (प्रोग्रामिंग लैंग्वेज), ALGOL W, ALGOL 68, बेसिक कंबाइंड प्रोग्रामिंग लैंग्वेज (BCPL), शुरुआत, SET लैंग्वेज (SETL), पास्कल (प्रोग्रामिंग लैंग्वेज), स्मॉलटॉक, मॉड्यूल-2 -2, Ada सीपीएल (प्रोग्रामिंग भाषा)), मानक एमएल, OCaml, एफिल (प्रोग्रामिंग लैंग्वेज), वस्तु पास्कल (डेल्फी (प्रोग्रामिंग भाषा)), ओबेरोन, डायलन (प्रोग्रामिंग भाषा), VHSIC हार्डवेयर डिस्क्रिप्शन लैंग्वेज (VHDL), और कई अन्य भाषाएँ।
बी और सी
अधिकांश प्रोग्रामिंग भाषाओं के बीच यह समान वास्तविक मानक अंततः बी (प्रोग्रामिंग भाषा) नामक न्यूनतम संकलित भाषा द्वारा अप्रत्यक्ष रूप से बदल दिया गया था। इसका एकमात्र इरादा अनुप्रयोग यूनिक्स (तब बहुत आदिम) के पहले बंदरगाह के लिए एक वाहन के रूप में था, लेकिन यह बहुत प्रभावशाली सी (प्रोग्रामिंग भाषा) भाषा में भी विकसित हुआ।
B ने सिस्टम प्रोग्रामिंग लैंग्वेज BCPL, CPL (प्रोग्रामिंग लैंग्वेज) के एक सरलीकृत (और टाइपलेस) संस्करण के सिंटैक्टिक रूप से परिवर्तित संस्करण के रूप में शुरुआत की। जिसे स्ट्रिप-डाउन प्रक्रिया के रूप में वर्णित किया गया है, and
और or
बीसीपीएल के संचालक[6] के साथ प्रतिस्थापित किया गया &
और |
(जो बाद में बन जाएगा &&
और ||
, क्रमश।[7]). उसी प्रक्रिया में, एल्गोल शैली :=
बीसीपीएल द्वारा प्रतिस्थापित किया गया था =
बी. में इन सबका कारण अज्ञात है।[8] चूंकि परिवर्तनीय अद्यतनों में बी में कोई विशेष वाक्यविन्यास नहीं था (जैसे let
या समान) और अभिव्यक्तियों में अनुमति दी गई थी, समान चिह्न के इस गैर-मानक अर्थ का अर्थ था कि समान चिह्न के पारंपरिक शब्दार्थ को अब दूसरे प्रतीक के साथ जोड़ा जाना था। केन थॉम्पसन ने एड हॉक का इस्तेमाल किया ==
इसके लिए संयोजन।
एक छोटे प्रकार की प्रणाली के रूप में बाद में पेश किया गया था, बी तब सी बन गया। यूनिक्स के साथ इसके सहयोग के साथ इस भाषा की लोकप्रियता ने जावा, सी #, और कई अन्य भाषाओं को सूट के बाद, वाक्य-विन्यास के गणितीय अर्थ के साथ इस अनावश्यक संघर्ष के बावजूद आगे बढ़ाया। समान चिह्न।
भाषाएँ
सी में असाइनमेंट का एक मूल्य (प्रोग्रामिंग) है और चूंकि किसी भी गैर-शून्य स्केलर मान को सशर्त (प्रोग्रामिंग) एस में सही माना जाता है,[9] कोड if (x = y)
कानूनी है, लेकिन इससे बहुत अलग अर्थ है if (x == y)
. पूर्व कोड खंड का अर्थ है x को y असाइन करना, और यदि x का नया मान शून्य नहीं है, तो निम्न कथन निष्पादित करें। बाद वाले खंड का अर्थ है यदि और केवल यदि x, y के बराबर है, तो निम्नलिखित कथन को निष्पादित करें।[10]
<वाक्यविन्यास प्रकाश लैंग = सी>
इंट एक्स = 1; इंट वाई = 2; अगर (एक्स = वाई) { / * यह कोड हमेशा निष्पादित होगा यदि y 0 के अलावा कुछ भी है * / प्रिंटफ (एक्स% डी है और वाई% डी \ n, एक्स, वाई है); }
</वाक्यविन्यास हाइलाइट>
हालांकि जावा (प्रोग्रामिंग लैंग्वेज) और सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी # में सी के समान ऑपरेटर हैं, यह गलती आमतौर पर इन भाषाओं में एक संकलन त्रुटि का कारण बनती है, क्योंकि अगर-शर्त का प्रकार होना चाहिए boolean
, और अन्य प्रकारों (जैसे, संख्याओं) में परिवर्तित करने का कोई निहित तरीका नहीं है boolean
एस। तो जब तक कि असाइन किए गए चर में टाइप न हो boolean
(या आवरण प्रकार Boolean
), एक संकलन त्रुटि होगी।
ALGOL जैसी भाषाओं में जैसे पास्कल, डेल्फी और एडा (इस अर्थ में कि वे नेस्टेड फ़ंक्शन परिभाषाओं की अनुमति देते हैं), और पायथन (प्रोग्रामिंग भाषा), और कई कार्यात्मक भाषाओं में, दूसरों के बीच, असाइनमेंट ऑपरेटर एक अभिव्यक्ति (प्रोग्रामिंग) में प्रकट नहीं हो सकते हैं। ) (शामिल if
खंड), इस प्रकार त्रुटि के इस वर्ग को छोड़कर। कुछ कंपाइलर्स, जैसे जीएनयू संकलक संग्रह (जीसीसी), इफ स्टेटमेंट के अंदर असाइनमेंट ऑपरेटर वाले कोड को कंपाइल करते समय एक चेतावनी प्रदान करते हैं, हालांकि इफ-कंडीशन के अंदर असाइनमेंट के कुछ वैध उपयोग होते हैं। ऐसे मामलों में, चेतावनी से बचने के लिए, असाइनमेंट को कोष्ठकों की एक अतिरिक्त जोड़ी में स्पष्ट रूप से लपेटा जाना चाहिए।
इसी तरह, कुछ भाषाएँ, जैसे कि BASIC, केवल =
असाइनमेंट और समानता दोनों के लिए प्रतीक, क्योंकि वे वाक्यात्मक रूप से अलग हैं (पास्कल, एडा, पायथन, आदि के साथ, असाइनमेंट ऑपरेटर भावों में प्रकट नहीं हो सकते हैं)।
कुछ प्रोग्रामर को सामान्य क्रम के विपरीत स्थिरांक के विरुद्ध तुलना लिखने की आदत होती है:
<वाक्यविन्यास प्रकाश लैंग = सी>
if (2 == a) {/* = बनाम == का गलत उपयोग एक संकलन-समय त्रुटि होगी */ }
</वाक्यविन्यास हाइलाइट>
यदि =
गलती से उपयोग किया जाता है, परिणामी कोड अमान्य है क्योंकि 2 एक चर नहीं है। संकलक एक त्रुटि संदेश उत्पन्न करेगा, जिस पर उचित ऑपरेटर को प्रतिस्थापित किया जा सकता है। इस कोडिंग शैली को बाएं हाथ की तुलना, या योदा की स्थिति कहा जाता है।
यह तालिका विभिन्न भाषाओं में इन दो प्रकार की समानता के परीक्षण के लिए विभिन्न तंत्रों को सूचीबद्ध करती है:
भाषा | शारीरिक समानता | संरचनात्मक समानता | टिप्पणियाँ |
---|---|---|---|
a :=: b या a is b |
a = b |
कब a और b सूचक हैं
| |
सी (प्रोग्रामिंग भाषा), सी ++ | a == b |
*a == *b |
कब a और b सूचक हैं
|
सी# | object.ReferenceEquals(a, b) |
a.Equals(b) |
== e> ऑपरेटर डिफॉल्ट करता है ReferenceEquals , लेकिन प्रदर्शन करने के लिए ऑपरेटर ओवरलोडिंग हो सकता है Equals बजाय।
|
(eq a b) |
(equal a b) |
||
Erlang (प्रोग्रामिंग भाषा) | a =:= b
|
a == b
|
जब a और b संख्याएँ हैं |
जाओ (प्रोग्रामिंग भाषा) | a == b |
reflect.DeepEqual(*a, *b) |
जब ए और बी पॉइंटर्स हैं |
जावा (प्रोग्रामिंग भाषा) | a == b |
a.equals(b) |
|
ए
|