Как сделать условие на java

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

При написании программ бывает необходимость что-то с чем-то сравнивать, и исходя от полученного сравнения производить дальнейшие действия. Например, нахождение корней квадратного уравнения. Если дискриминант меньше нуля, то корней нет, если равен нулю, то корень один, а если больше нуля, то корней два.

Все эти сравнения ни что иное, как логические операции сравнения. В логике есть лишь два значения:

Правильно говорить, что в случае выполнения логического условия условный оператор возвращает истину, а в случае невыполнения логического условия условный оператор возвращает ложь.

Возвращение — это получение ответа от логического условия, ответ всегда однозначен (либо true, либо false).
Возвращение, возвращает, вернёт — это всё синонимы одного и того же.

В языке программирования Java существует три условных оператора:

  1. if() — если…, оно же основное логическое условие;
  2. else if() — альтернативное условие, выполняется если не выполнилось основное;
  3. else — иначе…, выполняется в случае, если ни одно из вышеприведённых условий не было выполнено.

В круглых скобках указывается логическое условие. В else круглые скобки не требуются, так как это условие выполняется в случае, если ни одно из условий выполнено не было.

Условные операторы помещаются в условный блок.

Условный блок — это контейнер, содержащий в себе набор условных операторов и логических выражений.

Условных блоков (контейнеров) в программе может быть сколько угодно.

Для каждого условного блока существуют следующие правила:

  1. if() — только один и является обязательным, требуется логическое выражение в скобках;
  2. else if() — сколько угодно и обязательным не является, требуется логическое выражение в скобках;
  3. else — только один и обязательным не является, логическое выражение не требуется;

Реализация

При написании логических выражений, которыми оперирует условный оператор, нужно использовать специально отведённые для этого символы и всегда придерживаться правила «Что-то нужно сравнивать с чем-то«. Пустоту с переменной сравнить нельзя. Нельзя сделать омлет не разбив пары яиц. При сравнении двух значений обязательно должно существовать первое значение и второе значение.

Для создания логического выражения используются следующие символы:

  1. == (равно);
  2. > (больше);
  3. = (больше, либо равно);
  4. Условные операторы в Java

На седьмом уроке из серии уроков по основам Java мы будем обсуждать булевы и условные операторы в Java.

Логические значения

Логическое значение – это примитивный тип данных, который хранит одно из двух значений, true или false. Название происходит от изобретателя, Джорджа Буля, который очень подробно обсуждал идею булева уравнения. В Java мы можем использовать булевы выражения для создания условий и выполнения блоков кода, основанных на этих условиях. Чтобы проиллюстрировать эту идею, представьте себе ситуацию, которую большинство из нас испытывает каждый день. Когда ваш будильник зазвенит утром, то, легли ли вы спать рано или поздно, вы можете решить, вставать или нажимать кнопку повтора. Если вы рано легли спать, это можно считать логическим значением, но для того, чтобы код решил, какое из этих двух действий вы должны выполнить, вам нужны условные операторы.

Условные инструкции

Условные операторы определяют условия, которые являются истинными или ложными, а затем выполняются в зависимости от того, является ли условие истинным. В основном, условия говорят:”Если x истинно, то выполните y". Эта логика называется "если-утверждение".

Во всех языках программирования это if-оператор является самым мощным и важным оператором, поскольку он позволяет программе каждый раз выполняться по-разному. Для демонстрации, если мы создадим логический isMonday и логический isRaining и установим их оба в true, у нас может быть оператор if, который проверяет это, а затем вызывает drinkBeer(), если оба они истинны. В конце концов, что еще можно сделать в дождливый понедельник?

Проверка истинности обоих условий выполняется с помощью символа “&&". Если оба условия верны, то метод drinkBeer() будет выполняться. Мы также можем проверить, верно ли только одно из условий:

Оператор if в примере выше говорит: “Если сегодня понедельник или идет дождь, то пейте пиво". Оператор || - это оператор OR. Теперь, если идет дождь или это понедельник, метод drinkBeer() будет выполнен.

Короткое замыкание

Одним из интересных аспектов сложных if-утверждений является идея короткого замыкания. Как мы уже обсуждали ранее, в операторе AND, если оба условия верны, будет выполняться метод drinkBeer(). Однако, если первое условие ложно, оператор if будет "замыкать цепь" и не будет выполнять код без проверки второго логического значения. Если бы логическое число isMonday было истинным, а логическое число isRaining - ложным, вы бы с волнением отметили, что сегодня понедельник, но поскольку дождя не было, вы все равно не могли бы пить пиво.

То же самое справедливо и для оператора OR. Если первое условие истинно, то проверка второго условия не требуется, так как код внутри условного условия будет выполняться независимо от того, истинно ли второе условие.

Сложные выражения

Наши "если-утверждения" также могут быть значительно усложнены путем усложнения различных условий. Логика работает, оценивая условия в нескольких уровнях скобок, а затем оценивая условия только в одном наборе скобок. Логика также проверяет условия слева направо. Прежде чем продолжить чтение, посмотрите, сможете ли вы выяснить, будет ли метод drinkBeer() выполняться в примере ниже.

Хорошо, давайте посмотрим на первое условие, "isMonday & & isRaining" – это false. После этого вы можете видеть, что у нас есть оператор OR между двумя наборами условий, поэтому оператор if должен проверить второе условие. Итак, давайте сделаем так: "isTuesday & & isSunny". Это тоже ложь, потому что сегодня вторник, но не солнечно. Поскольку ни одно из условий не истинно, все утверждение ложно, и мы не можем пить пиво.

  1. Любые условные обозначения внутри скобок
  2. Любые AND символы
  3. Любые символы OR

Утверждение Else

Теперь я познакомлю вас с аналогом “if-утверждения”: “else statement”. Скажем, сегодня не понедельник, так что мы не можем пить пиво, но нам все равно нужно пить жидкость. Мы могли бы сказать: "если сегодня понедельник, пейте пиво; в противном случае пейте молоко.”

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

На твоем месте мне бы надоело пить молоко шесть дней в неделю. Но в то же время я не хочу пить пиво чаще одного раза в неделю. Именно здесь вступает в действие последнее условное утверждение: утверждение else-if. Еще если проверяет условие, если если-утверждение ложно. Вы также можете иметь несколько "else if", которые выполняются, если все предыдущие операторы ложны. В конце всех этих утверждений вы можете получить ваше утверждение “else", которое все еще выполняется во всех других случаях, что означает, что все остальные утверждения были ложными. Давайте рассмотрим пример, где по пятницам мы пьем воду:

Использование условных выражений с другими примитивными типами данных

Мы не только можем использовать условные операторы, чтобы проверить, является ли булева переменная истинной или ложной, но мы также можем создать булеву с помощью условия и оценить ее. Например, мы могли бы иметь два int, i и j со значениями 4 и 3 соответственно. Мы можем сравнить их, используя следующие символы:

Вы можете заметить, что оператор для сравнения - это оператор двойное равно, а не одинарное. Это происходит потому, что ‘=’ уже имеет применение: он используется для присвоения значений примитивным типам данных и для присвоения объектов ссылочным переменным. Поэтому, чтобы избежать путаницы как для программиста, так и для компилятора, = = используется для сравнения равенства.

'!=' означает "не равный". Вообще "!" перед любым булевым значением будет отрицаться его значение. Из этого следует, что мы будем читать: "!true" как "не true" , что эквивалентно false. Мы читаем !false как "не false", следовательно, она будет эквивалентна true.

Если вы посмотрите на приведенный ниже пример, то увидите, что условные обозначения можно использовать для сравнения значений по-разному. Очевидно, поскольку мы знаем значения, присвоенные i и j, это не очень полезно, но если бы эти значения были динамически заданы в качестве параметра метода, то эти условные обозначения были бы полезны.

Применение условных операторов

Возможно, у вас еще нет навыков создания более сложных условных операторов, но вы все еще можете применять условные выражения к некоторым полезным примерам. Допустим, у нас есть наши значения i и j, но теперь мы хотим увеличить значение j, Если это понедельник. Мы не будем увеличиваться в каждом случае; мы делаем это только в том случае, если наше условие выполнено. Мы можем делать и другие вещи, которые могут быть полезны при определенных условиях.

Условные выражения предоставляют Java-коду средства, позволяющие реагировать по-разному в зависимости от различных внешних условий. Это чрезвычайно гибкие и мощные инструменты, которые вы будете продолжать использовать по мере того, как будете изучать все больше и больше Java.

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

Вот что означает “управление потоком” – руководство выполнением нашей программы, вместо того, чтобы позволять ей выполняться построчно независимо от каких-либо внутренних или внешних факторов. Каждый язык программирования поддерживает ту или иную форму управления потоком, если не явно с помощью if s и для s или аналогичных операторов – тогда он неявно предоставляет нам инструменты для создания таких конструкций, т. Е. Языки программирования низкого уровня обычно достигают того, что влияет на множество команд go-to .

Циклы были концепцией, используемой задолго до того, как компьютерное программирование вообще стало чем – то, но первым человеком , использовавшим программный цикл, была Ада Лавлейс, широко известная под своей девичьей фамилией Байрон, при вычислении чисел Бернулли , еще в 19 веке.

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

В Java существует несколько способов управления потоком кода:

  • утверждения if и if-else
  • операторы переключения
  • операторы while и do-while
  • для и улучшено для заявлений
  • прервите и продолжите выступления

Заявление if

Оператор if , вероятно, является наиболее распространенной формой управления потоком, независимо от языка. Это очень просто и интуитивно понятно:

Поскольку во многих случаях требуется выполнить только одну строку, вы можете пропустить использование фигурных скобок и блока кода и просто сделать отступ в следующей строке, хотя это работает только для одной строки :

Как правило, мы не вводим логические значения, как в этих примерах, а скорее используем выражение:

Если выражение false , код, принадлежащий оператору if , просто пропускается:

И результат таков:

Оператор if-else

Мы редко хотим просто пропустить фрагмент кода, если выражение оценивается как ложное . Как правило, мы хотим сделать что-то еще в этом случае:

Конечно, вы можете использовать оператор else в сочетании с сокращенным оператором if :

Однако это не рекомендуется, если вы не имеете дело с простыми операторами, особенно с вложенными if s, поскольку трудно понять, “к какому if принадлежит конкретный еще “. Использование скобок устранит двусмысленность проблемы, если вы сочтете этот подход нечитаемым.

Оператор else является необязательным, поэтому нет необходимости писать пустой блок else <> , если мы не хотим, чтобы что-либо произошло, если выражение | является ложным.

Оператор else внутренне связан с оператором if и не может существовать без него. Он должен появиться сразу после оператора if , иначе появится ошибка компилятора “иначе без if”.

В большинстве случаев мы хотим сравнить что – то на предмет равенства-имеет ли одна переменная то же значение, что и другая, или она меньше/больше другой:

Оператор > здесь имеет обычное значение “больше, чем”, и Java поддерживает обычную группу реляционных операторов . К ним относятся , > , , => , == проверяет равенство и != проверяет неравенство.

Примечание: Обязательно используйте == в если операторы вместо = , иначе вы можете присвоить значение вместо сравнения.

Примечание: Большую часть времени мы сравниваем Строковые переменные не с помощью == , а с помощью метода .equals () . == проверяет равенство ссылок на объекты. Для примитивных типов ( int , char и т.д.) Это то же самое , что проверять, имеют ли они одинаковое значение, но со строками это чаще всего не так.

Вложенные операторы if

Мы можем подключить более одного if оператора, либо вложив (поместив один if оператор внутри другого), либо добавив еще, если в конце нашего предыдущего если :

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

еще блоки всегда “принадлежат” если одного и того же уровня, поэтому еще если (ваш номер) в вашем коде принадлежит если(наше число > 8) , а не вложенному если , который проверяет, четное ли число.

У вас может быть столько еще, если блоков, сколько вы хотите, но только один еще блок, который идет последним. Каждый если , еще, если и еще блок, который оценивается как true , будет выполнен:

Несколько выражений в одном операторе if

Еще одна очень полезная вещь-возможность проверять несколько условий в одном если :

Оператор && является одним из логических операторов , поддерживаемых Java. BoolExpr используется в качестве сокращения для логического выражения . Напоминание: логическое выражение-это выражение , которое может быть оценено как true или false , т. Е. оно также может быть выражением, содержащим логический оператор, как мы можем видеть здесь:

  • !BoolExpr – ! является отрицанием, оно оценивает выражение true в false и наоборот.
  • bool Expr1 & bool Expr2 – оператор И принимает значение true , если оба выражения истинны .
  • bool Expr1 | bool Expr2 – оператор ИЛИ принимает значение true , если по крайней мере одно из выражений истинно .
  • bool Expr1 && bool Expr2 – оператор короткого замыкания | И принимает значение true только в том случае, если boolExpr1 и bool Expr2 оба истинны . Это называется оператором короткого замыкания , потому что, если первое выражение ложно , оно даже не будет оценивать второе выражение как основное условие, которое оба должны быть истинными никогда не может произойти. С помощью простых выражений это не влияет на код значимым образом, но в производственном коде оба выражения могут быть дорогостоящими операциями, и такой подход может значительно оптимизировать код. bool Expr1
  • bool Expr2 – оператор короткого замыкания | ИЛИ принимает значение true , если по крайней мере один из boolExpr1 и bool Expr2 является истинным . A короткое замыкание версия | оператора. bool Expr1 ^ bool Expr2
  • - оператор XOR принимает значение true только в том случае, если boolExpr1 и bool Expr2 оцениваются по-разному, т. Е. Если только один из них истинен , а другой ложен .

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

Троичные Конструкции

Единственным тернарным оператором (оператором, который принимает три операнда) в Java является оператор ?: . Это работает как очень компактное if-else заявление.

Вот как обычно выглядит троичная конструкция:

Троичные конструкции также могут работать без круглых скобок, хотя, как правило, скобки более удобочитаемы:

Вы также можете использовать троичные конструкции для изменения переменных:

И результат таков:

Используя конструкцию, мы также можем вызывать методы:

Логически это привело бы к:

Вложенные Троичные Конструкции

Поскольку оба условия являются истинными , вывод будет:

Однако этот подход ужасно нечитабелен. Если возможно, избегайте вложенности троичных конструкций, хотя, если необходимо, разбейте их на более простые блоки. Для примера, этот пример можно сделать немного более читабельным:

Вывод

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

оператор Описание Пример (а = 10, б = 15) Результат
== Оператор равенства A == B ложный
знак равно Не равно оператору а! = Ь правда
> Лучше чем а> Ь ложный
= Больше или равно а> = Ь ложный
import java.util.Scanner; public class TernaryOpDemo < public static void main(String[] args) < //Checking if marks greater than 35 or not String status; int marks; Scanner inputDevice = new Scanner(System.in); System.out.print("Please enter your Marks (between 0 to 100) >> "); marks = inputDevice.nextInt(); status= marks>=35 ?"You are Passed":"You are failed"; System.out.println("Status «contitional" operator image-6" style="max-width:100%;display:block;height:auto;border: 2px solid silver;">

Резюме

    Java предоставляет шесть условных операторов == (равенство),> (больше чем), = (больше или равно),

Привет, хабровчане. Прямо сейчас в OTUS открыт набор на курс "Java QA Automation Engineer". Всех желающих приглашаем принять участие в открытом уроке на тему "Http. Postman, newman, fiddler (charles), curl, soap. Soapui".

А также делимся с вами переводом полезной статьи.

При написании автотестов на Java не обойтись без блоков с условным оператором if . Всегда есть какие-то условия, истинность которых нужно проверять, чтобы выполнялся тот или иной код в зависимости от результата проверки. Однако если использовать слишком много ветвлений с операторами if и else , это может засорить код теста. Как же писать блоки if , которые будут выполнять свою функцию, сохранив при этом читаемость кода тестов? Мы рассмотрим несколько примеров кода, который может встретиться в тестах, и найдем лучший способ написания аналогичного кода.

1. Сегодня выходной?

Представим, что в тесте есть строковая переменная, которая используется для обозначения дня недели. Нам нужен вспомогательный метод, который сообщит, является ли день, обозначенный этой переменной, выходным. Метод должен возвращать true , если строковой переменной присвоено значение Saturday или Sunday, и false в остальных случаях.

⛔ Неудачный вариант

Рассмотрим первый вариант решения этой задачи. Не рекомендую его использовать и сейчас объясню почему.

Во-первых, метод принимает параметр, обозначающий день недели, и переводит его значение в верхний регистр. Это делается потому, что внутри метода сравнение с известными днями недели происходит в верхнем регистре. Поэтому значение параметра, который передается в метод, может быть записано полностью в верхнем регистре, полностью в нижнем регистре или с использованием любого сочетания регистров. Это хорошо.

Код включает несколько блоков if . Каждый блок сравнивает значение параметра с днем недели до тех пор, пока не будут проверены все дни (с понедельника по воскресенье). То есть выполняется 7 операций сравнения в 7 блоках if .

Внутри каждого блока if используется оператор return . Значение true могут вернуть только первые два блока, то есть блоки, в условии которых записаны выходные дни. Остальные блоки, в условии которых записаны рабочие дни, вернут значение false. Затем добавлен оператор return , расположенный вне блоков if . Он вернет указанное после него значение, если не будет выполнено ни одно из условий, проверяемых в блоках if .

Предположим, что мы передали в метод параметр со значением Saturday. Как только соответствующий блок if сравнит параметр со значением SATURDAY, метод вернет значение true и завершится. Оставшийся код выполняться не будет.

Это не самый лучший вариант написания кода. Вернемся к условию задачи. Мы знаем, что в неделе всего два выходных дня — суббота и воскресенье. Поэтому нам не нужно указывать никаких других значений для проверки переданного в метод параметра. Все параметры должны проверяться в одном блоке, не нужно писать 5 дополнительных условных конструкций. В этом варианте слишком много кода.

✅ Удачный вариант

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

В этом варианте у нас лишь один блок if . Нас интересуют только те значения параметра, которые соответствуют субботе или воскресенью, поэтому только при совпадении с ними метод вернет значение true . Если в метод будет передан параметр с другим значением (другим днем недели или случайным набором символов), вернется значение false .

Не забывайте, что оператор return завершает выполнение метода. Поэтому, как только метод определит, что значение параметра совпадает с названием выходного дня, он вернет значение true и больше выполняться не будет. В этом случае инструкция return false не выполняется. Если переданная в метод строковая переменная не является равной null и содержит значение, отличное от интересующих нас двух значений, то вернется значение false.

2. Получаем текст веб-элемента (WebElement)

В этой задаче нам нужно извлечь и вернуть текст веб-элемента. Для этого мы используем метод getText() , который будет считывать данные из веб-элемента и, конечно же, возвращать строку.

⛔ Неудачный вариант

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

В этом варианте блок if проверяет, содержит ли веб-элемент какой-либо текст, и возвращает результат выполнения метода getText() только в том случае, если текст веб-элемента не является пустым. В этом случае последующий код в методе не выполняется. Но если строка, которую возвращает метод getText() , является пустой, инструкция return в блоке if выполняться не будет. Выполняться будет последняя инструкция return, которая в этом примере возвращает пустую строку. С логической точки зрения это неправильно.

✅ Удачный вариант

Наша задача — вернуть текст веб-элемента вне зависимости от его значения. В примере, который мы рассмотрели выше, код выполняет что-то странное. Сначала он проверяет, является ли текст веб-элемента пустым. Если нет, то возвращается этот самый текст. А если да, код возвращает пустую строку, которая по сути представляет собой то же самое, что и значение полученного текста веб-элемента. И в том и в другом случае возвращаемый результат — это результат выполнения метода getText() . Поэтому для решения этой задачи лучше написать код без блоков if и вспомогательных методов, например такой:

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

3. Является ли текст веб-элемента пустым?

В этой задаче нужно проверить, пуст ли текст веб-элемента, и вернуть соответствующее логическое значение.

⛔ Неудачный вариант

В первом варианте решения этой задачи мы впервые встречаемся с условным ветвлением if/else . До этого у нас были только блоки if .

Инструкция if проверяет, является ли пустым текст веб-элемента, полученный с помощью метода getText() . Если это так, то метод, который мы создали для решения задачи, вернет логическое значение true . Блок else вернет значение false , потому что полученная строка, очевидно, не является пустой.

✅ Удачный вариант

Рассмотренный нами пример неудачен, и вот почему. Метод isEmpty() возвращает логическое значение. Суть этого кода можно кратко изложить так: если получено истинное значение, возвращаем true , иначе возвращаем false . Для решения этой задачи можно написать одну строку кода без создания новых методов:

Мы просто возвращаем значение, полученное в результате выполнения метода isEmpty() . Если в него передан пустой текст, возвращается значение true , иначе возвращается false . Задача решена.

4. Запуск браузера при определенном значении параметра

Для решения этой задачи нужно создать метод, который запустит экземпляр браузера через соответствующий WebDriver. В качестве параметра метод принимает строку, в которой записано название браузера. Этот параметр определяет, какой браузер нужно запустить.

⛔ Неудачный вариант

Рассмотрим пример, как не надо писать код. В нем используется классическое условное ветвление if-else-if-else-if… Тут слишком много блоков, которые делают код трудным для восприятия и понимания. С такой сложной структурой бывает нелегко понять, все ли возможные сценарии мы предусмотрели.

Для того чтобы усовершенствовать код, нам в первую очередь нужно помнить о том, что мы сравниваем значение параметра browserName всего с одним значением для каждого браузера. То есть нужно сравнить значение параметра browserName , написанного, например, в нижнем регистре, со значениями строк, в которых названия браузеров записаны также в нижнем регистре.

Затем нужно изменить структуру кода, избавившись от ветвления if-else-if-else-if-… Поскольку мы сравниваем только одно значение параметра с несколькими другими значениями, можно использовать конструкцию switch.

✅ Удачный вариант

Более чистая версия этого кода выглядит так:

Здесь четко видно, что будет происходить при каждом значении параметра. Например, не составит труда найти код, который будет выполняться, если параметр имеет значение Chrome. Поскольку в каждом блоке case мы используем инструкцию return , можно быть уверенными в том, что запустится только один браузер: как только мы нашли нужный браузер, метод запускает новый экземпляр браузера и прекращает выполняться. Также несложно понять, что произойдет, если значение параметра не совпадет ни с одним известным значением: смотрим блок default .

5. До обеда или после?

И в том и в другом случае нам нужно объявить строковую переменную и присвоить ей соответствующее значение (Before Lunch или After Lunch). Нам также нужно вычислить текущее время, точнее — текущий час. Для этого мы будем использовать класс LocalDateTime :

В этой строке кода мы сначала получаем текущую дату и время, вызвав метод now() , а затем с помощью метода getHour() извлекаем целое число (int) , соответствующее значению текущего часа. Переменной currentHour будет присвоено значение от 0 до 23, соответствующее текущему часу.

Возможный вариант № 1

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

Здесь мы сначала объявили строковую переменную momentOfDay1 , которая будет хранить искомое значение. Затем в блоке if/else мы сравниваем значение текущего часа с числом 12 и присваиваем переменной momentOfDay1 значение в зависимости от результата сравнения. Все довольно просто.

Единственный недостаток этого варианта состоит в том, что в нем слишком много кода для решения такой простой задачи.

Возможный вариант № 2

В этом варианте вместо 4 строк кода мы напишем всего одну.

В этой строке есть все: объявление строковой переменной, сравнение значения текущего часа с числом 12 и присвоение переменной momentOfDay2 требуемого значения в зависимости от результата сравнения. Здесь мы используем упрощенную конструкцию if/else . Код между знаком вопроса (?) и двоеточием (:) соответствует ветви кода в блоке if , который мы использовали раньше. Все, что идет после двоеточия, соответствует ветви else . Как видите, этот вариант очень компактный, и, как только вы поймете синтаксис, вам не составит труда его прочитать.

Дополнительные рекомендации

Мы рассмотрели приемы, с помощью которых можно упростить сложные конструкции с if , и мне бы хотелось поделиться еще несколькими советами.

Не оставляйте пустых блоков else . Если вы вдруг написали подобную конструкцию, исправьте ее:

Поскольку в блоке else кода нет, нет смысла писать этот блок. Оставьте только if , и код будет проще понять:

Используйте логический оператор И вместо нового блока if. Взгляните на этот код:

Единственное, что содержит первый блок if в этом примере, — это второй блок if и больше ничего. Код, который должен выполняться в первом блоке if , — это на самом деле код второго блока if (если, конечно, второе условие condition2 выполняется). Поэтому мы можем переписать код, используя только один блок if и логический оператор И (который в Java пишется как два амперсанда: && ).

Не повторяйте одно и то же условие. Если у вас слишком много вложенных if , можно запросто заблудиться в массе условий, которые вы написали для каждой ветви. Например:

В этом примере в первом блоке if проверяется истинность первого условия ( condition1 ). Но в одной из вложенных ветвей это условие проверяется еще раз. В этом нет смысла, если код внутри первого if никак не влияет на результат проверки этого условия. То же самое относится ко второму условию ( condition2 ). Если код второго блока if не влияет на результат проверки второго условия, блок if , где проверяется !condition2 , выполняться не будет.

Заключение

Из этих примеров видно, что иногда нам просто не нужно использовать конструкцию с if . Но когда мы ее используем, уровней вложенности должно быть как можно меньше. Пишите максимально простой и чистый код. При необходимости его проще отлаживать, а если через несколько месяцев вам нужно будет разобраться, что этот код должен был делать, вы без труда справитесь с этой задачей.

- Узнать подробнее о курсе "Java QA Automation Engineer".


- Записаться на открытый урок "Http. Postman, newman, fiddler (charles), curl, soap. Soapui".

Читайте также: