JavaRush /وبلاگ جاوا /Random-FA /انشعاب در جاوا

انشعاب در جاوا

در گروه منتشر شد
در این مقاله به مفهوم انشعاب در برنامه های کامپیوتری به طور کلی و آنهایی که به زبان جاوا نوشته شده اند خواهیم پرداخت. بیایید در مورد ساختارهای کنترلی مانند:
  • if-then(یا if)
  • if-then-else(یا if-else)
  • switch-case
انشعاب در جاوا - 1

انشعاب

بیایید با مفاهیم اولیه شروع کنیم. هر برنامه مجموعه ای از دستورات است که توسط کامپیوتر اجرا می شود. اغلب دستورات به صورت متوالی و یکی پس از دیگری اجرا می شوند. کمی کمتر (اما هنوز هم اغلب) موقعیت هایی ایجاد می شود که شما نیاز به تغییر جریان متوالی دستورات برنامه دارید. گاهی اوقات، بسته به شرایط خاص، ممکن است لازم باشد که یک بلوک از دستورات را به جای دیگری اجرا کنیم. و وقتی این شرایط تغییر کرد، برعکس عمل کنید. به عنوان مثال، تعدادی سایت وجود دارد که بازدید از آنها برای افراد زیر 18 سال ممنوع است. معمولاً هنگام بازدید از چنین منبعی برای اولین بار، با فرمی از کاربر استقبال می شود که در آن به کاربر در مورد محدودیت سنی هشدار داده می شود و از او خواسته می شود تاریخ تولد خود را وارد کند. سپس بسته به داده هایی که کاربر وارد کرده است، یا اجازه ورود به منبع را خواهد داشت یا خیر. این قابلیت توسط چیزی که معمولاً شاخه‌بندی نامیده می‌شود ارائه می‌شود. بیایید یک قیاس دیگر ارائه دهیم. بیایید خود را در چهارراه هفت راه تصور کنیم. ما با یک انتخاب روبرو هستیم: به چپ یا راست بپیچید یا مستقیم بروید. انتخاب ما بر اساس شرایط خاصی است. همچنین فرصت نداریم همزمان چندین جاده را طی کنیم. آن ها بسته به برخی شرایط، باید یک جاده را انتخاب کنیم. همین اصل در مورد انشعاب نیز صدق می کند. حال سعی می کنیم تعریفی از انشعاب ارائه دهیم. انشعاب یک ساختار الگوریتمی است که در آن بسته به صحت یک شرط، یکی از چندین توالی عمل انجام می شود. Branching (به احتمال زیاد) در تمام زبان های برنامه نویسی پیاده سازی شده است. زبان برنامه نویسی جاوا دارای چندین ساختار به اصطلاح کنترلی است که به شما امکان می دهد شاخه بندی را در برنامه خود پیاده سازی کنید. 3 ساختار از این قبیل در زبان برنامه نویسی وجود دارد:
  • اپراتورif-then
  • اپراتورif-then-else
  • اپراتور سه تایی? :
if-elseدر این مقاله به عملگرها و نگاه خواهیم کرد switch-case.

اگر پس از آن

اپراتور if-then، یا به سادگی ifشاید رایج ترین اپراتور. عبارت "بله، بنویسید 1 اگر" قبلاً رایج شده است. اپراتور ifدارای ساختار زیر است:
if (bool_condition) {
	statement
}
در این طرح:
  • bool_conditionیک عبارت بولی است که به درست یا نادرست ارزیابی می شود. این عبارت شرط نامیده می شود.
  • statement- یک دستور (ممکن است بیش از یک وجود داشته باشد) که اگر شرط درست باشد باید اجرا شود ( bool_statement==true)
این ساخت و ساز را می توان اینگونه خواند:

Если (bool_condition), то {statement}
در اینجا چند نمونه آورده شده است:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
در این برنامه از کاربر خواسته می شود تا درصد شارژ باتری گوشی هوشمند خود را وارد کند. اگر کمتر از 10 درصد شارژ باقی بماند، برنامه در مورد نیاز به شارژ گوشی هوشمند به کاربر هشدار می دهد. این نمونه ای از ساده ترین طراحی است if. شایان ذکر است که اگر متغیر "a" بزرگتر یا مساوی 10 باشد، هیچ اتفاقی نمی افتد. برنامه به اجرای کدی که به دنبال آن است ادامه خواهد داد if. همچنین توجه داشته باشید که در این مورد، ساختار ifفقط یک دنباله از اقدامات برای اجرا دارد: متن را چاپ کنید یا کاری انجام ندهید. این یک نوع انشعاب با یک "شاخه" است. این گاهی اوقات لازم است. به عنوان مثال، زمانی که می خواهیم از خود در برابر ارزش های نادرست محافظت کنیم. برای مثال، اگر رشته باشد، نمی‌توانیم تعداد حروف یک رشته را بفهمیم null. نمونه های زیر:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
در نتیجه اجرای متد اصلی، موارد زیر به کنسول خروجی می شود:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
به لطف بررسی آن string != null، ما توانستیم از خطاهای برنامه جلوگیری کنیم. و در مواردی که متغیر stringبرابر با null.

اگر-پس-دیگر

اگر در حالت معمول ifبرنامه انتخابی داشته باشد: «کاری انجام بده یا کاری نکن»، در if-elseانتخاب یک برنامه به «انجام یک کار یا آن کار» ختم می‌شود. گزینه "هیچ کاری" ناپدید می شود. دو یا چند نوع اجرا (یا تعداد شاخه) با این نوع انشعاب وجود دارد. بیایید زمانی که دو گزینه وجود دارد مورد را در نظر بگیریم. سپس ساختار کنترل به شکل زیر است:
if (bool_condition) {
	statement1
} else {
	statement2
}
اینجا:
  • bool_statementیک عبارت بولی است که به درست یا نادرست ارزیابی می شود. این عبارت شرط نامیده می شود.
  • statement1- یک دستور (ممکن است بیش از یک وجود داشته باشد) که اگر شرط درست باشد باید اجرا شود ( bool_statement==true)
  • statement2- یک دستور (ممکن است بیش از یک وجود داشته باشد) که در صورت نادرست بودن شرط باید اجرا شود ( bool_statement==false)
این ساخت و ساز را می توان اینگونه خواند:

Если (bool_condition), то {statement1}
Иначе {statement2}
در اینجا یک مثال است:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
همین مثال در مورد سطح باتری گوشی هوشمند. فقط اگر آخرین بار برنامه فقط در مورد نیاز به شارژ گوشی هوشمند هشدار داده باشد، این بار یک اعلان اضافی داریم. بیایید به این یکی نگاه کنیم if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
اگر a < 10درست باشد (سطح باتری کمتر از 10)، برنامه یک متن را چاپ می کند. در غیر این صورت، اگر شرط a < 10برآورده نشود، برنامه متن کاملا متفاوتی را خروجی می دهد. اجازه دهید مثال دوم خود را نیز نهایی کنیم، که در آن تعداد حروف را در یک خط نمایش می دهیم. دفعه قبل اگر رشته پاس شده برابر بود، برنامه هیچ خروجی نداشت null. بیایید با تبدیل حالت عادی ifبه این مشکل برطرف کنیم if-else:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
در متد یک بلوک printStringSizeبه ساختار ifاضافه کردیم else. حالا اگر برنامه را اجرا کنیم، نه 2 خط، بلکه 4 خط به کنسول خروجی می دهد، البته ورودی (روش main) مانند دفعه قبل باقی می ماند. متنی که برنامه خروجی خواهد گرفت:

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
موقعیت‌ها زمانی قابل قبول هستند که elseنه دستورات اجرا، بلکه توسط دیگری دنبال شوند if. سپس ساخت و ساز به شکل زیر است:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
این طرح چند شرط دارد:
  • bool_condition1
  • bool_condition2
  • bool_conditionN
تعداد چنین شرایطی محدود نیست. هر شرط دستورات خاص خود را دارد:
  • بیانیه 1
  • بیانیه 2
  • بیانیهN
هر کدام statementمی تواند شامل 1 یا چند خط کد باشد. شرایط یک به یک بررسی می شود. هنگامی که اولین شرط واقعی مشخص شد، یک سری دستورات "گره خورده" به شرط واقعی اجرا می شود. پس از اجرای این دستورات، برنامه از بلوک خارج می شود if، حتی اگر بررسی های بیشتری در پیش باشد. عبارت "statementN+1" در صورتی اجرا می شود که هیچ یک از شرایط تعریف شده در بالا درست نباشد. این ساختار را می توان اینگونه خواند:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
خط آخر در این مورد اختیاری است. شما می توانید بدون آخرین تنها else. و سپس طرح به شکل زیر خواهد بود:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
و اینگونه خواهد خواند:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
بر این اساس، اگر هیچ یک از شرایط درست نباشد، یک فرمان اجرا نمی شود. بیایید به سراغ مثال ها برویم. بیایید به وضعیت سطح شارژ گوشی هوشمند برگردیم. بیایید برنامه ای بنویسیم که مالک را با جزئیات بیشتری از میزان شارژ دستگاه خود مطلع می کند:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное meaning";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
به عنوان مثال، در این حالت، اگر کاربر عدد 15 را وارد کند، برنامه روی صفحه نمایش داده می شود: "وقت آن است که به یاد بیاورید شارژر کجاست." با وجود این که 15 کمتر است و 30 و 50 و 75 و 100، خروجی روی صفحه فقط 1 خواهد بود. بیایید برنامه دیگری بنویسیم که در چه روزی از هفته در کنسول چاپ می کند:
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
البته راحت است، اما فراوانی متن های یکنواخت کمی چشمان شما را خیره می کند. در شرایطی که تعداد گزینه های زیادی داریم بهتر است از اپراتور استفاده کنیم که در ادامه به آن پرداخته خواهد شد.

سوئیچ کیس

یک جایگزین برای بولد ifبا تعداد زیادی شاخه، عملگر است switch-case. به نظر می رسد این عملگر می گوید "پس، ما این متغیر را داریم. ببینید، اگر مقدار آن برابر با «x» باشد، این کار را انجام می دهیم و آن را، اگر مقدار آن برابر با «y» باشد، آن را به طور متفاوت انجام می دهیم، و اگر با هیچ یک از موارد بالا برابر نباشد، فقط انجام می دهیم. به این صورت... ” این عملگر ساختار زیر را دارد.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
بیایید این ساختار را با جزئیات بیشتری بررسی کنیم. argument متغیری است که مقدار آن را با گزینه های مختلف فرضی مقایسه می کنیم. متغیر باید باشد final. همچنین شایان ذکر است که اپراتور switchاز هیچ نوع داده ای به عنوان آرگومان پشتیبانی نمی کند. انواع معتبر در زیر لیست شده است:
  • بایت و بایت
  • کوتاه و کوتاه
  • int و عدد صحیح
  • کاراکتر و شخصیت
  • enum
  • رشته
case value1 (value2, valueN)- اینها مقادیر، ثابت های خاصی هستند که مقدار یک متغیر را با آنها مقایسه می کنیم argument. همچنین هر مورد مجموعه ای از دستورات را تعریف می کند که باید اجرا شوند. statement1، ، statement2دستوراتی هستند که اگر برابر با یکی از آنها مشخص شود statementNباید اجرا شوند . به عنوان مثال، اگر برابر باشد ، برنامه اجرا می شود . و "مقادیر پیش فرض" هستند. اگر با هیچ یک از موارد ارائه شده برابر نباشد ، شاخه فعال می شود و دستور اجرا می شود . و ویژگی های اختیاری اپراتور هستند . - می توانید متوجه شوید که در پایان هر بلوک case یک عبارت وجود دارد . این اپراتور نیز اختیاری است و برای متمایز کردن کد موارد مختلف عمل می کند. گاهی لازم است در موارد مختلف اعمال یکسان انجام شود: آنگاه می توان این موارد را با هم ترکیب کرد. در این حالت کلمه کلیدی حذف می شود و ساختار عملگر به این صورت خواهد بود: argumentvalueargumentvalue2statement2defaultdefault_statementargumentvaluedefaultdefault_statementdefaultdefault_statementswitch-casebreakbreakbreakswitch-case
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
شایان ذکر است که هیچ عملگر بین «case valueX:» و «case valueY:» وجود ندارد break. در اینجا، اگر argumentبرابر باشد value1، اجرا می شود statement1. و اگر برهان برابر با valueXیکی باشد valueY. statementXYبیایید تئوری دشوار درک را به عملی آسان برای درک تبدیل کنیم. بیایید مثال را با روزهای هفته با استفاده از عملگر بازنویسی کنیم switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
حالا بیایید برنامه ای بنویسیم که با استفاده از عملگر نشان دهد که آیا امروز یک روز هفته است یا آخر هفته switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
بگذارید کمی توضیح دهم. در این برنامه ما دریافت می کنیم enum DayOfWeekکه نشان دهنده روز جاری هفته است. در مرحله بعد، ما به دنبال این هستیم که ببینیم آیا مقدار متغیر ما با dayOfWeekمقادیر SUNDAYهر کدام برابر است یا خیر SATURDAY. در این صورت، برنامه "امروز یک روز تعطیل است" را نمایش می دهد. اگر نه، بررسی می کنیم که آیا مقدار متغیر برابر با dayOfWeekمقدار است یا خیر FRIDAY. در این صورت، برنامه "فردا یک روز تعطیل است" را نمایش می دهد. اگر در این مورد وجود نداشته باشد، گزینه های کمی داریم، هر روز باقی مانده یک روز هفته است، بنابراین به طور پیش فرض، اگر امروز جمعه نیست، شنبه نیست و یکشنبه نیست، برنامه "امروز یک روز کاری است" را نمایش می دهد.

نتیجه

بنابراین، در این مقاله به بررسی انشعاب در یک برنامه کامپیوتری پرداختیم. ما همچنین متوجه شدیم که از چه ساختارهای کنترلی برای اجرای انشعاب در جاوا استفاده می شود. ما در مورد طرح هایی مانند:
  • if-then
  • if-then-else
  • switch-case
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION