if و else في Java
حتى الآن كنت تحتفظ بـ true أو false، أو تبني جوابًا واحدًا من جوابين بعلامات مثل &&. تلك الصفحات كانت تنتهي بقيمة واحدة تحت اسم. هذه الصفحة تستخدم تلك القيمة لشيء آخر: Java ينظر إلى true أو false ويشغّل مجموعة خطوط واحدة فقط. أداة هذا الاختيار هي if. المجموعة الأخرى، حين تحتاجها، هي else.
قيمة boolean تقرّر أي كتلة تُنفَّذ
أنشئ ملف برنامج صغير باسم Gate.java. يجب أن يطابق public class في السطر الأول اسم الملف: public class Gate. لا تُبقِ فئة Mint قديمة في هذا الملف؛ المترجم يتوقع أن يتوافق اسم الفئة مع اسم الملف.
داخل main، خزّن boolean قبل أن تختار المسار:
boolean ready = true;
هذا السطر لا يطبع شيئًا. هو فقط يعطي الاسم ready كلمة true. ready يبدأ بحرف r صغير. لا علامتي اقتباس حول true. الفاصلة المنقوطة تنهي سطر التخزين. بعد ذلك يأتي الاختيار نفسه:
if (ready) {
System.out.println("pass");
} else {
System.out.println("wait");
}
كلمة if بأحرف صغيرة: i ثم f. ليست اسمًا تختاره أنت. مسافة بعد if مقبولة؛ if(ready) بلا مسافة تُترجم أيضًا. داخل القوسين يجلس الاسم ready — بلا اقتباس، بلا ==، بلا &&. عندما يحمل ready قيمة true، يدخل Java زوج الأقواس المجعدة الأول ويشغّل System.out.println("pass");. علامتا الاقتباس حول pass تحدّدان حروفًا للشاشة. تلك الحروف — p وa وs وs — هي ما يجب أن تراه، سطرًا واحدًا. كتلة else تُتخطى بالكامل في هذا التشغيل. احفظ الملف قبل الترجمة.
برنامج يطبع pass
هذه هي النسخة التي تترجمها أولًا.
public class Gate {
public static void main(String[] args) {
boolean ready = true;
if (ready) {
System.out.println("pass");
} else {
System.out.println("wait");
}
}
}
من المجلد الذي يحوي Gate.java اكتب javac Gate.java. عندما تتطابق الأقواس المجعدة والأقواس العادية، لا يكتب javac أي سطر من عنده. ثم اكتب java Gate — وليس java Gate.java. أزل لاحقة .java من الأمر الثاني. الأمران نفسهما يعملان على Windows وعلى macOS؛ هذه الصفحة لا تعتمد على إملاء صدفة مختلف لأي من النظامين. يجب أن يطبع البرنامج pass ويتوقف. لا يطلب منك الكتابة. إذا بقي الطرفية منتظرة إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم داخل الملف. احذف ذلك الاستدعاء وأبقِ boolean مع if / else أعلاه. لا تحتاج تثبيت JDK جديد من أجل سطر شاشة خاطئ.
لماذا pass وليس wait؟ لأن الاختبار داخل القوسين كان true. Java لا يطبع كلمة true في هذا التشغيل. يطبع ما يشغّله println داخل الأقواس المجعدة المختارة. فكّر في ثلاث مهام: الأقواس العادية تحمل الاختبار، الأقواس المجعدة تجمع الخطوط التي تنتمي معًا، وprintln هو الجزء الوحيد الذي يكتب إلى الشاشة. إذا أظهرت الشاشة true، فغالبًا ما زلت تطبع الـ boolean نفسه، أو ما زال عرض علامات الدمج القديم داخل main. استبدل ذلك السطر بـ println("pass") داخل أقواس if عندما يكون ready بقيمة true.
عندما يكون ready بقيمة false
غيّر القيمة المخزّنة فقط:
boolean ready = false;
اترك بنية if / else كما هي. الآن يفشل الاختبار، فيتخطى Java الأقواس الأولى ويشغّل أقواس else بدلًا منها. يجب أن تظهر الشاشة wait، سطرًا واحدًا.
public class Gate {
public static void main(String[] args) {
boolean ready = false;
if (ready) {
System.out.println("pass");
} else {
System.out.println("wait");
}
}
}
ترجم وشغّل مرة أخرى: javac Gate.java ثم java Gate. يجب أن ترى wait. لاحظ أنك لم تعِد كتابة سطر if ولا سطر else — فقط القيمة تحت ready تغيّرت. بعد أن ترى wait، يمكنك إعادة boolean ready = true; للرجوع إلى العرض الأول. النسختان Java صحيحتان. تعلّمان نفس شكل if / else باختبارين متعاكسين.
اقرأ تشغيل false مرة أخرى بالترتيب. ready يحمل false. يُسأل if (ready). الجواب false، فتُتخطى كل الأسطر بين { الأولى و} المطابقة لها — بما فيها println("pass"). يستمر التنفيذ عند else. تُشغَّل الأسطر بين أقواس else، فينفَّذ println("wait"). سطر واحد على الشاشة. لا سطر ثانٍ. كلمة false نفسها لا تظهر إلا إذا طبعتها عمدًا.
قواعد تُبقي الاختيار واضحًا
الأقواس حول الاختبار مطلوبة. كتابة if ready { … } بلا أقواس تجعل javac يفشل. اختبار هذه الصفحة boolean: اسم مثل ready، أو الكلمتان العاريتان true أو false بلا اقتباس. if ("true") يضع حروفًا حيث يجب أن يكون اختبار boolean؛ يبلغ javac عن خطأ. أزل الاقتباس، أو استمر باستخدام اسم boolean. عدد صحيح وحده مثل if (1) ليس طريقة هذا الدرس لتخزين الجاهزية؛ ابقَ مع true أو false أو اسم boolean.
الأقواس المجعدة مهمة لقراءة الدرس. هذه الصفحة تلفّ كل مسار دائمًا داخل { }. يسمح Java بـ if من سطر واحد بلا أقواس مجعدة، لكن بمجرد إضافة سطر ثانٍ تحت ذلك if يبقى السطر الأول فقط مربوطًا بالاختبار ما لم تكن الأقواس موجودة. المبتدئون يضيعون هذا التفصيل بسهولة. أبقِ الأقواس المجعدة في العرضين حتى يكون كل مسار واضحًا: قوس فتح بعد الاختبار، قوس إغلاق قبل else، ثم زوج آخر لـ else.
else ينتمي إلى if. else وحده يجعل javac يفشل. في هذه الصفحة if واحد له else واحد. يمكنك كتابة if بلا else عندما تهتم فقط بمسار true؛ عرض التدريس الأول ما زال يُظهر الجانبين حتى ترى التشعب. الاختيار بين قيم ثابتة كثيرة هو switch في صفحة لاحقة — لا تخترع فرعًا ثالثًا بـ else آخر هنا.
يمكنك أيضًا كتابة الاختبار بلا اسم منفصل: if (true) { … } else { … }. هذا يُترجم ويُشغَّل. العروض تستخدم ready حتى ترى boolean مخزّنًا يقود الاختيار، وهو شكل البرامج بعد أن تعرف كيف تخزّن true وfalse. مقارنات مثل if (score > 10) تأتي بعد أن ترتاح مع تشعب true / false هذا؛ هذه الصفحة تُبقي الاختبار قيمة boolean تفهمها أصلًا.
📊 ready والشاشة
| ready | الشاشة |
|---|---|
| true | pass |
| false | wait |
استخدم الجدول للتحقق بعد التشغيل، لا بديلًا عنه. true مع العرض الأول يطبع pass. false مع العرض الثاني يطبع wait. إذا شُغِّل سطرَا println معًا بطريقة ما، فالأقواس المجعدة أو اقتران if / else خاطئ — أصلح البنية بدل إعادة تثبيت Java.
خلط شائع هو طباعة الصياغة نفسها: System.out.println("if (ready)");. ذلك يكتب الحروف if (ready). ولا يختار مسارًا. خلط آخر هو ترك عروض && أو == في نفس main والتساؤل لماذا تظهر الشاشة true بدل pass. يجب أن يحتوي main هذه الجلسة على boolean وif / else فقط.
ماذا تستطيع الآن
يمكنك تخزين boolean، ووضعه داخل if (…)، ومنح كل نتيجة كتلتها ذات الأقواس المجعدة. عندما يكون الاختبار true يُشغَّل println واحد؛ وعندما يكون false يُشغَّل println الخاص بـ else. الصفحة التالية هي switch، حيث تحصل عدة قيم ثابتة كلٌّ على case خاص بدل تشعب true / false واحد.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى