آموزش جاوا (فصل ۴)

آشنایی با دستور شرطی 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 نیز در آموزش بعدی آشنا خواهیم شد. دانلود فایل‌های تمرین

آشنایی با دستور else در زبان برنامه نویسی جاوا


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

پیش از بحث پیرامون دستور else در این بخش از آموزش می‌خواهیم یک دستور if تعریف کنیم تا مقادیر عددی منتسب به دو متغیر را با یکدیگر مقایسه کرده و در صورت برقرار بودن شرط تعیین‌شده، یکسری دستور مورد نظر اجرا گردند. برای این منظور، پروژه‌ای جدید در محیط اکلیپس تحت عنوان IfElse ایجاد کرده سپس کلاسی تحت عنوانElseIfClass در آن می‌سازیم که در ابتدا کدی به صورت زیر خواهیم داشت:

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

    }
}

حال با استفاده از دیتا تایپ int دو متغیر تحت عناوین suv و bus تعریف کرده و به ترتیب هر یک از اعداد 4 و 40 را به آن‌ها منتسب می‌کنیم:

public class ElseIfClass {
    public static void main(String[] args) {
	int suv = 4, bus = 40;
    }
}

همان‌طور که مشاهده می‌کنیم، تعریف دو متغیر برنامه را به منظور خلاصه‌سازی سورس‌کد ادغام نموده‌ایم (در این مثال، suv مخفف واژگان Sport and Utility Vehicle به معنی «ماشین شاسی‌بلند» بوده و واژۀ bus نیز به معنی «اتوبوس» می‌باشد که هر یک از اعداد 4 و 40 نیز به منزلۀ ظرفیت مسافر آن‌ها در نظر گرفته شده‌اند.) بدین ترتیب، قصد داریم تا با استفاده از دستور if ظرفیت دو وسیلۀ نقلیۀ مذکور را با یکدیگر مقایسه کنیم که برای این منظور برنامۀ فوق را به صورت زیر تکمیل می‌نماییم:

public class ElseIfClass {
    public static void main(String[] args) {
        int suv = 4, bus = 40;
        if (suv < bus) {
            System.out.println("An SUV has less capacity.");
        }
    }
}

در کد فوق، در مقابل دستور if و مابین علائم ( ) شرط مورد نظر را بدین صورت تعریف کرده‌ایم که چنانچه مقدار منتسب به متغیر suv از مقدار اختصاص‌یافته به متغیر bus کوچکتر بود، شرط برقرار بوده و دستورات مرتبط با آن اجرا شوند که در آن گقته‌ایم استرینگ «.An SUV has less capacity» در کنسول چاپ شود که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

An SUV has less capacity.

در واقع، از آنجایی که مقادیر عددی 4 و 40 را به ترتیب به هر یک از متغیرهای suv و bus اختصاص داده‌ایم، شرط تعریف‌شده در برنامه برقرار بوده و استرینگ مورد نظر در کنسول چاپ می‌شود.

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

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

public class ElseIfClass {
    public static void main(String[] args) {
        int boy = 18;
        if (boy >= 18) {
            System.out.println("You have reached your majority.");
        } else {
            System.out.println("Sorry, you are too young!");
        }
    }
}

در کد فوق، با استفاده از دیتا تایپ int متغیری تحت عنوان boy تعریف کرده و مقدار عددی 18 معادل سن کاربر را برای آن در نظر گرفته‌ایم سپس در یک دستور شرطی مقابل علائم ( ) شرط مورد نظر خود را بدین صورت تعریف کرده‌ایم که چنانچه مقدار منتسب به متغیر boy بزرگ‌تر یا مساوی با عدد 18 بود، شرط برقرار بوده و استرینگ «.You have reached your majority» و در غیر این صورت دستورات مرتبط با else اجرا شده و استرینگ «!Sorry, you are too young» در کنسول نمایش داده شود. حال برنامۀ فوق را اجرا می‌نماییم و در خروجی خواهیم داشت:

You have reached your majority.

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

public class ElseIfClass {
    public static void main(String[] args) {
        int boy = 13;
        if (boy >= 18) {
            System.out.println("You have reached your majority.");
        } else {
            System.out.println("Sorry, you are too young!");
        }
    }
}

با اجرای کد فوق می‌بینیم که شرط تعریف‌شده برقرار نبوده و از همین روی مفسر جاوا دستورات مرتبط با else را اجرا می‌نماید که در نتیجه استرینگ «!Sorry, you are too young» در کنسول نمایش داده می‌شود:

Sorry, you are too young!

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

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

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

public class ElseIfClass {
    public static void main(String[] args) {
        int boy = 18;
        System.out.println(boy >= 18 ? "You have reached your majority." : "Sorry, you are too young!");
    }
}

همان‌طور که می‌بینیم، در سطر چهارم، ابتدا شرط مورد نظر را نوشته سپس یک علامت ? قرار داده و در ادامه دستورات مرتبط با if را درج نموده‌ایم که در صورت true بودن شرط مذکور اجرا می‌شوند و در آن گفته‌ايم استرينگ «.You have reached your majority» توسط متد ()ptintln در كنسول چاپ شود. در ادامه، یک علامت : قرار داده و در نهایت دستورات مرتبط با else را نوشته‌ایم که در صورت false بودن شرط تعریف‌شده در برنامه اجرا شده و استرینگ «!Sorry, you are too young» در کنسول نمایش داده می‌شود. حال پس از اجرای کد فوق، خروجی زیر را مشاهده خواهیم کرد:

You have reached your majority.

با اجرای برنامۀ فوق، عدد 18 به متغیر boy منتسب شده و شرط مورد نظر نیز true ارزیابی می‌شود و از همین روی استرینگ فوق در کنسول چاپ می‌گردد. حال مقدار متغیر boy را به 17 کاهش می‌دهیم و کد خود را به شکل زیر بازنویسی می‌کنیم:

public class ElseIfClass {
    public static void main(String[] args) {
        int boy = 17;
        System.out.println(boy >= 18 ? "You have reached your majority." : "Sorry, you are too young!");
    }
}

در واقع، مقدار منتسب به متغیر boy از مقدار تعیین‌شده در شرط مورد نظر کمتر بوده و از همین روی شرط مذکور برابر با مقدار بولین false ارزیابی می‌شود که در نتیجه دستور مرتبط با else پس از علامت : اجرا شده و استرینگی به صورت زیر در کنسول نمایش داده می‌شود:

Sorry, you are too young!

به طور کلی، می‌توان گفت که در صورت خلاصه‌سازی دستورات شرطی به روش فوق، جملۀ اول مربوط به دستورات بدنۀ داخلی if و جملۀ دوم به دستورات بدنۀ داخلی else مربوط می‌شوند.

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

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


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

آشنایی با دستور else if در زبان جاوا

برای شروع، ابتدا پروژه‌ای تحت عنوان NestedIfStatement ایجاد کرده سپس کلاسی با نام ElseIf در آن می‌سازیم. به علاوه، برای درک بهتر موضوع بحث این آموزش نیاز به یک سناریو داریم بدین صورت که فرض کنیم که می‌خواهیم برنامه‌ای طراحی کنیم تا بر اساس برخی اطلاعات دانشجویان همچون میزان هوش و معدل ترم قبل ایشان درصد تخفیفی را برای شهریۀ دانشگاهی آن‌ها محاسبه کند.

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

بنابراین متغیرهای مورد نیاز خود را تعریف کرده و بدین ترتیب کدی به شکل زیر خواهیم داشت:

public class ElseIf {
    public static void main(String[] args) {
        double intelligenceQuotient = 100;
        double termMean = 17.3;
    }
}

در کد فوق، با استفاده از دیتا تایپ double دو متغیر تحت عناوین intelligenceQuotient و termMean تعریف کرده و به ترتیب اعداد 100 و 17/3 را به هر یک اختصاص داده‌ایم. در ادامه، جهت محاسبۀ تخفیف متناسب با میزان هوش و معدل دانشجو نیاز به استفاده از دستورات شرطی داریم و از همین روی کد فوق را به صورت زیر تکمیل می‌نماییم:

public class ElseIf {
    public static void main(String[] args) {
        double intelligenceQuotient = 100;
        double termMean = 17.3;
        if (intelligenceQuotient > 110 && termMean > 18) {
            System.out.println("You have 30 percent discount.");
        } else if (intelligenceQuotient > 100 && termMean > 17) {
            System.out.println("You have 20 percent discount.");
        } else {
            System.out.println("You have no discount.");
        }
     }
}

در کد فوق، ابتدا دستور if را با استفاده از عملگر && بدین صورت تعریف کرده‌ایم که چنانچه مقدار منتسب به متغیر intelligenceQuotient بزرگ‌تر از 110 بوده و همچنین مقدار اختصاص‌یافته به متغیر termMean نیز بزرگ‌تر از 18 باشد، شرط كلی true بوده و در نتیجه دستورات مرتبط با آن اجرا می‌شوند که در اینجا استرینگ «.You have 30percent discount» در کنسول چاپ می‌شود بدین معنی که چنانچه میزان هوش دانشجو بالاتر از 110 و همچنین معدل ترم پیش وی بالاتر از 18 باشد، میزان تخفیف ٪۳۰ بر شهریۀ دانشگاهی او اِعمال می‌گردد. 

در ادامه، از دستور else if استفاده کرده‌ایم و نحوۀ کار این دستور شرطی بدین صورت است که چنانچه شرط تعیین‌شده در دستور if برقرار نباشد، شرط تعریف‌شده در دستور else if بررسی می‌شود که در صورت true بودن شرط مذکور، دستورات مرتبط با آن اجرا می‌گردند و در غیر این صورت دستورات مرتبط با else اجرا می‌شوند. بنابراین در کد فوق، اگر مقادیر اختصاص‌یافته به متغیرهای intelligenceQuotient و termMean به ترتیب بزرگ‌تر از 110 وبزرگ‌تر از 18 نباشند،‌ شرط دستور else if بررسی می‌شود تا اگر مقدار متغير intelligenceQuotient بزرگ‌تر از 100و مقدار متغير termMean بزرگ‌تر از 17 باشد، شرط برقرار بوده و دستور داخلی آن مبنی بر چاپ استرینگی به صورت «.You have 20 percent discount» اجرا شود و در غیر این صورت هم دستورات داخلی else اجرا شده و استرینگ «.You have no discount» در کنسول چاپ گردد. حال برنامۀ فوق را اجرا می‌کنیم و در خروجی خواهیم داشت:

You have no discount.

با اجرای برنامۀ فوق، اعداد 100 و 17/3 به ترتیب به متغیرهای intelligenceQuotient و termMean اختصاص یافته و دستور if چک می‌شود که مقادیر منتسب به هر یک از متغیرهای مذکور به ترتیب بزرگ‌تر از 110 و 18 می‌باشد یا خیر که شرط برقرار نبوده و در ادامه شرط تعیین‌شده در دستور else if بررسی می‌شود بدین صورت که مقادیر منتسب به متغیرهای مذکور به ترتیب بزرگ‌تر از 100 و 17 است یا خیر که در اینجا مقدار اختصاص‌یافته به متغیر intelligenceQuotient بزرگ‌تر از 100 نبوده از همین روی شرط کلی false ارزیابی شده و در نتیجه مفسر به سراغ اجرای دستورات مرتبط با else می‌رود و در نهایت استرینگ «.You have no discount» در کنسول چاپ می‌شود (با تغییر مقادیر منتسب به هر یک از متغیرهای مذکور می‌توانیم کلیۀ دستورات شرطی برنامه را مورد بررسی قرار دهیم.)به خاطر داشته باشیددر زبان برنامه‌نویسی جاوا می‌توان به تعداد دلخواه از دستورات else if در برنامه استفاده کرد که در نهایت نیز دستور else درج می‌شود تا در صورت برقرار نبودن شرط if و همچنین کلیۀ شروط تعیین‌شده در دستورات esle if، دستور مرتبط با else اجرا شود.

حال فرض کنیم که شرایط اِعمال تخفیف بر شهریۀ دانشجویان را تغییر می‌دهیم بدین صورت که دانشجویانی که میزان هوش بیش از 110 یا معدلی بالاتر از 18 دارند، تخفیف ٪۳۰ دریافت کرده و دانشجویانی که میزان هوش بیش از 100 یامعدلی بالاتر از 17 دارند نیز ٪۲۰ تخفیف دریافت می‌کنند (بدیهی است که برای  دانشجویانی که هیچ از یک شرایط فوق را ندارند، تخفیفی در نظر گرفته نمی‌شود.) در این مرحله برای پیاده‌سازی سناریوی جدید نیاز است تا کد برنامه را به صورت زیر بازنویسی نماییم: 

public class ElseIf {
    public static void main(String[] args) {
        double intelligenceQuotient = 100;
        double termMean = 17.3;
        if (intelligenceQuotient > 110 || termMean > 18) {
            System.out.println("You have 30 percent discount.");
        } else if (intelligenceQuotient > 100 || termMean > 17) {
            System.out.println("You have 20 percent discount.");
        } else {
            System.out.println("You have no discount.");
        }
    }
}

در کد فوق از عملگر || برای تعریف شرط برنامه استفاده کرده‌ایم که در آن گفته‌ايم چنانچه مقدار منتسب به متغير intelligenceQuotient بالاتر از 110 يا مقدار اختصاص‌يافته به متغير termMean بزرگ‌تر از 18 باشد، شرط كلیtrue ارزیابی شده و دستورات داخلی آن اجرا شده و استرینگ «.You have 20 percent discount» در کنسول چاپ می‌گردد اما در صورت برقرار نبودن دستور if دستور else if ارزیابی می‌شود تا اگر مقادیر منتسب به متغیرهای مذکور به ترتیب بالاتر از 100 یا بزرگ‌تر از 17 بودند، شرط مورد نظر true ارزیابی شده و دستورات داخلی آن مبنی بر چاپ استرینگی به صورت «.You have 20 percent discount» اجرا شده و در غیر این صورت هم دستورات داخلی else اجرا می‌گردد و در نهایت استرینگ مربوطه در کنسول نمایش داده می‌شود. بنابراین با اجرای کد فوق در خروجی خواهیم داشت:

You have 20 percent discount.

همان‌طور که می‌بینیم، دانشجویانی که در برنامۀ پیشین هیچ تخفیفی دریافت نمی‌کردند، با اِعمال شرایط جدید شامل ٪۲۰ تخفیف می‌شوند بدین معنی که اگر دانشجویی تنها یکی از شرایط میزان هوش بالای 110 یا معدل بالای 18 داشته باشد، تخفیف مد نظر را دریافت می‌کند اما در صورتی که معدلی بیشتر از 17 (و در عین حال کمتر از 18) یا میزان هوشی بیشتر 100 (و در عین حال کمتر از 110) داشته باشد، به مقدار ٪۲۰ تخفیف دریافت می‌کند و در نهایت فردی که هیچ یک از شرایط فوق را نداشته باشد، تخفیفی بر شهریۀ دانشگاهی‌اش اِعمال نمی‌گردد.

آشنایی با دستورات شرطی تودرتو در زبان جاوا

در قسمت پایانی این آموزش به توضیح Nested If Statements یا دستورات شرطی تودرتو می‌پردازیم. به طور کلی، دستورات شرطی تودرتو به یکسری دستور if و else تعریف‌شده داخل دستورات شرطی دیگر گفته می‌شود که در صورت برقرار نبودن برخی شرایط خاص بررسی شده و دستورات داخلی آن‌ها اجرا می‌گردند.

برای درک بهتر نحوۀ پیاده‌سازی دستورات شرطی تودرتو، سناریویی جدید در نظر می‌گیریم بدین صورت که سن کاربر را در برنامه تعریف کرده و بررسی می‌کنیم تا ببینیم چنانچه سن فرد بالاتر از 40 بود، استرینگی در قالب پیغام «سن شما بالاتر از 40 است» در کنسول نمایش داده شود و در غیر این صورت مجدداً شرطی تعریف می‌کنیم تا ببینیم چنانچه سن فرد کمتر از 20 بود، پیغام «سن شما کمتر از 20 است» و در غیر این صورت استرینگی مبنی بر «سن شما بالاتر از 20 است» در معرض دید وی قرار گیرد که برای پیاده‌سازی چنین سناریویی یک کلاس جدید تحت عنوان NestedIf داخل پروژۀ NestedIfStatement می‌سازیم که در ابتدا کدی به صورت زیر خواهیم داشت بدین صورت که با به‌کارگیری دیتا تایپ int متغیری تحت عنوان age تعریف کرده و عدد 30 را بدان منتسب نموده‌ایم:

public class NestedIf {
    public static void main(String[] args) {
        int age = 30;
    }
}

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

public class NestedIf {
    public static void main(String[] args) {
        int age = 30;
        if (age > 40) {
            System.out.println("You are older than 40.");
        } else {
            System.out.println("You are not older than 40.");
        }
    }
}

در کد فوق یک دستور شرطی تعریف کرده‌ایم تا مقدار منتسب به متغیر age را بررسی کند و چنانچه مقدار متغیر مذکور بیش از 40 بود، شرط برقرار بوده و دستورات داخلی آن اجرا می‌شود که در اینجا گفته‌ایم استرینگ «.You are older than40» در کنسول نمایش داده شود و در غیر این صورت دستورات داخلی else اجرا شده و استرینگی در قالب عبارت «.You are not older than 40» در کنسول چاپ شود. بنابراین با اجرای برنامۀ فوق خواهیم داشت:

You are not older than 40.

در واقع، با اجرای کد فوق، مقدار عدد 30 به متغیر age اختصاص یافته و در ادامه دستور if بررسی می‌شود که اگر مقدار متغیر مذکور بالاتر از 40 بود، استرینگ «.You are older than 40» در کنسول چاپ شود اما از آنجایی که مقدار متغیرage برابر با عدد 30 است، دستور if برابر با مقدار بولین false ارزیابی شده و دستورات مرتبط با else اجرا شده و استرینگ فوق در کنسول نمایش داده می‌شود.

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

public class NestedIf {
    public static void main(String[] args) {
        int age = 30;
        if (age > 40) {
            System.out.println("You are older than 40.");
        } else {
            System.out.println("You are not older than 40.");
            if (age < 20) {
                System.out.println("You are under 20.");
            } else {
                System.out.println("You are over 20.");
            }
        }
     }
}

با این تفاسیر، در صورتی که شرط مربوط به دستور if برقرار نباشد، دستورات مرتبط با else اجرا می‌شوند که بدین ترتیب استرینگ «.You are not older than 40»‌ چاپ شده و در ادامه یک دستور شرطی دیگر بررسی می‌گردد تا اگر مقدار منتسب به متغیر age بیشتر از 20 باشد، شرط true بوده و دستورات داخلی آن اجرا شوند و بدین ترتیب استرینگ «.You are under 20» و در غیر این صورت استرینگ «.You are over 20» در کنسول نمایش داده شود که با اجرای برنامۀ فوق در خروجی خواهیم داشت:

You are not older than 40.
You are over 20.

همان‌طور که می‌بینیم، شرط تعریف‌شده در دستور if برقرار نبوده و دستورات else اجرا می‌شوند که از همین روی در ابتدا استرینگ «.You are not older than 40»‌ در کنسول چاپ شده و در ادامه مجدداً بررسی می‌شود تا اگر مقدار متغیرage کمتر از 20 است، استرینگ مربوطه در کنسول نمایش داده شود اما مقدار منتسب به متغیر مذکور در مثال فوق برابر با عدد 30 می‌باشد و از همین روی شرط if برقرار نبوده و دستورات مرتبط با else اجرا شده و استرینگ مرتبط با آن در خروجی چاپ می‌گردد.


مطالب مرتبط

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *