در این مقاله به مفهوم انشعاب در برنامه های کامپیوتری به طور کلی و آنهایی که به زبان جاوا نوشته شده اند خواهیم پرداخت. بیایید در مورد ساختارهای کنترلی مانند:
if-then
(یاif
)if-then-else
(یاif-else
)switch-case
انشعاب
بیایید با مفاهیم اولیه شروع کنیم. هر برنامه مجموعه ای از دستورات است که توسط کامپیوتر اجرا می شود. اغلب دستورات به صورت متوالی و یکی پس از دیگری اجرا می شوند. کمی کمتر (اما هنوز هم اغلب) موقعیت هایی ایجاد می شود که شما نیاز به تغییر جریان متوالی دستورات برنامه دارید. گاهی اوقات، بسته به شرایط خاص، ممکن است لازم باشد که یک بلوک از دستورات را به جای دیگری اجرا کنیم. و وقتی این شرایط تغییر کرد، برعکس عمل کنید. به عنوان مثال، تعدادی سایت وجود دارد که بازدید از آنها برای افراد زیر 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 یک عبارت وجود دارد . این اپراتور نیز اختیاری است و برای متمایز کردن کد موارد مختلف عمل می کند. گاهی لازم است در موارد مختلف اعمال یکسان انجام شود: آنگاه می توان این موارد را با هم ترکیب کرد. در این حالت کلمه کلیدی حذف می شود و ساختار عملگر به این صورت خواهد بود: argument
value
argument
value2
statement2
default
default_statement
argument
value
default
default_statement
default
default_statement
switch-case
break
break
break
switch-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
GO TO FULL VERSION