الفرق بين = و == و === في البرمجة

خالد النجاربرمجة أُترك تعليق

في بعض لغات البرمجة, إشارة اليساوي, “=”, تستخدم في أكثر من حالة. تحديداً, ممكن تستخدم كـ = أو == أو ===. في هالمقالة راح أشرح الفرق بينهم وليش مهم تعرف الفرق بعمق بشكل عام, وبشكل خاص للغتين البرمجة PHP و  Javascript.

“=” إشارة اليساوي للتعين

في أغلب لغات البرمجة, استخدام إشارة اليساوي لوحدها بتستخدم لتعيين قيمة ما لمتغير. مثال على هذه اللغات PHP, C/++, Java, Javascript, Python.

لتوضيح مفهوم تعيين قيمة لمتغير ما, إقرؤا هالأمر البسيط في البرمجة:

x = 0

ببساطة, في الكود هذا, بيتم تعيين وتخزين قيمة رقم صفر في المتغير x. طريقة كتابة جملة التعيين نفسها ممكن تختلف إختلاف بسيط بناءً على اللغة. فمثلا, في لغة C\++ و Java, لازم تذكر نوع القيمة, أي  int(eger) و البعني رقم صحيح. في لغات أخرى, الفرق ممكن يكون في الإشارة نفسها. مثلا, في لغة Pascal بيتم تعيين قيمة كالتالي:

x := 0;

“==” إشارة اليساوي لمقارنة القيم

للتمييز بين مفهوم تعيين قيمة ما و مقارنة ما إن كانت قيمتين متساويتان, تم إبتكار فكرة تكرار إشارة اليساوي مرتان. ففي الأوامر المنطقية, logical statements, إشارة == تفحص ما إن كان الشيئان ما قبل وبعد الإشارة يساوا بعض. فمثلا: x == 0  تفحص ما إن كان المتغير x يساوي صفر.

لكن, ماذا برأيكم الناتج عند إختبار لو كانت قيمة x تساوي false أو null في حال كانت قيمة x صفر؟ الجواب بيعتمد على لغة البرمجة. على سبيل المثال, لغة C ستعتبر بأن ناتج هذه المقارنة صحيح, وذلك لأنها تعتبر false, null, 0 واحد. لكن في لغة Java تعتبر هذه المقارنة خاطئة وغير مقبولة.

في لغتين البرمجة, المركزين عليهم, PHP و Javascript المترجم أو انتربرتر interpreter بيحاول يغير قيمة الأطراف حتى يكونوا مقارنين. فمثلا لو قارنا رقم ما مع حرف بيحتوي على رقم خمسة, المترجم بيحول الحرف لرقم. في المثال التحت بوضح الفكرة أكثر:

'5' == 5 // true

حرف رقم خمسة, ‘5’, بيتحول لقيمة الرقم خمسة. هذا التحويل بيجعل ناتج المقارنة صحيحة.

“===” إشارة اليساوي لمقارنة الهوية

لكن نفرض بدك تتأكد إنه القيمتين نفسها ولهم نفس النوع, كيف ممكن تعمل هيك مقارنة؟ شكراً للذين ضافوا === على بعض لغات البرمجة كـ PHP و Javascript. عند استخدام إشارة الـ=== في البرمجة, بيتم مقارنة القيم على الطرفين مثل ما هم بدون أي تغير. هذا الشيء بيتيح لك مقارنة القيم والمتغيرات بشكل مشدد أكثر. إسم هذا النوع من المقارنة, مقارنة الهوية. في الكود الجاي ببين الفرق البسيط بينهم.

'5' === 5 //false

5 === 5 //true

'5' === '5' //true

في المثال هذا, فقط في حالة لو كانت القيم المقارنة متماثلة يتم إعتبار ناتج المقارنة صحيح.

إضافة اليساوي لمقارنة الهوية, ===, على بعض لغات البرمجة مثل PHP و Javascript أتاح إمكانية مقارنة قيم بطريقة مشددة وغير مشددة. لكن كل إنتربرتر للغة ما بيترجم كود البرمجة بطريقة خاصة. فتأكد بإنك تكون فاهم كيف الإنتربرتر بيترجم الكود وبيشغله حتى ما تواجه مشاكل غريبة ما بتتفسر, مثل ما بيشتكي مدون عن عشوائيات في الجافاسكربت. بتمنى هالمقالة أفادتكم وبرمجة ممتعة.

* (تحتوي هذه المشاركة على روابط تابعة. يرجى قراءة الإفصاحات للمزيد من التفاصيل).

شارك المقالة