العوامل المنطقية والتقييم المختصر
العوامل المنطقية والتقييم المختصر
في الدرس السابق تعلّمت كيفية كتابة كتل if / else if / else. في البرامج الحقيقية تحتاج دائمًا تقريبًا إلى فحص أكثر من شرط في آنٍ واحد — مثلًا: "هل المستخدم مسجّل الدخول وعمره كافٍ؟" أو "هل فشل الاتصال أو أعاد الخادم خطأ؟". تمنحك Java ثلاثة عوامل منطقية لدمج التعبيرات البوليانية: && و|| و!.
عامل AND: &&
يُنتج && القيمة true فقط عندما يكون كلا الطرفين true. فكّر فيه بمعنى "هذا الشرط وذاك يجب أن يتحقّقا معًا."
إذا كان أي طرف false فإن التعبير كله يصبح false. جدول الحقيقة:
true && true→truetrue && false→falsefalse && true→falsefalse && false→false
عامل OR: ||
يُنتج || القيمة true عندما يكون طرف واحد على الأقل true. فكّر فيه بمعنى "يكفي تحقّق هذا أو ذاك."
true || true→truetrue || false→truefalse || true→truefalse || false→false
عامل NOT: !
يعكس ! القيمة البوليانية. وهو عامل أحادي — يأخذ معاملًا واحدًا فقط ويقلبه.
if (!isNotEmpty). أعِد تسمية المتغيّر إلى isEmpty واكتب if (isEmpty). الكود الذي يُقرأ كالجملة العربية أسهل في الصيانة.
التقييم المختصر (Short-Circuit)
هذا من أهم ما يجب فهمه في عاملَي && و||. Java لا تُقيّم دائمًا كلا طرفَي التعبير المنطقي — بل تتوقّف فور أن يتحدّد الناتج.
- مع
&&: إذا كان الطرف الأيسرfalseفالناتج باتfalseيقينًا، وبالتالي يُتجاهل الطرف الأيمن كليًا. - مع
||: إذا كان الطرف الأيسرtrueفالناتج باتtrueيقينًا، وبالتالي يُتجاهل الطرف الأيمن كليًا.
هذا ليس مجرد تحسين للأداء — بل يمنع الأخطاء فعليًا. المثال الكلاسيكي هو حماية المرجع الفارغ قبل استخدامه:
لو قيّمت Java كلا الطرفين دون استثناء لانهار البرنامج عند name.isEmpty() لأن name قيمتها null. التقييم المختصر يجعل نمط الحماية هذا آمنًا تمامًا.
&& ضع فحص القيمة الفارغة أو حدود المصفوفة على اليسار حتى لا تُنفَّذ العملية الخطرة على اليمين إلا حين يكون ذلك آمنًا.
تركيب عدّة عوامل
يمكنك تسلسل عدّة عوامل منطقية في تعبير واحد. تُقيّم Java العامل ! أولًا، ثم &&، ثم || (الأولويات المعيارية). استخدم الأقواس لتوضيح نيّتك وتجنّب المفاجآت:
a || b && c يُفسَّر كـ a || (b && c) لأن && يربط أشدّ من ||. عند الشك استخدم الأقواس؛ لا تكلفة لها وتزيل كل التباس.
التأثيرات الجانبية والتقييم المختصر
نظرًا لأن الطرف الأيمن قد لا يُنفَّذ، تجنّب وضع منطق ذي تأثيرات جانبية (كاستدعاءات دوال تُغيّر الحالة) داخل شرط قد يُختصر، إلا إن فهمت العواقب تمامًا:
هذا نادرًا ما تريده. أبقِ الشروط نقيّة — قارن القيم ولا تُعدّل الحالة داخلها.
الخلاصة
تُتيح لك العوامل المنطقية الثلاثة بناء شروط مركّبة ودقيقة. يستلزم && صحّة الطرفين، بينما يكتفي || بصحّة طرف واحد، أما ! فيعكس القيمة. التقييم المختصر يعني أن الطرف الأيمن يُتجاهل حين يكون الناتج معروفًا مسبقًا — استخدم هذا لحماية المراجع الفارغة وحدود المصفوفات، وضع دائمًا الفحص الأأمن أولًا.