संबंधपरक प्रचालक
This article needs additional citations for verification. (March 2022) (Learn how and when to remove this template message) |
कंप्यूटर विज्ञान में, एक रिलेशनल ऑपरेटर एक प्रोग्रामिंग भाषा निर्माण या प्रचालक (प्रोग्रामिंग) है जो द्विआधारी फ़ंक्शन के बीच किसी प्रकार के संबंध (गणित) का परीक्षण या परिभाषित करता है।इनमें संख्यात्मक समानता (गणित) ( उदा। शामिल हैं 5 = 5) और असमानता (गणित) (जैसे, 4 ≥ 3)।
प्रोग्रामिंग भाषाओं में, जिसमें उनके प्रकार की प्रणाली में एक अलग बूलियन डेटा प्रकार शामिल हैं, जैसे पास्कल (प्रोग्रामिंग भाषा), एडीए (प्रोग्रामिंग भाषा), या जावा (प्रोग्रामिंग भाषा), ये ऑपरेटर आमतौर पर सही या गलत का मूल्यांकन करते हैं, इस पर निर्भर करता है कि क्या सशर्त संबंध इस बात पर निर्भर करता है कि क्या सशर्त संबंध है।दो ओपेरंड के बीच धारण करता है या नहीं।सी (प्रोग्रामिंग भाषा) जैसी भाषाओं में, रिलेशनल ऑपरेटर पूर्णांक 0 या 1 लौटाते हैं, जहां 0 झूठे और किसी भी गैर-शून्य मान के लिए खड़ा है।
एक अभिव्यक्ति (प्रोग्रामिंग) एक रिलेशनल ऑपरेटर रूपों का उपयोग करके बनाई गई है जिसे एक संबंधपरक अभिव्यक्ति या एक स्थिति कहा जाता है।रिलेशनल ऑपरेटरों को तार्किक विधेय (गणितीय तर्क) के विशेष मामलों के रूप में देखा जा सकता है।
समानता
उपयोग
समानता का उपयोग कई प्रोग्रामिंग भाषा निर्माणों और डेटा प्रकारों में किया जाता है।इसका उपयोग परीक्षण करने के लिए किया जाता है कि क्या कोई तत्व पहले से ही एक सेट (कंप्यूटर विज्ञान) में मौजूद है, या एक कुंजी के माध्यम से एक मूल्य तक पहुंचने के लिए है।इसका उपयोग स्विच विवरण में सही शाखा में नियंत्रण प्रवाह को भेजने के लिए किया जाता है, और लॉजिक प्रोग्रामिंग में एकीकरण प्रक्रिया के दौरान।
समानता का एक संभावित अर्थ यह है कि यदि ए के बराबर बी, तो या तो ए या बी को किसी भी अंतर को देखे बिना किसी भी संदर्भ में परस्पर उपयोग किया जा सकता है।लेकिन यह कथन जरूरी नहीं है, खासकर जब सामग्री समानता के साथ मिलकर म्यूटैबिलिटी को ध्यान में रखते हुए।
स्थान समानता बनाम सामग्री समानता
कभी-कभी, विशेष रूप पहचान-उन्मुख प्रोग्रामिंग) में, तुलना डेटा प्रकार और विरासत (कंप्यूटर विज्ञान), समानता (गणित), और पहचान (गणित) के प्रश्न उठाती है।इसके बीच अंतर करना अक्सर आवश्यक होता है:
- एक ही प्रकार की दो अलग -अलग वस्तुएं, जैसे, दो हाथ
- दो ऑब्जेक्ट समान हैं, लेकिन अलग हैं, जैसे, दो $ 10 बैंकनोट्स
- दो ऑब्जेक्ट समान हैं लेकिन अलग -अलग प्रतिनिधित्व करते हैं, जैसे, एक $ 1 बिल और एक $ 1 का सिक्का
- एक ही वस्तु के दो अलग -अलग संदर्भ, जैसे, एक ही व्यक्ति के लिए दो उपनाम
कई आधुनिक प्रोग्रामिंग भाषाओं में, ऑब्जेक्ट्स और डेटा संरचनाओं को संदर्भ (कंप्यूटर विज्ञान) के माध्यम से एक्सेस किया जाता है।ऐसी भाषाओं में, दो अलग -अलग प्रकार की समानता के लिए परीक्षण करने की आवश्यकता बन जाती है:
- स्थान समानता (पहचान): यदि दो संदर्भ (ए और बी) एक ही वस्तु का संदर्भ देते हैं।A के माध्यम से ऑब्जेक्ट के साथ बातचीत B के माध्यम से समान इंटरैक्शन से अप्रभेद्य हैं, और A के माध्यम से ऑब्जेक्ट में विशेष रूप से परिवर्तन B के माध्यम से परिलक्षित होते हैं।
- सामग्री समानता: यदि दो संदर्भों (ए और बी) द्वारा संदर्भित वस्तुएं कुछ अर्थों में समतुल्य हैं:
- संरचनात्मक समानता (यानी, उनकी सामग्री समान हैं)।जो या तो उथला हो सकता है (केवल तत्काल उप -परीक्षण का परीक्षण), या गहरा (उप -भागों की समानता के लिए परीक्षण)।इसे प्राप्त करने का एक सरल तरीका प्रतिनिधित्वात्मक समानता के माध्यम से है: यह जाँचना कि मूल्यों का एक ही प्रतिनिधित्व है।
- कुछ अन्य दर्जी समानता, बाहरी व्यवहार को संरक्षित करना।उदाहरण के लिए, 1/2 और 2/4 को एक तर्कसंगत संख्या के रूप में देखे जाने पर समान माना जाता है।एक संभावित आवश्यकता यह होगी कि A = B यदि और केवल यदि ऑब्जेक्ट A और B पर सभी संचालन में एक ही परिणाम होगा, तो रिफ्लेक्टिव रिलेशन, समरूपता और सकर्मक संबंध के अलावा।
पहले प्रकार की समानता का अर्थ आमतौर पर दूसरा होता है (एक संख्या (NAN) जैसी चीजों को छोड़कर जो खुद के लिए असमान हैं), लेकिन यह जरूरी नहीं है कि यह सच नहीं है।उदाहरण के लिए, दो स्ट्रिंग (कंप्यूटर विज्ञान) ऑब्जेक्ट अलग -अलग ऑब्जेक्ट (पहले अर्थ में असमान) हो सकते हैं, लेकिन इसमें वर्णों का समान अनुक्रम होता है (दूसरे अर्थ में समान)।इस मुद्दे के अधिक के लिए पहचान (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ) देखें।
कई सरल अंश (गणित) सहित वास्तविक संख्याओं को फ्लोटिंग-पॉइंट अंकगणित में बिल्कुल दर्शाया नहीं जा सकता है, और किसी दिए गए सहिष्णुता के भीतर समानता के लिए परीक्षण करना आवश्यक हो सकता है।इस तरह की सहिष्णुता, हालांकि, आसानी से वांछित गुणों जैसे कि ट्रांजिटिविटी को तोड़ सकती है, जबकि रिफ्लेक्सिटी टूट जाती है: IEEE 754 | IEEE फ्लोटिंग-पॉइंट स्टैंडर्ड के लिए आवश्यक है कि नान ≠ नान होल्ड्स।इसके विपरीत, (2022) पॉज़िट (नंबर प्रारूप) अंकगणित के लिए तकनीकी मानक (पॉज़िट समर्थकों का अर्थ है IEEE फ्लोट्स को बदलने के लिए) एक समान अवधारणा है, NAR (वास्तविक नहीं), जहां nar = nar पकड़ता है।[1] अन्य प्रोग्रामिंग तत्व जैसे कि कम्प्यूटेबल फ़ंक्शंस, या तो समानता की कोई भावना नहीं हो सकती है, या एक समानता जो असमान है।इन कारणों के लिए, कुछ भाषाएं एक आधार वर्ग, एक इंटरफ़ेस, एक विशेषता या एक प्रोटोकॉल के रूप में तुलनीय की एक स्पष्ट धारणा को परिभाषित करती हैं, जिसका उपयोग या तो स्पष्ट रूप से उपयोग किया जाता है, स्रोत कोड में घोषणा द्वारा, या निहित रूप से, संरचना के माध्यम से।शामिल टाइप करें।
विभिन्न पीएचपी ्रकारों के मूल्यों की तुलना
जावास्क्रिप्ट, PHP, VBScript और कुछ अन्य प्रकार के सिस्टम#डायनेमिक लैंग्वेज में, मानक समानता ऑपरेटर सही का मूल्यांकन करता है यदि दो मान समान हैं, भले ही उनके पास अलग -अलग प्रकार हों, उदाहरण के लिए, पाठ स्ट्रिंग 4 के बराबर संख्या 4 की तुलना करें, उदाहरण के लिए, उदाहरण के लिए।एक टाइप की गई समानता ऑपरेटर अक्सर ऐसी भाषाओं में भी उपलब्ध होता है, केवल समान या समकक्ष प्रकारों के साथ मूल्यों के लिए सही लौटना (PHP में, 4 === "4"
हालांकि गलत है 4 == "4"
क्या सच है)।[2][3] उन भाषाओं के लिए जहां संख्या 0 को गलत के रूप में व्याख्या की जा सकती है, यह ऑपरेटर शून्य के लिए चेकिंग जैसी चीजों को सरल बना सकता है (जैसा कि) x == 0
X के लिए या तो 0 या 0 होने के लिए सच होगा जो कि Agnostic समानता ऑपरेटर का उपयोग कर रहा है)।
आदेश
गैर-न्युमेरिक डेटा की तुलना से अधिक और कम से कम एक प्रकार के सम्मेलन के अनुसार किया जाता है (जैसे, पाठ तार, लेक्सिकोग्राफिकल ऑर्डर के लिए) जो प्रोग्रामिंग भाषा में बनाया जा सकता है और/या एक प्रोग्रामर द्वारा कॉन्फ़िगर करने योग्य हो सकता है।
जब यह दो डेटा आइटमों के बीच तुलना के परिणाम के साथ एक संख्यात्मक मान को जोड़ने के लिए वांछित होता है, तो कहते हैं कि ए और बी, सामान्य सम्मेलन को असाइन करना और माइनस करना है; 1 यदि ए <बी, 0 यदि ए = बी और 1 अगर ए> बी अगर ए> बी।।उदाहरण के लिए, सी फ़ंक्शन strcmp
इस सम्मेलन के अनुसार तीन-तरफ़ा तुलना और रिटर्न & माइनस; 1, 0, या 1 करता है, और QSort को इस सम्मेलन के अनुसार मूल्यों को वापस करने के लिए तुलना समारोह की उम्मीद है।एल्गोरिदम को छांटने में, तुलना कोड की दक्षता महत्वपूर्ण है क्योंकि यह छंटाई प्रदर्शन में योगदान देने वाले प्रमुख कारकों में से एक है।
प्रोग्रामर-डिफाइंड डेटा प्रकारों की तुलना (डेटा प्रकार जिसके लिए प्रोग्रामिंग भाषा में कोई इन-बिल्ट समझ नहीं है) कस्टम-लिखित या लाइब्रेरी फ़ंक्शंस (जैसे) द्वारा किया जा सकता है strcmp
ऊपर उल्लेख किया गया है), या, कुछ भाषाओं में, ऑपरेटर द्वारा एक तुलना ऑपरेटर को ओवरलोड करके-अर्थात्, एक प्रोग्रामर-परिभाषित अर्थ को असाइन करना जो डेटा प्रकारों की तुलना में निर्भर करता है।एक अन्य विकल्प कुछ सम्मेलन का उपयोग कर रहा है जैसे कि सदस्य-वार तुलना।
तार्किक समतुल्यता
हालांकि शायद सबसे पहले, बूलियन तर्क तार्किक प्रचालक ्स XOR, और, या, और नहीं, रिलेशनल ऑपरेटरों को तार्किक समतुल्यता के लिए डिज़ाइन किया जा सकता है, जैसे कि वे सभी को एक दूसरे के संदर्भ में परिभाषित किया जा सकता है।निम्नलिखित चार सशर्त कथनों में किसी भी दिए गए एक्स और वाई मानों के लिए एक ही तार्किक समतुल्यता ई (या तो सभी सत्य या सभी झूठे) हैं:
यह डोमेन पर अच्छी तरह से आदेश दिया जा रहा है।
मानक संबंधपरक ऑपरेटर
प्रोग्रामिंग भाषाओं में उपयोग किए जाने वाले सबसे आम संख्यात्मक संबंधपरक ऑपरेटर नीचे दिखाए गए हैं।मानक SQL, एक ही ऑपरेटरों को बुनियादी के रूप में उपयोग करता है, जबकि कई डेटाबेस अनुमति देते हैं !=
निम्न के अलावा <>
मानक से।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.
अन्य सम्मेलन कम आम हैं: आम LISP और MacSyma/Maxima (सॉफ्टवेयर) असमानता को छोड़कर बुनियादी जैसे ऑपरेटरों का उपयोग करते हैं, जो है /=
आम लिस्प में और #
MacSyma/Maxima में।पुराने LISP (प्रोग्रामिंग भाषा) का उपयोग किया equal
, greaterp
, और lessp
;और उनका उपयोग करके उन्हें नकार दिया not
शेष ऑपरेटरों के लिए।
सिंटैक्स
संबंधपरक ऑपरेटरों का उपयोग शब्दों के बजाय तकनीकी साहित्य में भी किया जाता है।रिलेशनल ऑपरेटरों को आमतौर पर Infix नोटेशन में लिखा जाता है, यदि प्रोग्रामिंग भाषा द्वारा समर्थित है, जिसका अर्थ है कि वे अपने ऑपरेंड्स (दो अभिव्यक्तियों से संबंधित) के बीच दिखाई देते हैं।उदाहरण के लिए, पायथन में एक अभिव्यक्ति संदेश को प्रिंट करेगी यदि x y से कम है:
if x < y:
print("x is less than y in this example")
अन्य प्रोग्रामिंग भाषाएं, जैसे LISP (प्रोग्रामिंग भाषा), उपसर्ग संकेतन का उपयोग करें, निम्नानुसार हैं:
(>= 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 नंबर 1 द्वारा दर्शाया जाएगा)।
अभिव्यक्ति देना संभव है x < y < z
इसका परिचित गणितीय अर्थ, और कुछ प्रोग्रामिंग भाषाएं जैसे कि पायथन और राकू (प्रोग्रामिंग भाषा) ऐसा करते हैं।अन्य, जैसे कि C# और Java, आंशिक रूप से नहीं करते हैं, क्योंकि यह सी-जैसी भाषाओं में काम करने वाले अधिकांश अन्य Infix ऑपरेटरों के तरीके से भिन्न होगा।डी प्रोग्रामिंग भाषा ऐसा नहीं करती है कि चूंकि यह सी के साथ कुछ संगतता को बनाए रखता है, और सी एक्सप्रेशंस की अनुमति देता है, लेकिन सूक्ष्म रूप से अलग -अलग शब्दार्थ के साथ (यद्यपि यकीनन सही दिशा में) सुविधा से अधिक भ्रम जोड़ देगा।[5]
कुछ भाषाएं, जैसे कॉमन LISP, इसके लिए कई तर्क का उपयोग करती हैं।लिस्प में (<= 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), शुरुआत , सेट लैंग्वेज (SETL), पास्कल (प्रोग्रामिंग लैंग्वेज), स्मॉलटॉक, मोडुला -2, ADA (प्रोग्रामिंग लैंग्वेज), मानक एमएल , OCAML, एफिल (प्रोग्रामिंग लैंग्वेज), वस्तु पास्कल (डेल्फी (प्रोग्रामिंग भाषा) ), ओबेरोन , डायलन (प्रोग्रामिंग भाषा) , VHSIC हार्डवेयर विवरण भाषा (VHDL), और कई अन्य भाषाएँ।
B और C
अधिकांश प्रोग्रामिंग भाषाओं के बीच इस समान वास्तविक मानक को अंततः बदल दिया गया था, अप्रत्यक्ष रूप से, बी (प्रोग्रामिंग भाषा) नामक एक न्यूनतम संकलित भाषा द्वारा।इसका एकमात्र इच्छित एप्लिकेशन पहले बंदरगाह (तत्कालीन बहुत आदिम) यूनिक्स के लिए एक वाहन के रूप में था, लेकिन यह बहुत प्रभावशाली सी (प्रोग्रामिंग भाषा) भाषा में भी विकसित हुआ।
B ने सिस्टम प्रोग्रामिंग लैंग्वेज BCPL के एक सिंटैक्टिक रूप से बदले हुए संस्करण के रूप में शुरू किया, CPL (प्रोग्रामिंग भाषा) का एक सरलीकृत (और टाइपलेस) संस्करण।एक स्ट्रिप-डाउन प्रक्रिया के रूप में वर्णित किया गया है, and
और or
BCPL के संचालक[6] के साथ बदल दिया गया था &
और |
(जो बाद में बन जाएगा &&
और ||
, क्रमश।[7])।एक ही प्रक्रिया में, अल्गोल शैली :=
BCPL द्वारा प्रतिस्थापित किया गया था =
बी में यह सब अज्ञात होने का कारण है।[8] वैरिएबल अपडेट के रूप में बी में कोई विशेष सिंटैक्स नहीं था (जैसे let
या समान) और अभिव्यक्तियों में अनुमति दी गई थी, समान संकेत के इस गैर मानक अर्थ का मतलब था कि अब समान संकेत के पारंपरिक शब्दार्थ को दूसरे प्रतीक के साथ जोड़ा जाना था।केन थॉम्पसन ने तदर्थ का इस्तेमाल किया ==
इसके लिए संयोजन।
बाद में एक छोटे प्रकार की प्रणाली को पेश किया गया था, बी तब सी। बन गया। यूनिक्स के साथ इसके जुड़ाव के साथ इस भाषा की लोकप्रियता, जावा, सी#, और कई अन्य भाषाओं के बाद सूट के बाद, वाक्यात्मक रूप से, इस अनावश्यक संघर्ष के बावजूद गणितीय अर्थ के साथ इस अनावश्यक संघर्ष के बावजूद,समान संकेत।
भाषाएँ
C में असाइनमेंट का एक मूल्य (प्रोग्रामिंग) होता है और चूंकि किसी भी गैर-शून्य स्केलर मान को सशर्त (प्रोग्रामिंग) में सही के रूप में व्याख्या किया जाता है,[9] कोड if (x = y)
कानूनी है, लेकिन इसका बहुत अलग अर्थ है if (x == y)
।पूर्व कोड टुकड़ा का अर्थ है y को x असाइन करें, और यदि X का नया मान शून्य नहीं है, तो निम्नलिखित कथन को निष्पादित करें।बाद के टुकड़े का मतलब है कि यदि और केवल यदि x y के बराबर है, तो निम्न कथन को निष्पादित करें।[10]
int x = 1;
int y = 2;
if (x = y) {
/* This code will always execute if y is anything but 0*/
printf("x is %d and y is %d\n", x, y);
}
हालांकि जावा (प्रोग्रामिंग लैंग्वेज) और सी शार्प (प्रोग्रामिंग लैंग्वेज) | C# में C के समान ऑपरेटर हैं, यह गलती आमतौर पर इन भाषाओं में एक संकलन त्रुटि का कारण बनती है, क्योंकि IF- स्थिति प्रकार की होनी चाहिए boolean
, और अन्य प्रकारों (जैसे, संख्या) से परिवर्तित करने का कोई निहित तरीका नहीं है boolean
एस।इसलिए जब तक कि वैरिएबल को टाइप नहीं किया जाता है boolean
(या आवरण प्रकार Boolean
), एक संकलन त्रुटि होगी।
पास्कल, डेल्फी, और एडीए जैसी एल्गोल जैसी भाषाओं में (इस अर्थ में कि वे नेस्टेड फ़ंक्शन परिभाषाओं की अनुमति देते हैं), और पायथन (प्रोग्रामिंग भाषा), और कई कार्यात्मक भाषाओं में, अन्य लोगों के बीच, असाइनमेंट ऑपरेटर एक अभिव्यक्ति (प्रोग्रामिंग (प्रोग्रामिंग) में दिखाई नहीं दे सकते हैं।) (शामिल if
क्लॉस), इस प्रकार त्रुटि के इस वर्ग को रोकना।कुछ कंपाइलर, जैसे कि GNU संकलक संग्रह (GCC), IF स्टेटमेंट के अंदर एक असाइनमेंट ऑपरेटर वाले कोड को संकलित करते समय एक चेतावनी प्रदान करते हैं, हालांकि IF- स्थिति के अंदर असाइनमेंट के कुछ वैध उपयोग होते हैं।ऐसे मामलों में, चेतावनी से बचने के लिए असाइनमेंट को स्पष्ट रूप से कोष्ठक की एक अतिरिक्त जोड़ी में लपेटा जाना चाहिए।
इसी तरह, कुछ भाषाएं, जैसे कि बुनियादी उपयोग सिर्फ =
असाइनमेंट और समानता दोनों के लिए प्रतीक, क्योंकि वे वाक्यात्मक रूप से अलग हैं (जैसा कि पास्कल, एडीए, पायथन, आदि के साथ, असाइनमेंट ऑपरेटर अभिव्यक्तियों में दिखाई नहीं दे सकते हैं)।
कुछ प्रोग्रामर सामान्य आदेश के उल्टे में एक निरंतरता के खिलाफ तुलना लिखने की आदत में मिलते हैं:
if (2 == a) { /* Mistaken use of = versus == would be a compile-time error */
}
अगर =
गलती से उपयोग किया जाता है, परिणामी कोड अमान्य है क्योंकि 2 एक चर नहीं है।कंपाइलर एक त्रुटि संदेश उत्पन्न करेगा, जिस पर उचित ऑपरेटर को प्रतिस्थापित किया जा सकता है।इस कोडिंग शैली को बाएं हाथ की तुलना, या योदा की स्थिति कहा जाता है।
यह तालिका विभिन्न भाषाओं में इन दो प्रकार की समानता के लिए परीक्षण करने के लिए विभिन्न तंत्रों को सूचीबद्ध करती है:
--- तूभाषा !!शारीरिक समानता !!संरचनात्मक समानता !!टिप्पणियाँ ---a :=: b या a is b |
a = b |
कब a और b पॉइंटर्स हैं
--- |
सी (प्रोग्रामिंग भाषा), सी ++ | a == b |
*a == *b |
कब a और b पॉइंटर्स हैं
--- |
C# | object.ReferenceEquals(a, b) |
a.Equals(b) |
== ई> ऑपरेटर को चूक करने के लिए ReferenceEquals , लेकिन प्रदर्शन करने के लिए ऑपरेटर ओवरलोडिंग हो सकता है Equals बजाय।
--- |
(eq a b) |
(equal a b) |
--- |
एर्लंग (प्रोग्रामिंग भाषा) | a =:= b
|
a == b
|
जब ए और बी नंबर हैं
--- |
गो (प्रोग्रामिंग भाषा) | a == b |
reflect.DeepEqual(*a, *b) |
जब ए और बी पॉइंटर्स होते हैं
--- |
जावा (प्रोग्रामिंग भाषा) | a == b |
a.equals(b) |
--- |
ए
|