القيم المنطقية ومعاملات المقارنة
القيم المنطقية ومعاملات المقارنة
كل قرار يتخذه البرنامج يعود في النهاية إلى سؤال واحد: هل هذا صحيح أم خاطئ؟ تجيب Java على هذا السؤال بنوع البيانات boolean ومجموعة من معاملات المقارنة. قبل أن تكتب جملة if واحدة أو حلقة تكرارية، عليك أن تفهم هذا الأساس جيدًا.
نوع البيانات boolean
في Java، يُعدّ boolean نوعًا أوليًا يحمل قيمة واحدة فقط من اثنتين: true أو false. لا يوجد صفر، ولا null، ولا سلسلة فارغة — فقط هاتان القيمتان.
اسم المتغير مهم. استخدم أسماء تُقرأ كأسئلة نعم/لا: isReady، hasError، canEdit. هذا يجعل كودك شبه موثّق بنفسه.
is أو has أو can أو should. تتبع Java ذاتها هذه الاتفاقية في مكتبتها القياسية — String.isEmpty()، List.contains()، وغيرها.
معاملات المقارنة
تقيّم معاملات المقارنة قيمتين وتُنتج نتيجة من نوع boolean. يوجد في Java ستة معاملات:
==— يساوي!=— لا يساوي<— أصغر من>— أكبر من<=— أصغر من أو يساوي>=— أكبر من أو يساوي
كل واحد من هذه التعبيرات يُسمى تعبيرًا منطقيًا — إذ يُقيَّم إلى true أو false.
تخزين نتائج المقارنة
بما أن المقارنة تُنتج قيمة boolean، يمكنك تخزين النتيجة في متغير مثل أي قيمة أخرى. هذا نمط شائع وأنيق:
تخزين المقارنات في متغيرات ذات أسماء دالة يجعل الشروط المعقدة أسهل قراءةً لاحقًا — بدلًا من كتلة من المعاملات، يشرح اسم المتغير القصد مباشرةً.
مقارنة الأنواع الأولية
تعمل المعاملات الستة مباشرةً على الأنواع الأولية العددية في Java: int، long، double، float، short، byte، وchar. المقارنة دائمًا تكون بالقيمة.
char مخزّن كنقطة كود Unicode — أي عدد صحيح. فـ'A' هو 65، و'B' هو 66، وهكذا. لهذا يمكنك مقارنة الأحرف بـ< و>.
فخ == مع الكائنات
يقارن المعامل == القيم للأنواع الأولية. أما مع الكائنات (كـString)، فإن == يتحقق مما إذا كان متغيران يشيران إلى الكائن ذاته في الذاكرة، لا ما إذا كانت محتوياتهما متساوية. يُعدّ هذا أحد أكثر الأخطاء شيوعًا لدى المبتدئين في Java.
.equals() لمقارنة محتويات السلاسل النصية. قد يبدو استخدام == مع السلاسل صحيحًا أحيانًا (حين تُعيد JVM استخدام حرفية السلاسل من مجمّعها)، لكنه غير موثوق وسيسبب أخطاء يصعب تتبّعها. يتناول هذا الدرس الأنواع الأولية، لكن احتفظ بهذه القاعدة في ذهنك حين تتعامل مع السلاسل.
التعبيرات المنطقية كلبنات بناء
يمكن استخدام التعبير المنطقي في أي مكان تتوقع Java فيه قيمة boolean: تخزينه في متغير، أو تمريره إلى دالة، أو وضعه مباشرةً داخل شرط if. في الدرس التالي ستربط هذه التعبيرات بفروع if/else. في الوقت الحالي، تدرّب على قراءتها وتقييمها ذهنيًا.
الخلاصة
يحمل نوع البيانات boolean قيمة true أو false حصرًا. تقارن المعاملات الستة — ==، !=، <، >، <=، >= — بين قيمتين أوليتين وتُنتج نتيجة boolean. يمكنك تخزين تلك النتيجة في متغير أو استخدامها مباشرةً. تذكّر أن == يقارن القيمة للأنواع الأولية، أما للكائنات فتحتاج .equals(). كل شيء في تدفق التحكم — كل فرع وكل حلقة — يُبنى على هذه التعبيرات البسيطة للصحيح والخطأ.