آشنایی با دستور شرطی if در زبان برنامه‌نویسی جاوا


در فرآیند توسعهٔ نرم‌افزار گاهی اوقات نیاز داریم تا شرایطی را در برنامۀ خود تعریف کنیم به طوری که در صورت برقرار بودن هر یک از شروط، یکسری دستورات مورد نظر به صورت پشت سر هم اجرا شوند. در واقع، در چنین شرایطی دولوپرها تصمیم‌گیری جهت اجرای دستورات تعریف‌شده را بر عهدۀ خودِ نرم‌افزار می‌گذارند تا با توجه به شرایط خاص پیش آمده تصمیم متفاوتی را اتخاذ کند.

برای مثال، فرض کنیم که برنامه‌ای نوشته‌ایم تا حساب ماهیانۀ کاربران را محاسبه کرده و در اختیارشان قرار دهد که در این برنامه می‌توانیم از یکسری دستورات شرطی استفاده کنیم مبنی بر اینکه مثلاً اگر ماندۀ حساب از 100/000 تومان کمتر شد، به کاربر اخطار دهد یا سناریویی دیگر را در نظر می‌گیریم که در آن میزان آب موجود در بطری را سنجیده و در صورتی که مقدار آب بر حسب واحد لیتر از یک میزان مشخصی پایین‌تر بود، استرینگی در قالب پیغام خطا در معرض دید کاربر قرار دهد (در این آموزش قصد داریم تا این سناریو را پیاده‌سازی نماییم.)

در زبان برنامه‌نویسی جاوا برای انجام چنین کاری از دستوراتی شرطی همچون if و else یا switch استفاده می‌کنیم که رایج‌ترین نوع دستور شرطی در این زبان if می‌باشد که با استفاده از چنین دستوری می‌توان برنامه‌ای پیاده‌سازی کرد که در صورت true بودن شرط مذکور یکسری دستورات را اجرا کند و در صورت false یا نادرست بودن این شرط نیز دستورات دیگری اجرا گردند.

برای روشن شدن مطالب فوق، همان‌طور که قبلاً آموختیم، یک پروژۀ جدید در محیط برنامه‌نویسی اکلیپس تحت عنوان If ایجاد کرده و کلاسی با نامی دلخواه مثلاً IfClass در آن می‌سازیم (توجه داشته باشیم که از شیوۀ درست نام‌گذاری در انتخاب نام کلاس خود استفاده نماییم به علاوه اینکه در حین ایجاد کلاس می‌باید تیک گزینۀ public static void main را بزنیم.) حال پیش از نوشتن هر گونه دستوری، کد برنامه به شکل زیر خواهد بود:

public class IfClass {
    public static void main(String[] args) {

    }
}

در این مرحله از کار به منظور پیاده‌سازی سناریویی که در ابتدای آموزش بدان اشاره کردیم، نیاز به تعریف متغیری جهت نگهداری میزان آب موجود در بطری داریم که در همین راستا با استفاده از نوع دادۀ int متغیری تحت عنوان waterAmount تعریف کرده و مقداری معادل با عدد 11 (بر حسب واحد لیتر) به آن منتسب می‌کنیم. بنابراین خواهیم داشت:

public class IfClass {
    public static void main(String[] args) {
 	    int waterAmount = 11;
    }
}

در ادامه نیاز داریم تا شرایطی به منظور سنجش میزان آب موجود در بطری تعریف کنیم تا مقدار آب موجود را سنجیده و بر اساس شرایط پیش‌آمده پیغامی متناسب با شرایط موجود در کنسول آی‌دی‌ای اکلیپس چاپ شود که برای این منظور کد فوق را به شکل زیر تکمیل می‌کنیم:

public class IfClass {
    public static void main(String[] args) {
	    int waterAmount = 11;
	    if () {

        }
    }
}

در کد فوق، به منظور استفاده از دستورات if علائم ( ) را در مقابل آن نوشته به طوری که داخل این علائم شرط مورد نظر قرار می‌گیرد سپس علامت‌های { } جهت پیاده‌سازی دستوراتی درج شده‌اند که در صورت true بودن یا برقراری شرط مربوط به دستور if می‌باید اجرا شوند.

حال در برنامۀ مورد نظر قصد داریم که شرطی در نظر بگیریم تا اگر مقدار آب موجود کمتر از 20 واحد بود، استرینگی در قالب پیغامی برای خرید آب در بخش کنسول نمایش دهد که برای همین منظور دستور شرطی مورد نیاز را به صورت زیر پیاده‌سازی می‌نماییم:

public class IfClass {
    public static void main(String[] args) {
	    int waterAmount = 11;
	    if (waterAmount < 20) {
	        System.out.println("Go and buy some water!");
        }
    }
}

در کد فوق، دستور شرطی مورد نظر را به صورت waterAmount < 20 تعریف کرده‌ایم و بدین ترتیب مقدار آب موجود بررسی می‌شود و از آنجایی که مقدار منتسب به متغیر waterAmount برابر با عدد 11 است، شرط مذکور برقرار بوده و دستور داخلی آن اجرا می‌گردد و در نتیجه استرینگ «!Go and buy some water» در کنسول چاپ می‌شود به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

Go and buy some water!

همان‌طور که می‌بینیم، مقدار منتسب به متغیر waterAmount برابر با عدد 11 بوده و از همین روی دستور شرطی برابر با مقدار بولین true می‌شود و در نتیجه دستور تعریف‌شده در بدنۀ داخلی آن اجرا می‌گردد. حال اگر عدد 20 را به 7 تغییر دهیم، مشاهده می‌کنیم که هیچ استرینگی در کنسول نمایش داده نمی‌شود چرا که با توجه به مقدار منتسب به متغیر waterAmount معادل با عدد 11، شرط waterAmount < 7 به صورت false ارزیابی شده و دستور مربوط به بدنۀ داخلی آن اجرا نمی‌شود. 

اکنون شرط برنامۀ خود را به نحوی تعریف می‌کنیم تا در صورت کمتر یا برابر بودن میزان آب موجود از یک مقدار خاص، استرینگی در قالب پیغامی برای خرید آب در کنسول نمایش دهد که در این صورت از علائم => برای تعریف دستور شرطی خود استفاده می‌کنیم و کد فوق را به صورت زیر تغییر می‌دهیم:

public class IfClass {
    public static void main(String[] args) {
	    int waterAmount = 11;
	    if (waterAmount <= 11) {
	        System.out.println("Go and buy some water!");
        }
    }
}

همان‌طور که ملاحظه می‌کنیم، در پرانتز مقابل if شرط waterAmount <= 11 را قرار داده‌ایم بدین معنی که چنانچه مقدار آب موجود 11 واحد یا کمتر از آن باشد، شرط برقرار بوده و دستور مربوط به بدنۀ داخلی آن اجرا می‌شود که با اجرای برنامۀ فوق می‌بینیم که استرینگ مربوطه در کنسول به نمایش در می‌آید چرا که با توجه به مقدار منتسب به متغیر waterAmount معادل با عدد 11، شرط تعریف‌شده true می‌باشد.

حال ممکن است بخواهیم شرطی را در برنامۀ خود تعیین کنیم مبنی بر اینکه اگر مقدار آب موجود دقیقاً معادل عدد 11 بود، استرینگ «!We do not need water» در بخش کنسول چاپ شود که برای پیاده‌سازی شرط مذکور، اکثر برنامه‌نویسان مبتدی جاوا ممکن است که کد فوق را به صورت زیر بازنویسی کنند:

public class IfClass {
    public static void main(String[] args) {
	    int waterAmount = 11;
	    if (waterAmount = 11) {
	        System.out.println("Go and buy some water!");
        }
    }
}

در چنین شرایطی، به محض تغییر کد مثال قبل به صورت بالا، مشاهده می‌کنیم که آی‌دی‌ای اکلیپس دور دستور  waterAmount = 11 خط‌چین قرار داده و بروز ارور در این نقطه از برنامه را اعلام می‌کند. 

نکته
در زبان برنامه‌نویسی جاوا بر خلاف قوانین ریاضیاتی، عملگر = نشان‌دهندۀ برابری نبوده و صرفاً جهت اختصاص مقادیر به متغیرها مورد استفاده قرار می‌گیرد و این در حالی است که عملگر == به منظور تعیین برابری دو مقدار در این زبان تعریف شده است.

با توجه به آنچه در نکتۀ فوق بدان اشاره کردیم، در تمامی قسمت‌های برنامۀ خود جهت اختصاص مقداری معادل عدد صحیح 11 به متغیری تحت عنوان waterAmount از عملگر = استفاده نموده‌ایم. اکنون با دانستن این نکته می‌توانیم کد فوق را به شکل زیر بازنویسی کنیم و مشاهده می‌کنیم که کلیۀ خطاهای برنامه رفع می‌شوند:

public class IfClass {
    public static void main(String[] args) {
	    int waterAmount = 11;
	    if (waterAmount == 11) {
	        System.out.println("We do not need water!");
        }
    }
}

در برنامۀ فوق، شرطی تعریف‌ کرده‌ایم که چنانچه مقدار آب موجود دقیقاً برابر با 11 واحد بود، شرط ture بوده و دستور داخلی آن مبنی بر چاپ استرینگ «!We do not need water» در کنسول چاپ شود که با اجرای کد فوق در خروجی خواهیم داشت:

We do not need water!

در واقع، با اجرای برنامۀ مورد نظر، شرط تعریف‌شده بررسی می‌شود بدین صورت که آیا مقدار آب موجود برابر با 11 واحد است یا خیر و با توجه به مقدار منتسب به متغیر waterAmount معادل با عدد 11، شرط مذکور برقرار بوده و از همین روی استرینگ «!We do not need water» در کنسول چاپ می‌گردد.

اکنون اگر مقدار منتسب به متغیر waterAmount را تغییر داده و عددی دلخواه اما به غیر از 11 قرار دهیم، شرط تعریف‌شده در برنامۀ فوق false بوده و چیزی در کنسول نمایش داده نخواهد شد!

اپراتور دیگری در زبان برنامه‌نویسی جاوا تعریف شده است که به منظور مقایسۀ نابرابری دو مقدار عددی مورد استفاده قرار می‌گیرد. به طور مثال، اگر در برنامۀ خود بخواهیم دستوری اجرا کنیم مبنی بر اینکه چنانچه مقدار متغیر waterAmount معادل عدد 100 نبود، استرینگی مبنی بر وجود نداشتن میزان 100 واحد آب در بخش کنسول چاپ شود که برای این منظور، کد برنامه را به صورت زیر بازنویسی می‌کنیم:

public class IfClass {
    public static void main(String[] args) {
	    int waterAmount = 11;
	    if (waterAmount != 100) {
	        System.out.println("The amount of water does not equal to 100!");
	    }
    }
}

در کد فوق، دستور waterAmount != 100 را به منظور سنجش نابرابری مقدار آب موجود معادل با 100 واحد تعریف کرده‌ایم بدین معنی که با اجرای این کد بررسی می‌کنیم چنانچه مقدار آب موجود برابر با 100 واحد نبود، شرط برقرار شده و دستور داخلی آن مبنی بر چاپ استرینگ «!The amount of water is not equals to 100» در کنسول اجرا شود که با اجرای کد فوق خواهیم داشت:

The amount of water does not equal to 100!

همان‌طور که ملاحظه می‌کنیم، با اجرای برنامۀ فوق مقدار منتسب به متغیر waterAmount برابر با عدد 11 بوده و از همین روی شرط تعریف‌شده true می‌باشد و در نتیجه دستور مرتبط با آن اجرا شده و استرینگ فوق در کنسول چاپ می‌گردد (همچنین به منظور سنجش مقداری «بیشتر از» و «بیشتر یا برابر» با مقداری دلخواه به ترتیب از علائم < و =< می‌توان استفاده کرد.)

به علاوه، نکتۀ قابل‌توجه در ارتباط با مقایسۀ مقادیری از جنس استرینگ این است که به منظور انجام چنین مقایساتی نیاز به استفاده از متد از پیش‌ تعریف‌شدۀ ()equals داریم و به هیچ وجه نمی‌توانیم از اپراتورهای < و > یا عملگرهای مقایسه‌ای از این دست استفاده نماییم (جهت کسب اطلاعات بیشتر در این مورد، به آموزش آشنایی با متدهای مرتبط با کلاس String در زبان برنامه‌نویسی جاوا مراجعه نماييد.)

همچنین برخی مواقع نیاز به پیاده‌سازی برنامه‌ای داریم که برای مثال در صورت true بودن شرطی یکسری دستورات مورد نظر اجرا شده و در صورت false بودن شرط مذکور، دستورات دیگری در برنامه اجرا شوند که برای این منظور به راحتی می‌توان با ادغام دستورات if و else برنامۀ مورد نیاز را پیاده‌سازی کرد که با نحوۀ تعریف دستورات مرتبط با else نیز در آموزش بعدی آشنا خواهیم شد.

دانلود فایل‌های تمرین


بهزاد مرادی

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
red fire
red fire
۱۳۹۵/۰۹/۰۹
ببخشید برنامه eclipse من موقع export کردن گزینه android نداره
تو رو خدا کمک کنین
saman-s
saman-s
۱۳۹۵/۰۸/۳۰
با سلام
من یه کلاس اسکنر ایجاد کردم و یه متغیر . خواستم یک عددی رو از کاربر بگیرم و در صورت درستی یک جمله و نادرستی جمله دیگر رو بهم نشون بده اینم با if خواستم. ولی تو condition جمله if کلاس اسکنر رو مساوی با متغیرم قرار میدم و میکم اگه این اسکنر با متغیر مساوی باشه این جماه و اگه نبود جمله دیگری رو نشون بده ولی نمی دونم چرا تو hf ارور نشون میده و می نویسه incomparable types: Scanner and int.
کمکم کنید

import java.util.Scanner;

public class HelloWorld {
public static void main(String[] args) {
Scanner waterAmount = new Scanner(System.in);
System.out.print("Please Enter Your Bottle Number That You Have : ");
int bottleNumber = 11 ;
if ( waterAmount == bottleNumber ) {
System.out.println("We need Some Water. Please Pour it on"); }
else {
System.out.println("We don not need water!");
}
}
}
کاربر میهمان
مهندس نرم افزارمن یک کاربر مهمان هستم
۱۳۹۵/۰۷/۲۲
با عرض سلام و خسته نباشید خدمت دوستان خوبم و تیم این سایت خوب
اگر کسی برنامه اندروید مینویسه میتونم کمکتون کنم فقط برای پاسخ به سوالاتتون کمی صبر و بردباری کنید
این آی دی تلگرام بنده @makanyp
و این ایمیلم هست yaser.allahdadi@gmail.com
همچنین در نواختن گیتار مهارت حرفه ای دارم و رئیس تیم اهنگ جام هستم
اگر کسی علاقه داشت از مبتدی تا نیمه حرفه ای آموزش میدهیم
ازین که وقت خود را صرف نظر بنده کردید بسیار تشکر میکنم
masoudhp
masoudhp
۱۳۹۵/۰۶/۱۹
سلام و خسته نباشید به همه و مخصوصا تیم سکان آکادمی.
ببخشید من یه مشکلی دارم و اینه که میخوام به برنامه بگم اگر این مقدار و این مقدار آب بود مثلا اگر 22 و 23 بود جواب درست باشه چجوری این کار را کنم؟
با تشکر.
@HOSEIN@
@HOSEIN@
۱۳۹۴/۱۱/۲۶
اقادمتونگرم واقعاسایت قشنگی دارید
من خیلی وقت بوددنبال یه سایت کامل آموزش برنامه نویسی میگشتم .....وبالاخره این سایتوپیداکردم
باتشکرازهمه...........
کاربر میهمان
کارآموز من یک کاربر مهمان هستم
۱۳۹۴/۱۰/۱۰
با درود و سپاس فراوان بابت آموزش و محتوایی که آماده کرده اید میدانم که آماده کردن این حجم محتوا و اندیشیدن به اینکه چه چیز را بگوئید و چگونه بگوئید کار سخت و زمانگیری است دست مریزاد و خدا قوت، و ای کاش در انتهای پست ها دو دکمه تعبیه می کردید برای رفتن به بخش بعدی آموزش و بخش قبلی آموزش !
امیرحسین مختاری
امیرحسین مختاری
۱۳۹۴/۰۹/۰۱
Great
محمد عقبائی فرهنگ
محمد عقبائی فرهنگ
۱۳۹۴/۰۸/۱۵
کارتون عالیه همیشه پاینده باشین.
با اجازتون بنده هم یک بندی رو به آموزش اضافه میکنم که فکر میکنم مفید باشه.
دوستان اگر بعد از if از {} استفاده نکنید در این صورت اگر شرت داخل if درست(true) باشد فقط اولین خط بعد از if اجرا خواهد شد. و اگر شرط درست نباشد کامپایلر به بعد از اولین خط از if پرش (jump) خواهد کرد.
موفق باشید.