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 حرفهایی برای صفحه است. روی صفحه باید یک خط ببینید: pass. بلوک 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 بود. در این اجرا خودِ کلمهٔ true چاپ نمیشود. هر چیزی که println داخل آکولادِ برگزیده بنویسد به صفحه میرسد. سه کار جدا را در ذهن نگه دارید: پرانتز آزمون را نگه میدارد، آکولاد خطهای همگروه را جمع میکند، و فقط println به صفحه میرسد. اگر صفحه true نشان داد، احتمالاً هنوز خودِ boolean را چاپ میکنید، یا دموی علامت ترکیب هنوز داخل main است. وقتی ready برابر true است، همان خط را با println("pass") داخل آکولاد if عوض کنید.
وقتی 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 یکخطی بدون آکولاد هم هست، ولی بهمحض اضافه شدن خط دوم، فقط خط اول به آزمون وصل میماند مگر آکولاد باشد. مبتدی این جزئیات را راحت از دست میدهد. در هر دو دمو آکولاد بگذارید تا هر مسیر روشن باشد: یک آکولاد باز بعد از آزمون، یک بسته قبل از else، بعد یک جفت دیگر برای else.
else مال if است. else تنها را javac رد میکند. روی این صفحه یک if یک else دارد. اگر فقط به مسیر true علاقه دارید میتوانید else ننویسید؛ دموی اول هر دو سمت را نشان میدهد تا دوراهی دیده شود. انتخاب میان چند مقدار ثابت کار 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.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود