JavaRush /Java блогы /Random-KK /Java тілінде тармақталу

Java тілінде тармақталу

Топта жарияланған
Бұл мақалада біз жалпы компьютерлік бағдарламалардағы және Java тілінде жазылғандардағы тармақталу түсінігін қарастырамыз. Басқару құрылымдары туралы сөйлесейік, мысалы:
  • if-then(немесе if)
  • if-then-else(немесе if-else)
  • switch-case
Java тілінде тармақталу - 1

Тармақтану

Негізгі ұғымдардан бастайық. Кез келген программа – компьютерде орындалатын командалар жиынтығы. Көбінесе командалар кезекпен, бірінен соң бірі орындалады. Бағдарлама пәрмендерінің дәйекті ағынын өзгерту қажет болғанда, біршама сирек (бірақ өте жиі) жағдайлар туындайды. Кейде белгілі бір шарттарға байланысты басқасының орнына командалардың бір блогын орындау қажет болуы мүмкін. Ал бұл шарттар өзгерген кезде, керісінше әрекет жасаңыз. Мысалы, 18 жасқа толмаған адамдардың кіруіне тыйым салынған бірқатар сайттар бар. Әдетте, мұндай ресурсқа бірінші рет кіргенде, пайдаланушы жас шектеуі туралы ескертілетін және оның туған күнін енгізуді сұрайтын қандай да бір пішінмен қарсы алады. Содан кейін, пайдаланушы енгізген деректерге байланысты ол ресурсқа кіруге рұқсат етіледі немесе жоқ. Бұл функция әдетте тармақталу деп аталатын нәрсе арқылы қамтамасыз етіледі. Тағы бір ұқсастық келтірейік. Өзімізді жеті жолдың торабында елестетейік. Біз таңдау алдында тұрмыз: солға немесе оңға бұрылыңыз немесе түзу жүріңіз. Біздің таңдауымыз белгілі бір шарттарға негізделген. Бізде де бір мезгілде бірнеше жол жүруге мүмкіндік жоқ. Анау. кейбір шарттарға байланысты бір жолды таңдауға тура келеді. Дәл осындай принцип тармақталуға да қатысты. Енді тармақталуға анықтама беруге тырысайық. Тармақталу - бұл қандай да бір шарттың ақиқатына байланысты бірнеше әрекеттер тізбегінің бірі орындалатын алгоритмдік құрылыс. Тармақтандыру (ең алдымен) барлық бағдарламалау тілдерінде жүзеге асырылады. Java бағдарламалау тілінде бағдарламада тармақталуды жүзеге асыруға мүмкіндік беретін бірнеше басқару құрылымдары бар. Бағдарламалау тілінде мұндай 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-нан үлкен немесе оған тең болса, онда ештеңе болмайды. Бағдарлама келесі codeты орындауды жалғастырады 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_шарт1
  • bool_шарт2
  • bool_шартN
Мұндай шарттар саны шектелмейді. Әрбір шарттың өз командалары бар:
  • мәлімдеме 1
  • мәлімдеме 2
  • мәлімдеме Н
Олардың әрқайсысы statement1 немесе одан да көп code жолын қамтуы мүмкін. Шарттар бірінен соң бірі тексеріледі. Бірінші шынайы шарт анықталғаннан кейін, шынайы шартқа «байланған» командалар қатары орындалады. ifОсы пәрмендерді орындағаннан кейін, алда тағы тексерулер болса да, бағдарлама блоктан шығады . Жоғарыда анықталған шарттардың ешқайсысы ақиқат болмаса, «операцияN+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Оператор дәлел ретінде ешқандай деректер түрін қолдамайтынын да айта кеткен жөн . Жарамды түрлері төменде берілген:
  • byte және byte
  • қысқа және қысқа
  • int және Integer
  • таңба және таңба
  • enum
  • Жол
case value1 (value2, valueN)- бұл мәндер, айнымалының мәнін салыстыратын нақты тұрақтылар argument. Сондай-ақ, әрбір жағдай орындалуы қажет командалар жинағын анықтайды. statement1, statement2, - біреуіне тең болып шықса, statementNорындалуы қажет командалар . Мысалы, егер ол -ге тең болса , онда бағдарлама орындалады . және «әдепкі мәндер» болып табылады. Егер ол ұсынылғандардың ешқайсысына тең болмаса , онда тармақ іске қосылады және команда орындалады . және оператордың қосымша атрибуттары болып табылады . — әрбір кейс блогының соңында мәлімдеме бар екенін байқауға болады . Бұл оператор да қосымша болып табылады және әртүрлі жағдайлардың codeын саралау үшін қызмет етеді. Кейде әртүрлі жағдайларда бірдей әрекеттерді орындау қажет: содан кейін бұл жағдайларды біріктіруге болады. Бұл жағдайда кілт сөз алынып тасталады және оператордың құрылымы келесідей болады: 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мәндеріне тең екендігін тексереміз . Олай болса, бағдарламада «Бүгін демалыс күні» көрсетіледі. Егер жоқ болса, онда айнымалы мәннің мәніне тең екендігін тексереміз . Олай болса, бағдарлама «Ертең демалыс күні» деп көрсетеді. Егер бұл жағдайда жоқ болса, онда бізде бірнеше опция бар, қалған кез келген күн жұмыс күні, сондықтан әдепкі бойынша, егер бүгін жұма ЕМЕС, сенбі ЕМЕС және жексенбі ЕМЕС болса, бағдарлама «Бүгін жұмыс күні» көрсетеді. SUNDAYSATURDAYdayOfWeekFRIDAY

Қорытынды

Сонымен, осы мақалада біз компьютерлік бағдарламада тармақталу деген не екенін қарастырдық. Біз сондай-ақ Java-да тармақталуды жүзеге асыру үшін қандай басқару құрылымдары қолданылатынын анықтадық. Біз дизайнды талқыладық, мысалы:
  • if-then
  • if-then-else
  • switch-case
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION