Условные конструкции позволяют выполнять разный код, основываясь на логических проверках. Посмотрим на таком типичном примере:
Для примера напишем метод, который определяет тип переданного предложения. Для начала он будет отличать обычные предложения от вопросительных:
public static String getTypeOfSentence(String sentence) {
if (sentence.endsWith("?")) {
return "question";
}
return "general";
}
App.getTypeOfSentence("Hodor"); // "general"
App.getTypeOfSentence("Hodor?"); // "question"
if
— конструкция языка, управляющая порядком инструкций. В скобках ей передается логическое выражение, а затем описывается блок кода в фигурных скобках. Этот блок кода будет выполнен, только если условие выполняется.
Если условие не выполняется, то блок кода в фигурных скобках пропускается, и метод продолжает свое выполнение дальше. В нашем случае следующая строчка кода — return "general";
— заставит метод вернуть строку и завершиться.
Условная конструкция if
имеет несколько разновидностей. Одна разновидность включает в себя блок, который выполняется, если условие ложно:
if (x > 5) {
// Если условие true
} else {
// Если условие false
}
Такая структура может понадобиться при начальной инициализации значения. В примере ниже проверяется наличие email
. Если он отсутствует, то устанавливаем значение по умолчанию, если его передали, то выполняем нормализацию:
// Здесь приходит email
if (email.equals("")) { // Если email пустой, то ставим дефолт
email = "support@hexlet.io";
} else { // Иначе выполняем нормализацию
email = email.trim().toLowerCase();
}
// Здесь используем эту почту
Если ветка if
содержит return
, то else
становится не нужен — его можно просто опустить:
if (/* условие */) {
return /* какое-то значение */;
}
// Продолжаем что-то делать, потому что else не нужен
В самой полной версии конструкция if
содержит не только ветку else
, но и другие условные проверки с помощью else if
. Такой вариант используется при большом количестве проверок, которые взаимоисключают друг друга:
if (/* что-то */) {
} else if (/* другая проверка */) {
} else if (/* другая проверка */) {
} else {
}
Здесь стоит обратить внимание на два момента:
else
может отсутствоватьelse if
условий может быть любымНапишем для примера расширенный метод определяющий тип предложения. Он распознает три вида предложений:
App.getTypeOfSentence("Who?"); // "Sentence is question"
App.getTypeOfSentence("No"); // "Sentence is general"
App.getTypeOfSentence("No!"); // "Sentence is exclamation"
public static String getTypeOfSentence(String sentence)
{
var sentenceType = "";
if (sentence.endsWith("?")) {
sentenceType = "question";
} else if (sentence.endsWith("!")) {
sentenceType = "exclamation";
} else {
sentenceType = "general";
}
return "Sentence is " + sentenceType;
}
https://replit.com/@hexlet/java-basics-if-else
Теперь все условия выстроены в единую конструкцию. Оператор else if
— это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:
?
, то "question"!
, то "exclamation"В итоге выполнится только один из блоков кода, относящихся ко всей конструкции if
.
Посмотрите на определение метода, который возвращает модуль переданного числа:
// Если больше нуля, то выдаем само число. Если меньше, то убираем знак
public static int abs(int number) {
if (number >= 0) {
return number;
}
return -number;
}
App.abs(10); // 10
App.abs(-10); // 10
В Java существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор.
Тернарный оператор — единственный в своем роде оператор, требующий три операнда. Он помогает писать меньше кода для простых условных выражений. Наш пример выше с тернарным оператором превращается в три строки кода:
public static int abs(int number) {
return number >= 0 ? number : -number;
}
Общий шаблон выглядит так:
<predicate> ? <expression on true> : <expression on false>
То есть сначала мы записываем логическое выражение, а дальше два разных варианта поведения:
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт