آموزش جاوا- قسمت 3 (دستورات شرطی)

آموزش جاوا- قسمت 3 (دستورات شرطی)

جاوا برای بررسی عبارت‌های شرطی، از متغیرهای boolean استفاده می‌کند. نتیجه هر بررسی یا مقایسه در یک عبارت شرطی، مقدار true یا false است. به مثال زیر توجه کنید:

int a = 4;
boolean b = a == 4;

if (b) {
    System.out.println("It's true!");
}

در خط دوم از کد بالا، یک متغیر boolean به نام b تعریف شده است که مقدار اولیه آن، درواقع خروجی بررسی این است که آیا a برابر 4 است یا خیر. که چون در خط اول مقدار a را به 4 مقداردهی کرده بودیم، پس مقدار اولیه b به true مقداردهی می‌شود. حال با توجه به true بودن مقدار b، هنگام اجرای برنامه، وارد عبارت if شده و عبارت “It’s true!” در کنسول چاپ می‌شود.

البته لازم به ذکر است که مقدارهی یک عبارت شرطی به عبارت boolean به این صورت خیلی رایج نیست. معمولا از ساختار کوتاه زیر برای این کار استفاده می‌شود:

int a = 4;

if (a == 4) {
    System.out.println("Ohhh! So a is 4!");
}

عملگرهای boolean

خوشبختانه عملگرهای زیادی برای استفاده در عبارت‌های شرطی وجود ندارد و بیشتر آن‌ها خیلی ساده هستند که لیستی از آن‌ها در زیر قابل مشاهده است:

int a = 4;
int b = 5;
boolean result;
result = a < b; // true
result = a > b; // false
result = a <= 4; // a smaller or equal to 4 - true
result = b >= 6; // b bigger or equal to 6 - false
result = a == b; // a equal to b - false
result = a != b; // a is not equal to b - true
result = a > b || a < b; // Logical or - true
result = 3 < a && a < 6; // Logical and - true
result = !result; // Logical not - false

 

if-else

استفاده از if در جاوا بسیار ساده است:

if (a == b) {
    // a and b are equal, let's do something cool
}

همچنین می‌توان پس از if عبارت else را نیز برای حالتی که شرط if درست نباشد، به این صورت اضافه کرد:

if (a == b) {
    // We already know this part
} else {
    // a and b are not equal... :/
}

اگر عبارت داخل if-else را بتوان در یک خط نوشت، دیگر نیازی به {} نخواهید داشت:

if (a == b)
    System.out.println("Another line Wow!");
else
    System.out.println("Double rainbow!");

این روش برای کوتاه تر کردن کد بسیار مناسب است، هرچند برای کسانی که به تازگی کدنویسی جاوا را شروع کرده‌اند توصیه می‌شود که در اوایل کدنویسی خود از روش کوتاه استفاده نکرده و از نسخه کامل {} استفاده کنند. لازم به ذکر است که این قاعده برای هر عبارتی که بتوان آن را در یک خط خلاصه کرد، کاربرد دارد و تنها به عبارات if-else محدود نمی‌شود (for, while, …).

 

ساختار نه چندان زیبایی از if!

برای نوشتن عبارات if-else روش نه چندان دلچسبی نیز وجود دارد که خیلی رایج نیست اما به دلیل اینکه ممکن است در برخی برنامه‌های open source به چشمتان بخورد، نگفتن این نسخه از عبارت if-else ظلم بزرگی در حق شماست! بنابراین لازم است تا شما را با عملگر : ? آشنا کنیم:

int a = 4;
int result = a == 4 ? 1 : 8;

// result will be 1
// This is equivalent to
int result;

if (a == 4) {
    result = 1;
} else {
    result = 8;
}

مثال بالا یک مثال ساده برای یادگیری این نوع استفاده از if-else است، برای اینکه  کاربرد و نحوه استفاده از آن برای همیشه در خاطر شما بماند، بهتر است تا با ترجمه فارسی خط دوم از کد بالا آشنا شوید: “اگر a برابر 4 بود، result به عدد 1 مقداردهی شود، در غیراینصورت result به عدد 8 مقداردهی شود.”

مجددا لازم به ذکر است که برای افرادی که به تازگی کدنویسی جاوا را آغاز کرده‌اند، توصیه می‌شود که از این نسخه if استفاده نکنند.

 

== و equals

عملگر == در objectها و primitiveها  به دو شکل متفاوت عمل می‌کند (درمورد primitiveها در ابتدای قسمت دوم آموزش توضیح داده شده است). تا اینجا با کاربرد == در primitiveها و نحوه استفاده از آن‌ها آشنا شدید، اما لازم است بدانید زمانی که شما می‌خواهید برابر بودن دو object را بررسی کنید، عملگر == مشخص می‌کند که آیا آن دو object با یکدیگر برابر هستند یا خیر. در صورتی که قصد بررسی برابر بودن آن‌ها را از نظر منطقی دارید، باید از تابع equals استفاده کنید. برای اینکه بهتر متوجه شوید، به کد زیر توجه نمایید:

String a = new String("Wow");
String b = new String("Wow");
String sameA = a;

boolean r1 = a == b;      // This is false, since a and b are not the same object
boolean r2 = a.equals(b); // This is true, since a and b are logically equals
boolean r3 = a == sameA;  // This is true, since a and sameA are really the same object

 

تمرین:

به عنوان تمرینی برای این بخش از آموزش، تعریف متغیرهای کد زیر را به نحوی تغییر دهید تا عبارت داخل عبارت شرطی if اجرا شود:

public class Main {
    public static void main(String[] args) {
        String a = new String("Wow");
        String b = "Wow";
        String c = a;
        String d = c;

        boolean b1 = a == b;
        boolean b2 = b.equals(b + "!");
        boolean b3 = !c.equals(a);

        if (b1 && b2 && b3) {
            System.out.println("Success!");
        }
    }
}
برای انجام تمرین‌ این مبحث می‌توانید از یک IDE آنلاین مثل tutorialspoint استفاده کنید.

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

 

پاسخ تمرین آرایه‌ها:

برای این تمرین نیز مشابه تمرین قسمت قبل پاسخ‌های زیادی می‌توان نوشت. اما بد نیست تا شما را با یکی از راه‌حل‌ها هوشمندانه این تمرین آشنا کنیم:

public class Main {
    public static void main(String[] args) {
        Main a = new Main() {
            @Override
            public boolean equals(Object obj) {
                return true;
            }
        };

        Main b = a;

        Main c = new Main() {
            @Override
            public boolean equals(Object obj) {
                return false;
            }
        };

        boolean b1 = a == b;
        boolean b2 = b.equals(b + "!");
        boolean b3 = !c.equals(a);

        if (b1 && b2 && b3) {
            System.out.println("Success!");
        }
    }
}

تاریخچه آموزش جاوا به ترتیب:

قسمت اول آموزش جاوا (مقدمه)

قسمت دوم آموزش جاوا (Types and Variables)

قسمت سوم آموزش جاوا (دستورات شرطی)

قسمت چهارم آموزش جاوا (آرایه‌ها)

قسمت پنجم آموزش جاوا (حلقه‌ها)

قسمت ششم آموزش جاوا (توابع)

قسمت هفتم آموزش جاوا (اشیا)

قسمت هشتم آموزش جاوا (ارث‌بری)

قسمت نهم آموزش جاوا (try and catch)

قسمت دهم آموزش جاوا (کلاس‌های abstract)

قسمت یازدهم آموزش جاوا (Interfaces)

قسمت دوازدهم آموزش جاوا (مفهوم Generic)

قسمت سیزدهم آموزش جاوا (Networking)

قسمت چهاردهم آموزش جاوا (مفهوم نخ و رشته)

پاسخ دهید

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