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