Перейти к содержанию

Управляющие структуры в Java

В самом простом смысле программа представляет собой список инструкций. Управляющие структуры – это программные блоки, которые могут изменить путь, по которому проходим через эти инструкции.

В этом руководстве рассмотрим управляющие структуры в Java.

Существует три вида управляющих структур:

  • Условные ветки, которые используются для выбора между двумя или более путями. В Java есть три типа: if/else/else if, тернарный оператор и switch (переключатель).
  • Циклы, которые используются для перебора нескольких значений/объектов и повторного запуска определенных блоков кода. Основными типами циклов в Java являются for, while и do while.
  • Операторы ветвления, которые используются для изменения потока управления в циклах. В Java есть два типа: break и continue.

If/Else/Else If

Оператор if/else является самой простой управляющей структурой, но его также можно считать основой для принятия решений в программировании. Хотя if можно использовать сам по себе, наиболее распространенным сценарием использования является выбор между двумя путями с помощью if/else:

if (count > 2) {
    System.out.println("Число больше 2");
} else {
    System.out.println("Число меньше или равно 2");
}

Теоретически можно бесконечно сцеплять или вкладывать блоки if/else, но это ухудшит читаемость кода, и поэтому это не рекомендуется.

Рассмотрим альтернативные варианты в оставшейся части этой статьи.

Тернарный оператор

Можно использовать тернарный оператор в качестве сокращенного выражения, которое работает как оператор if/else.

Давайте снова посмотрим на пример if/else:

if (count > 2) {
    System.out.println("Число больше 2");
} else {
    System.out.println("Число меньше или равно 2");
}

Можно реорганизовать его с помощью тернарного оператора следующим образом:

System.out.println(count > 2 ? "Число больше 2" : "Число меньше или равно 2");

Хотя тернарный оператор может стать отличным способом сделать код более читабельным, он не всегда является хорошей заменой if/else.

Переключатель (switch)

Если есть несколько случаев на выбор, можно использовать оператор switch.

Посмотрим на простой пример:

int count = 3;
switch (count) {
case 0:
    System.out.println("Число равно 0");
    break;
case 1:
    System.out.println("Число равно 1");
    break;
default:
    System.out.println("Число либо отрицательное, либо больше 1");
    break;
}

Три или более оператора if/else могут быть трудночитаемыми. В качестве одного из возможных обходных путей можно использовать переключатель, как показано выше.

Имейте в виду, что переключатель имеет область действия и ограничения ввода, которые нужно помнить перед его использованием.

Циклы (loops)

Мы используем циклы, когда нужно повторить один и тот же код несколько раз подряд.

Посмотрим на быстрый пример сопоставимых циклов for и while:

for (int i = 1; i <= 50; i++) {
    methodToRepeat();
}

int whileCounter = 1;
while (whileCounter <= 50) {
    methodToRepeat();
    whileCounter++;
}

Оба вышеприведенных блока кода вызывают methodToRepeat 50 раз.

Завершение (break)

Break используется для выхода из цикла.

Посмотрим на краткий пример:

List<String> names = getNameList();
String name = "John Doe";
int index = 0;
for ( ; index < names.length; index++) {
    if (names[index].equals(name)) {
        break;
    }
}

Здесь ищем имя в списке имен и хотим прекратить поиск, как только найдем его.

Цикл обычно завершается, но здесь используем break, чтобы завершить его и выйти раньше.

Продолжение (continue)

Проще говоря, continue означает пропустить оставшуюся часть цикла, в котором находимся:

List<String> names = getNameList();
String name = "John Doe";
String list = "";
for (int i = 0; i < names.length; i++) { 
    if (names[i].equals(name)) {
        continue;
    }
    list += names[i];
}

Здесь пропускаем добавление повторяющихся имен в список.

Как видим, операторы break и continue могут быть удобны при итерации, хотя их часто можно переписать с помощью оператора return или другой логики.

Заключение

Из этой краткой статьи мы узнали, что такое управляющие структуры и как их использовать для управления потоком данных в программах на Java.

Код, представленный в этой статье, доступен на GitHub.

Оригинал