عامل علائقي

في علوم الحاسوب ، يُعدّ عامل المقارنة بنيةً أو عاملاً في لغة البرمجة يُعرّف نحويًا علاقةً بين كيانين. وتشمل هذه العلاقات المساواة العددية (مثل: 5 = 5 ) والمتباينات (مثل: 4 ≥ 3 ).

في لغات البرمجة التي تتضمن نوع بيانات منطقي مميز في نظام أنواعها ، مثل باسكال ، وآدا ، وبايثون ، وجافا ، عادة ما يتم تقييم هذه العوامل إلى صحيح أو خطأ، اعتمادًا على ما إذا كانت العلاقة الشرطية بين المعاملين صحيحة أم لا.

في لغات مثل C ، تُرجع عوامل المقارنة الأعداد الصحيحة 0 أو 1، حيث يمثل 0 خطأ وأي قيمة غير صفرية تمثل صحيح.

يُشكل التعبير المُنشأ باستخدام عامل علائقي ما يُسمى بالتعبير العلائقي أو الشرط . ويمكن اعتبار عوامل العلائق حالات خاصة من المسندات المنطقية .

المساواة

الاستخدام

تُستخدم المساواة في العديد من بنيات لغات البرمجة وأنواع البيانات. تُستخدم لاختبار ما إذا كان عنصر ما موجودًا بالفعل في مجموعة ، أو للوصول إلى قيمة عبر مفتاح. كما تُستخدم في عبارات التبديل لتوجيه مسار التحكم إلى الفرع الصحيح، وأثناء عملية التوحيد في البرمجة المنطقية.

قد توجد تعريفات متعددة صحيحة للمساواة، وقد تتبنى أي لغة برمجة تعريفًا واحدًا أو أكثر منها، تبعًا لجوانب التصميم المختلفة. أحد المعاني المحتملة للمساواة هو أنه "إذا كان أ يساوي ب ، فيمكن استخدام أ أو ب بشكل متبادل في أي سياق دون ملاحظة أي فرق". لكن هذه العبارة ليست بالضرورة صحيحة، خاصةً عند الأخذ في الاعتبار قابلية التغيير إلى جانب مساواة المحتوى.

المساواة في الموقع مقابل المساواة في المحتوى

أحيانًا، وخاصة في البرمجة كائنية التوجه ، تثير المقارنة تساؤلات حول أنواع البيانات والوراثة والمساواة والهوية . وغالبًا ما يكون من الضروري التمييز بين :

  • جسمان مختلفان من نفس النوع، على سبيل المثال، يدان
  • شيئان متساويان ولكنهما مختلفان، على سبيل المثال، ورقتان نقديتان من فئة 10 دولارات
  • شيئان متساويان لكن لهما تمثيل مختلف، على سبيل المثال، ورقة نقدية من فئة دولار واحد وعملة معدنية من فئة دولار واحد
  • إشارتان مختلفتان لنفس الشيء، على سبيل المثال، لقبان لنفس الشخص

في العديد من لغات البرمجة الحديثة، يتم الوصول إلى الكائنات وهياكل البيانات من خلال المراجع . في هذه اللغات، تبرز الحاجة إلى اختبار نوعين مختلفين من المساواة:

  • تساوي الموقع (الهوية): إذا كان مرجعان (أ و ب) يشيران إلى نفس الكائن، فإن التفاعلات مع الكائن من خلال (أ) لا يمكن تمييزها عن التفاعلات نفسها من خلال (ب)، وعلى وجه الخصوص، فإن التغييرات التي تطرأ على الكائن من خلال (أ) تنعكس من خلال (ب).
  • المساواة في المحتوى: إذا كانت الكائنات المشار إليها بواسطة مرجعين (أ و ب) متكافئة بمعنى ما:
  • التساوي البنيوي (أي أن محتوياتها متطابقة). وقد يكون هذا التساوي سطحيًا (باختبار الأجزاء الفرعية المباشرة فقط)، أو عميقًا (باختبار تساوي الأجزاء الفرعية بشكل متكرر). إحدى الطرق البسيطة لتحقيق ذلك هي من خلال التساوي التمثيلي: التحقق من أن القيم لها نفس التمثيل.
  • بعض المساويات المصممة خصيصًا، والتي تحافظ على السلوك الخارجي. على سبيل المثال، يُعتبر 1/2 و2/4 متساويين عند النظر إليهما كعدد نسبي. ومن الشروط الممكنة أن يكون "أ = ب إذا وفقط إذا كانت جميع العمليات على الكائنين أ و ب ستؤدي إلى النتيجة نفسها"، بالإضافة إلى الانعكاسية والتناظر والتعدي .

يستلزم النوع الأول من المساواة عادةً النوع الثاني (باستثناء حالات مثل " ليس رقمًا " ( NaN ) التي لا تساوي نفسها)، ولكن العكس ليس صحيحًا بالضرورة. على سبيل المثال، قد يكون كائنان نصيان مختلفين (غير متساويين بالمعنى الأول) ولكنهما يحتويان على نفس تسلسل الأحرف (متساويين بالمعنى الثاني). راجع مفهوم الهوية لمزيد من التفاصيل حول هذه المسألة.

لا يمكن تمثيل الأعداد الحقيقية، بما فيها العديد من الكسور البسيطة، بدقة تامة في حسابات الفاصلة العائمة ، وقد يكون من الضروري اختبار التساوي ضمن هامش خطأ محدد. إلا أن هذا الهامش قد يُخلّ بسهولة بخصائص مرغوبة كالتعدي، كما يُخلّ بخاصية الانعكاس أيضًا: إذ يشترط معيار IEEE للفاصلة العائمة أن يكون NaN ≠ NaN . في المقابل، يتضمن المعيار الخاص (2022) لحسابات الأعداد الموجبة (يهدف مؤيدو الأعداد الموجبة إلى استبدال معيار IEEE للفاصلة العائمة) مفهومًا مشابهًا، وهو NaR (ليس عددًا حقيقيًا)، حيث يكون NaR = NaR . [ 1 ]

قد لا تحمل عناصر برمجية أخرى، مثل الدوال القابلة للحساب، أي معنى للمساواة، أو قد تحمل مساواة غير قابلة للحساب. ولهذه الأسباب، تُعرّف بعض اللغات مفهومًا صريحًا لـ "المقارنة"، في صورة فئة أساسية، أو واجهة، أو سمة، أو بروتوكول، يُستخدم إما صراحةً، من خلال التصريح في شفرة المصدر، أو ضمنيًا، عبر بنية النوع المعني.

مقارنة قيم الأنواع المختلفة

في لغات البرمجة JavaScript و PHP و VBScript وبعض اللغات الأخرى ذات الكتابة الديناميكية ، يتبع عامل المساواة القياسي ما يُعرف بالكتابة المرنة ، أي أنه يُقيّم إلى صحيح حتى لو لم تكن قيمتان متساويتين وكانتا من أنواع غير متوافقة، ولكن يمكن تحويلهما إلى بعضهما البعض بواسطة مجموعة من القواعد الخاصة باللغة، مما يجعل الرقم 4 مساويًا للسلسلة النصية "4"، على سبيل المثال. على الرغم من أن هذا السلوك يهدف عادةً إلى تسهيل اللغة، إلا أنه قد يؤدي إلى عواقب مفاجئة ويصعب التنبؤ بها، والتي يجهلها العديد من المبرمجين. على سبيل المثال، يمكن أن تتسبب قواعد المساواة المرنة في JavaScript في أن تكون المساواة غير متعدية (أي، a == bو b == c، ولكن )، أو أن تجعل قيمًا معينة مساوية لنفيها. [ 2 ]a != c

غالبًا ما يتوفر في هذه اللغات عامل مساواة صارم، يُرجع القيمة "صحيح" فقط للقيم ذات الأنواع المتطابقة أو المتكافئة (في PHP، 4 === "4"تكون القيمة "خطأ" بينما 4 == "4"تكون القيمة "صحيح"). [ 3 ] [ 4 ] بالنسبة للغات التي قد يُفسر فيها الرقم 0 على أنه "خطأ " ، قد يُبسط هذا العامل عمليات مثل التحقق من الصفر (كما x == 0هو الحال عندما تكون قيمة x إما 0 أو "0" باستخدام عامل المساواة غير المُحدد للنوع).

الطلب

يتم إجراء مقارنة أكبر من وأصغر من للبيانات غير الرقمية وفقًا لاتفاقية فرز (مثل الترتيب المعجمي لسلاسل النصوص ) والتي يمكن تضمينها في لغة البرمجة و/أو يمكن للمبرمج تكوينها.

عند الرغبة في ربط قيمة عددية بنتيجة مقارنة بين عنصرين من البيانات، ولنقل a و b ، فإن الاصطلاح المعتاد هو إسناد القيمة -1strcmp إذا كان a < b، والقيمة 0 إذا كان a = b، والقيمة 1 إذا كان a > b. على سبيل المثال، تُجري دالة C مقارنة ثلاثية وتُرجع القيمة -1 أو 0 أو 1 وفقًا لهذا الاصطلاح، ويتوقع برنامج qsort أن تُرجع دالة المقارنة قيمًا وفقًا لهذا الاصطلاح. في خوارزميات الفرز ، تُعد كفاءة كود المقارنة أمرًا بالغ الأهمية، إذ إنها أحد العوامل الرئيسية التي تُسهم في أداء الفرز.

يمكن إجراء مقارنة أنواع البيانات المُعرَّفة من قِبل المبرمج (أنواع البيانات التي لا تدعمها لغة البرمجة بشكل مُدمج) باستخدام دوال مُخصصة أو دوال مكتبية (كما strcmpذُكر أعلاه)، أو في بعض اللغات، عن طريق إعادة تعريف عامل المقارنة - أي إسناد معنى مُحدد من قِبل المبرمج يعتمد على أنواع البيانات المُقارنة. وثمة بديل آخر يتمثل في استخدام اصطلاح مُعين، مثل المقارنة بين عناصر المصفوفة.

التكافؤ المنطقي

على الرغم من أن الأمر قد لا يبدو واضحًا للوهلة الأولى، إلا أنه يمكن تصميم عوامل المقارنة، مثل عوامل المنطق البولياني XOR وAND وOR وNOT، بحيث يكون لها تكافؤ منطقي ، ما يسمح بتعريفها جميعًا بدلالة بعضها البعض. العبارات الشرطية الأربع التالية لها نفس التكافؤ المنطقي E (إما جميعها صحيحة أو جميعها خاطئة) لأي قيم معطاة لـ x و y :

هـ={x<yy>xxyyx{\displaystyle E={\begin{cases}x<y\\y>x\\x\ngeq y\\y\nleq x\end{cases}}}

يعتمد هذا على أن يكون المجال منظمًا بشكل جيد .

عوامل العلاقات القياسية

تُعرض أدناه أكثر عوامل المقارنة العددية شيوعًا في لغات البرمجة. يستخدم معيار SQL نفس عوامل BASIC، بينما تسمح العديد من قواعد البيانات !=باستخدام عوامل إضافية. يتبع SQL الجبر البولياني الصارم ، أي أنه لا يستخدم التقييم المختصر ، وهو أمر شائع في معظم اللغات المذكورة أدناه. على سبيل المثال، يدعم PHP هذا الأسلوب، ولكنه يستخدم هذين العاملين أيضًا كاسمين بديلين، كما هو الحال في العديد من قواعد بيانات SQL.<>

عوامل العلاقات الشائعة
مؤتمريساويلا يساويأكبر منأقل منأكبر من أو يساويأقل من أو يساوي
مطبوع=><
فورتران [ ملاحظة 1 ].EQ..NE..GT..LT..GE..LE.
ALGOL 68 [ ملاحظة 2 ]=><
/=>=<=
eqnegtltgele
APL=><
BASIC ، ML ، Pascal [ ملاحظة 3 ]=<>[ ملاحظة 4 ]><>=<=
يشبه C [ ملاحظة 5 ]==!=><>=<=
النكاف='=><'<'>
لغة لوا==~=><>=<=
إرلانغ==/=><>==<
=:==/=
أصداف تشبه أصداف بورن [ ملاحظة 6 ]-eq-ne-gt-lt-ge-le
ملف دفعيEQUNEQGTRLSSGEQLEQ
ooRexx ، REXX=¬=><>=<=
\=
<>
MATLAB [ ملاحظة 7 ]==~=><>=<=
eq(x,y)ne(x,y)gt(x,y)lt(x,y)ge(x,y)le(x,y)
فورتران 90 ، [ ملاحظة 8 ] هاسكل==/=><>=<=
Mathematica [ 5 ]==!=><>=<=
Equal[x,y]Unequal[x,y]Greater[x,y]Less[x,y]GreaterEqual[x,y]LessEqual[x,y]
  1. بما في ذلك FORTRAN II و III و IV و 66 و 77.
  2. ALGOL 68 : يتم استخدام أنظمة الإيقاف في التعليمات البرمجية على المنصات ذات مجموعات الأحرف المحدودة ( على سبيل المثال ، استخدم>=أوGEبدلاً من)، أو المنصات التي لا تحتوي علىbold تمييز (استخدم'ge')، أو المنصات التي تحتوي على أحرف كبيرة فقط (استخدم.GE أو'GE' ).
  3. بما في ذلك ALGOL و Simula و Modula-2 و Eiffel و SQL وصيغ جداول البيانات وغيرها.
  4. يتعرف Modula-2 أيضًا#
  5. بما في ذلك C وC ++ و C# و Go و Java و JavaScript و Perl (للمقارنة العددية فقط) و PHP و Python و Ruby و R.
  6. بما في ذلك Bourne shell و Bash و KornShell و Windows PowerShell< . تُستخدمالرموز>عادةً في shell لإعادة التوجيه ، لذا يجب استخدام رموز أخرى. بدون الواصلة، يُستخدم في Perl لمقارنة السلاسل النصية.
  7. على الرغم من أن MATLAB تستخدم بنية مشابهة للغة C في جوانب أخرى، إلا أنها لا تستخدم!=، كما!في MATLAB، حيث ترسل النص التالي كأمر سطر إلى نظام التشغيل . يُستخدم الشكل الأول أيضًا في Smalltalk ، باستثناء المساواة، التي تُكتب=.
  8. بما في ذلك FORTRAN 95 و2003 و2008 و2015.

توجد اصطلاحات أخرى أقل شيوعًا: تستخدم لغتا Common Lisp و Macsyma / Maxima عوامل مشابهة لعوامل لغة Basic للقيم العددية، باستثناء عامل عدم المساواة، الموجود /=في Common Lisp و #Macsyma/Maxima. تحتوي Common Lisp على مجموعات متعددة أخرى من عوامل المساواة والعلاقات التي تخدم أغراضًا مختلفة، بما في ذلك eqو eqlو equalو equalpو و و string=. [ 6 ] استخدمت لغات Lisp القديمة equalو greaterpو و lessp؛ ونفتها باستخدام notللعوامل المتبقية.

بناء الجملة

تُستخدم عوامل المقارنة أيضًا في الأدبيات التقنية بدلًا من الكلمات. تُكتب عوامل المقارنة عادةً بصيغة الوسط ، إذا كانت لغة البرمجة تدعمها، مما يعني أنها تظهر بين مُعاملاتها (التعبيرين المرتبطين). على سبيل المثال، سيطبع تعبير في بايثون الرسالة التالية إذا كانت قيمة x أقل من قيمة y :

إذا كان x < y : اطبع ( "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معناه الرياضي المألوف، وبعض لغات البرمجة مثل بايثون وراكو تفعل ذلك. بينما لا تفعل لغات أخرى، مثل سي شارب وجافا، ذلك جزئيًا لأنه سيختلف عن طريقة عمل معظم عوامل التشغيل الوسطية الأخرى في اللغات الشبيهة بلغة سي. أما لغة البرمجة دي فلا تفعل ذلك لأنها تحافظ على قدر من التوافق مع لغة سي، و"السماح بتعبيرات سي ولكن بدلالات مختلفة بشكل طفيف (وإن كانت في الاتجاه الصحيح على الأرجح) سيضيف مزيدًا من الارتباك بدلًا من الفائدة". [ 7 ]

تستخدم بعض اللغات، مثل Common Lisp ، مُسندات متعددة الوسائط لهذا الغرض. في لغة Lisp، (<= 1 x 10)تكون العبارة صحيحة عندما تكون قيمة x بين 1 و10.

الخلط بين عوامل التخصيص

كانت لغة فورتران المبكرة (1956-1957) مقيدة بمجموعات أحرف محدودة للغاية، حيث =كان هو عامل المقارنة الوحيد المتاح. لم يكن هناك <أو >(وبالتأكيد لم يكن هناك أو ). أجبر هذا المصممين على تعريف رموز مثل .GT.و .LT.و وما إلى ذلك .GE.، .EQ.مما جعل استخدام =الحرف المتبقي للنسخ مغريًا، على الرغم من التناقض الواضح مع الاستخدام الرياضي ( X=X+1إذ ينبغي أن يكون مستحيلاً).

وهكذا تم تقديم لغة الجبر الدولية (IAL، ALGOL 58 ) ولغة ALGOL (1958 و1960) :=للتخصيص، مما ترك المعيار =متاحًا للمساواة، وهو اصطلاح تتبعه لغات CPL و ALGOL W و ALGOL 68 ولغات البرمجة الأساسية المدمجة ( BCPL ) و Simula وSET Language ( SETL ) و Pascal و Smalltalk و Modula-2 و Ada و Standard ML و OCaml و Eiffel و Object Pascal ( Delphi ) و Oberon و Dylan وVHSIC Hardware Description Language ( VHDL ) والعديد من اللغات الأخرى.

ب و ج

تم تغيير هذا المعيار الموحد بحكم الواقع بين معظم لغات البرمجة في نهاية المطاف، بشكل غير مباشر، بواسطة لغة مُجمَّعة بسيطة تُدعى B. وكان استخدامها المقصود الوحيد هو كوسيلة لنقل أول نسخة من نظام يونكس (الذي كان بدائيًا للغاية آنذاك)، لكنها تطورت أيضًا إلى لغة C المؤثرة للغاية .

بدأت لغة B كنسخة معدلة نحويًا من لغة برمجة الأنظمة BCPL ، وهي نسخة مبسطة (وبدون أنواع) من CPL . في عملية وُصفت بأنها "تبسيط"، استُبدلت المعاملات and`and` orفي BCPL [ 8 ]& بالمعاملين `and` |(واللذان أصبحا لاحقًا ` &&and` و`and` ||على التوالي [ 9 ] ). وفي العملية نفسها، :=استُبدل نمط ALGOL في BCPL بنمط `and` =في B. والسبب وراء كل هذا غير معروف [ 10 ] . ولأن تحديثات المتغيرات لم تكن لها صيغة خاصة في B (مثل ` letand` أو ما شابه) وكانت مسموحة في التعبيرات، فإن هذا المعنى غير القياسي لعلامة المساواة يعني أنه يجب الآن ربط الدلالات التقليدية لعلامة المساواة برمز آخر. وقد استخدم كين تومسون هذا التركيب المخصص ==لهذا الغرض.

مع إدخال نظام أنواع صغير لاحقًا، أصبحت B هي C. وقد أدت شعبية هذه اللغة إلى جانب ارتباطها بنظام Unix إلى أن تحذو Java وC# والعديد من اللغات الأخرى حذوها من الناحية النحوية، على الرغم من هذا التعارض غير الضروري مع المعنى الرياضي لعلامة المساواة.

اللغات

في لغة C، تُعطى قيمة للمعاملات ، وبما أن أي قيمة عددية غير صفرية تُفسَّر على أنها صحيحة في التعبيرات الشرطية ، [ 11 ] فإن الكود if (x = y)صحيح، لكن معناه يختلف تمامًا عن if (x == y)الكود السابق. فالجزء الأول من الكود يعني "أسند قيمة y إلى x ، وإذا كانت قيمة x الجديدة لا تساوي صفرًا، فنفِّذ العبارة التالية". أما الجزء الثاني فيعني " إذا وفقط إذا كانت x تساوي y ، فنفِّذ العبارة التالية". [ 12 ]

int x = 1 ; int y = 2 ; if ( x = y ) { // سيتم تنفيذ هذا الكود دائمًا إذا كانت قيمة y أي شيء عدا 0 printf ( "x هي %d و y هي %d \n " , x , y ); }

على الرغم من أن لغتي Java و C# تستخدمان نفس المعاملات الموجودة في لغة C، إلا أن هذا الخطأ عادةً ما يتسبب في حدوث خطأ في الترجمة في هاتين اللغتين، لأن شرط if يجب أن يكون من نوع معين boolean، ولا توجد طريقة ضمنية للتحويل من أنواع أخرى ( مثل الأرقام) إلى booleanنوع معين. لذلك، ما لم يكن المتغير الذي يتم تعيينه من نوع معين boolean(أو نوع غلاف Boolean)، فسيحدث خطأ في الترجمة.

في لغات شبيهة بلغة ALGOL مثل باسكال ودلفي وآدا (بمعنى أنها تسمح بتعريف الدوال المتداخلة )، وفي بايثون ، والعديد من اللغات الوظيفية الأخرى، لا يُسمح باستخدام عوامل الإسناد في التعبيرات (بما في ذلك ifالعبارات الشرطية)، مما يمنع هذا النوع من الأخطاء. تُصدر بعض المترجمات، مثل مجموعة مترجمات GNU (GCC)، تحذيرًا عند ترجمة التعليمات البرمجية التي تحتوي على عامل إسناد داخل عبارة شرطية، على الرغم من وجود بعض الاستخدامات المشروعة للإسناد داخل شرط شرطي. في مثل هذه الحالات، يجب وضع الإسناد بين قوسين إضافيين بشكل صريح لتجنب التحذير.

وبالمثل، تستخدم بعض اللغات، مثل BASIC،= الرمز فقط لكل من التعيين والمساواة ، لأنها منفصلة نحويًا (كما هو الحال مع Pascal و Ada و Python وما إلى ذلك، لا يمكن أن تظهر عوامل التعيين في التعبيرات).

اعتاد بعض المبرمجين على كتابة المقارنات مع ثابت بترتيب عكسي للترتيب المعتاد:

// استخدام = بدلاً من == بشكل خاطئ سيؤدي إلى خطأ في وقت الترجمة إذا ( 2 == a ) { // ... }

إذا =استُخدمت هذه القيمة عن طريق الخطأ، فسيكون الكود الناتج غير صالح لأن 2 ليس متغيرًا. سيُصدر المُصرّف رسالة خطأ، يُمكن استبدالها بالمعامل الصحيح. يُطلق على أسلوب البرمجة هذا اسم المقارنة من اليسار، أو شروط يودا .

يسرد هذا الجدول الآليات المختلفة لاختبار هذين النوعين من المساواة في لغات مختلفة:

لغةالمساواة الجسديةالمساواة الهيكليةملحوظات
ALGOL 68a :=: bأوa is ba = bمتى aو bمؤشرات
لغة C ، لغة C++a == b*a == *bمتى aو bمؤشرات
سي شاربobject.ReferenceEquals(a, b)a.Equals(b)يتم استخدام المعامل ==افتراضيًا ReferenceEquals، ولكن يمكن تحميله بشكل زائد لأداء وظيفة Equalsأخرى.
لغة الشفرة الشائعة(eq a b)(equal a b)
إرلانغa =:= ba == bعندما يكون a و b عددين
فورترانassociated (pa, b)a == bpa هو مؤشر
يذهبa == breflect.DeepEqual(*a, *b)عندما يكون a و b مؤشرين
جافاa == ba.equals(b)
جافا سكريبتa === ba == bعندما يكون a و b كائنين نصيين يحتويان على أحرف متكافئة، فإن عامل التشغيل === سيظل يُرجع القيمة true.
أوكاميل ، سمول توكa == ba = b
باسكالa^ = b^a = b
بيرل$a == $b$$a == $$bعندما $aتشير $bإلى كميات قياسية
PHP$a === $b$a == $bعندما يكون $aو $bكائنين
بايثونa is ba == b
روبيa.equal?(b)a == b
مخطط(eq? a b)(equal? a b)
سويفتa === ba == bعندما يكون لـ a و b نوع فئة
Visual Basic .NET [ عدم المساواة 1 ]a Is bأوobject.ReferenceEquals(a, b)a = bأوa.Equals(b)نفس لغة C#
أوبجكتيف-سي ( كوكو ، جنوستيب )a == b[a isEqual:b]عندما تكون aو bمؤشرات إلى كائنات هي حالات منNSObject
  1. طلب براءة اختراع: في 14 مايو 2003،قُدِّم طلب براءة الاختراع الأمريكي رقم 20,040,230,959 "ليس مُشغِّلاً" من قِبَل موظفي شركة مايكروسوفت . مُنِحت هذه البراءة في 18 نوفمبر 2004. ISNOT

تستخدم لغة روبي a === bهذا المصطلح للدلالة على أن "b عنصر من المجموعة a"، مع العلم أن تفاصيل معنى الانتماء إلى مجموعة ما تختلف اختلافًا كبيرًا باختلاف أنواع البيانات المستخدمة. ===يُعرف هذا المصطلح هنا باسم عامل "مساواة الحالة" أو "تضمين الحالة".

انظر أيضاً

ملاحظات ومراجع

  1. معيار الحساب الموجب (2022)
  2. ^ دينيس ، دوفان. "وتفجس" . جيثب . تم الاسترجاع في 25 يوليو 2024 .
  3. "مقارنة الكائنات" . دليل PHP . مجموعة PHP . تم الاطلاع عليه في 29 يونيو 2014 .
  4. "PHP: عوامل المقارنة - دليل المستخدم" . تم الاطلاع عليه في 31 يوليو 2008 .
  5. عوامل العلاقات والمنطق في برنامج Mathematica
  6. "لماذا توجد طرق عديدة للمقارنة من أجل المساواة؟" . ستاك أوفرفلو . تم الاطلاع عليه في 25 يوليو 2024 .
  7. ألكسندريسكو، أندريه (2010). لغة البرمجة D. أديسون ويسلي. ص 58. ISBN  978-0-321-63536-5.
  8. لا يُستخدم فقط في اللغات الشبيهة بلغة ALGOL، ولكن أيضًا في لغات FORTRAN و BASIC
  9. نظرًا لأن بعض المبرمجين شعروا بالحيرة من المعاني المزدوجة (عامل التشغيل الثنائي، والرابط المنطقي) لهذه الرموز الجديدة (وفقًا لدينيس ريتشي )، فقد تم الاحتفاظ فقط بالمعنى الثنائي للرمزين & و |.
  10. على الرغم من أن دينيس ريتشي قد أشار إلى أن هذا قد يكون مرتبطًا بـ "اقتصادية الكتابة" حيث قد تكون تحديثات المتغيرات أكثر تكرارًا من المقارنات في أنواع معينة من البرامج
  11. يتم تفسير القيمة العددية الصفرية على أنها خاطئة بينما يتم تفسير أي قيمة عددية غير صفرية على أنها صحيحة؛ ويتم استخدام هذا عادة مع أنواع الأعداد الصحيحة، على غرار تعابير لغة التجميع .
  12. برايان كيرنيغان ودينيس ريتشي (1988) [1978]. لغة البرمجة سي ( الطبعة الثانية). برنتيس هول. 19