كيف يتخذ البرنامج قرارًا؟ ما معنى if و else؟ وكيف نكتب المقارنات والمنطق؟ مع أمثلة عملية كثيرة.
ما هي الشروط؟
تخيّل أنك تقول لشخص: "إذا كانت الساعة بعد العصر، اذهب للمشي، وإلا ابقَ في البيت". هذا بالضبط ما تفعله الشروط في البرمجة.
البرنامج في الأصل ينفّذ الأوامر من الأعلى إلى الأسفل سطرًا بعد سطر — لكن أحيانًا نحتاج أن نجعله يختار بين طريقين حسب حالة معيّنة. هنا نستخدم if و else.
إذا كان الشرط صحيحًا
نفّذ الكود داخل if
إذا كان الشرط خاطئًا
نفّذ الكود داخل else (إن وُجد)
المثال الأول — قرار بسيط
سنخزّن عمر شخص في متغير اسمه age ونقرر: هل عمره 18 أو أكثر؟
int age = 18; if (age >= 18) { System.out.println("مسموح لك بالدخول"); } else { System.out.println("غير مسموح لك بالدخول"); }
الناتج (age = 18):
مسموح لك بالدخول 🔍 شرح بنية if / else
if (شرط) الكلمة المحجوزة + الشرط بين قوسين دائريين — إذا كان الشرط صحيحًا نُنفّذ ما بداخل الأقواس المعقوفة.
{ } الأقواس المعقوفة تحدد "مجموعة الأوامر" التي تُنفّذ معًا إذا تحقق الشرط.
else اختياري — يُنفَّذ فقط إذا كان الشرط خاطئًا.
المقارنات — كيف نكتب الشرط؟
الشروط عادةً تكون "مقارنة" بين قيمتين. هذه أشهر عمليات المقارنة في Java:
| الرمز | المعنى | مثال | النتيجة |
|---|---|---|---|
== | يساوي | 5 == 5 | true |
!= | لا يساوي | 5 != 3 | true |
> | أكبر من | 10 > 5 | true |
< | أصغر من | 3 < 10 | true |
>= | أكبر من أو يساوي | 18 >= 18 | true |
<= | أصغر من أو يساوي | 5 <= 10 | true |
تنبيه مهم جداً
❌ للتعيين فقط
age = 18 يعطي قيمة للمتغير
✅ للمقارنة
age == 18 يقارن قيمة المتغير
المنطق AND و OR — أكثر من شرط
أحيانًا لا يكفي شرط واحد — قد تريد مثلاً: "إذا كان العمر 18 أو أكثر وكان لديه بطاقة". هنا نستخدم العمليات المنطقية:
&& AND (و) يجب أن يتحقق الشرطان معاً — إذا كان أحدهما خاطئاً فالنتيجة خاطئة.
true && true = true
true && false = false
false && true = false
|| OR (أو) يكفي أن يتحقق أحد الشرطين — تكون خاطئة فقط إذا كان كلاهما خاطئاً.
true || false = true
false || true = true
false || false = false
مثال باستخدام AND &&:
int age = 20; boolean hasId = true; if (age >= 18 && hasId == true) { System.out.println("مرحبًا، يمكنك الدخول"); } else { System.out.println("لا يمكنك الدخول"); }
مثال باستخدام OR ||:
int score = 50; if (score >= 60 || score == 59) { System.out.println("قريب من النجاح"); } else { System.out.println("تحتاج إلى درجات أكثر"); }
else if — أكثر من حالة
إذا كان لديك أكثر من احتمالين، استخدم else if لإضافة حالات وسطية:
int grade = 85; if (grade >= 90) { System.out.println("ممتاز"); } else if (grade >= 80) { System.out.println("جيد جدًا"); } else if (grade >= 70) { System.out.println("جيد"); } else { System.out.println("بحاجة إلى تحسين"); }
الناتج (grade = 85):
جيد جدًا 🔄 كيف يعمل البرنامج؟
85 >= 90؟ — لا، تجاوز. 85 >= 80؟ — نعم! ✅ يطبع "جيد جداً" ويتوقف. أخطاء شائعة يجب الانتباه لها ⚠️
استخدام = بدل == داخل الشرط
❌ خطأ
if (age = 18) ✅ صحيح
if (age == 18) نسيان الأقواس الدائرية حول الشرط
❌ خطأ
if age >= 18 ✅ صحيح
if (age >= 18) نسيان الأقواس المعقوفة عند أكثر من سطر
❌ خطأ
if (x > 0) x = x + 1; x = x * 2; السطر الثاني لن يكون داخل if
✅ صحيح
if (x > 0) { x = x + 1; x = x * 2; } شرط متناقض منطقياً
❌ مستحيل التحقق
if (age > 18 && age < 10) لا يمكن أن يكون العمر أكبر من 18 وأصغر من 10 في نفس الوقت!
من واقع عملي: عادتان تجنّبانك أخطاء الشروط
الشروط بسيطة في فكرتها، لكن من خبرتي في قراءة أكواد كثيرة، هناك عادتان صغيرتان تفرّقان بين كود نظيف وكود مليء بالأخطاء الخفيّة.
العادة الأولى: ضع الأقواس المعقوفة { } حول جسم الشرط دائمًا، حتى لو كان سطرًا واحدًا. كثيرون يحذفونها للاختصار، فيقعون لاحقًا في خطأ شهير حين يضيفون سطرًا ثانيًا يظنّونه داخل الشرط وهو خارجه. ألزمت نفسي بالأقواس دائمًا فاسترحت.
العادة الثانية: لا تُعمّق التداخل كثيرًا. إن وجدت شرطًا داخل شرط داخل شرط، فهذه إشارة لإعادة التفكير — غالبًا يمكن تبسيطه بدمج الشروط أو بالخروج المبكّر. ولاحقًا ستتعرّف على الصيغة المختصرة (ternary) المفيدة للحالات البسيطة، لكن لا تبالغ فيها حتى يبقى الكود مقروءًا.
📋 ملخص الدرس
if (شرط) { } ينفّذ الكود إذا كان الشرط صحيحاً
else { } ينفّذ إذا كان الشرط خاطئاً
== للمقارنة، و = للتعيين فقط
&& يعني (و)، و || يعني (أو)
⏭️ في الدرس القادم:
سنتعلم الحلقات (Loops) — كيف نكرّر تنفيذ الأوامر باستخدام for و while.