ГОЛАНГ

Анатомия условных операторов и циклов в Go

Go предоставляет if/else и switch условные операторы для выполнения кода на основе определенных условий. Чтобы выполнять какой-то код снова и снова, у нас есть цикл for.

Условный оператор if/else

Go предоставляет if, if-else, if-else if-else варианты оператора if / else, с которым мы знакомы. Он используется для проверки условия и выполнения некоторого кода, когда условие равно true или false.

Состояние if

Ниже показано простое использование условия if. В отличие от большинства языков программирования, Go не позволяет заключать condition в круглые скобки ().

В отличие от языка JavaScript или C, {} фигурные скобки являются обязательными, даже если между {...} есть только один оператор.

Состояние if-else

В случае условия if-else, если условие if равно false, он выполнит блок else.

Здесь следует отметить, что мы написали оператор else в той же строке конечной скобки } оператора if. Это необходимо, потому что, если бы мы написали else оператор на новой строке, Go поставил бы точку с запятой ; в конце if, и программа вызвала бы ошибку.

if condition {
}                   // implicit ;
else {
}

Состояние if-else if-else

Условие else if используется, когда вы хотите попробовать несколько условий.

Первое if условие будет оценено, если условие выполнено (оценено как true), будет выполнен код внутри блока if, и никакие дальнейшие условия не будут оцениваться.

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

Первоначальное заявление

Вы можете выполнить начальную инструкцию до оценки if условия.

if statement; condition {
    ...
}

Это может пригодиться для инициализации переменной условия и ограничения области действия этой переменной только блоком if-else.

Тернарное условие

Go не поддерживает тройные однострочники, и нет четкого идиоматического способа добиться этого.

Условный оператор switch

Оператор Tswitch обычно используется для замены нескольких условий if-else.

Синтаксис оператора switch

Оператор switch принимает одно входное значение и сопоставляется со многими случаями. В отличие от C, Go не требует оператора break для завершения блока case. Блок case завершится, как только будет выполнен последний оператор в блоке case, как и оператор switch. Повторяющиеся случаи (значения) в Go не допускаются.

switch input {
    case value_1:
        ...
    case value_1:
        ...
}

Рассмотрим простой пример поиска имени пальца по указательному пальцу.

В приведенной выше программе мы передаем переменную finger в качестве входного значения в блок switch. Затем switch попытайтесь найти блок case, который соответствует этому значению. В приведенной выше программе, начиная с finger == 2, case 2 будет выполняться и записывать сообщение Index в терминал.

Если значение finger не находится в диапазоне от 1 до 5, ничего не печатается.

Дело default

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

В приведенной выше программе, поскольку входное значение finger равно 6 и ни один из случаев не соответствует этому значению, будет выполнен блок default, печатающий No fingers matched на экране.

Случай default не обязательно должен быть последним. Это может быть где угодно в switch блоке.

Несколько case значений

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

Вышеупомянутая программа напечатает Letter is a vovel, поскольку переменная letter имеет значение i, которое принадлежит значениям case "a", "e", "i", "o", "u".

Первоначальное заявление

Существует еще один вариант оператора switch, в котором вы можете добавить начальный оператор перед входным значением, как if условный оператор.

switch statement; input {
    ...
}

Давайте посмотрим на предыдущий пример, где в этом случае мы определим переменную letter в самом выражении switch, ограничив ее область действия блоком switch.

Невыразительное switch заявление

Значение ввода в инструкции Go switch является необязательным. Если для оператора switch нет входного значения, case будет выражением, возвращающим логическое значение.

Поскольку number больше 20, условие number > 5 будет выполнено, и number is greater than 5 будет выведен на консоль.

Мы можем использовать начальную инструкцию без входного значения инструкции switch. В приведенной выше программе мы могли инициализировать number переменную в операторе switch.

Точка с запятой необходима после начального оператора, потому что, если мы не добавим точку с запятой, тогда наш switch оператор больше не будет лишен выражения и number := getnumber() станет выражением входного значения, которое является недопустимым.

Заявление fallthrough

Как обычно, когда выполняется блок case, другие случаи не рассматриваются. В приведенной выше программе число больше 5, 10 и 15, но поскольку number > 5 и первый case удовлетворяют этому условию и выполняется только этот блок case. Чтобы выполнить еще case блоков, мы используем оператор fallthrough.

Когда условие case оценивается и возвращает true или соответствует входному значению, этот блок case выполняется. Если компилятор находит оператор fallthrough, следующий блок case выполняется без оценки регистра.

fallthrough должен быть последним оператором в блоке case, иначе компилятор Go выдаст ошибку fallthrough statement out of place.

Оператор fallthrough не разрешен в последнем case блоке, поскольку нет других условий, в которые можно было бы попасть.

for петли

В отличие от C и других языков программирования, единственный доступный цикл в Go - это for цикл. Но многие варианты for цикла в Go вполне справятся со всеми задачами. Итак, давайте рассмотрим это.

Синтаксис цикла for

Синтаксис цикла for состоит из трех операторов, и все три оператора в Go необязательны.

for init; condition; post {
    ...
}
  • Оператор init инициализирует любые переменные, которые могут потребоваться в операторе проверки condition или операторе post. Этот оператор будет вызван один раз, когда начнется выполнение for цикла.
  • Оператор condition проверяет наличие условия. Если условие возвращает true, тогда будет выполнен код внутри цикла for.
  • В конце выполнения кода будет выполнен оператор post. В этом операторе мы можем изменять любые переменные, определенные в операторе init. После выполнения оператора post оператор condition будет снова вычислен. Если condition возвращает true, код внутри цикла for будет выполнен снова, иначе цикл for завершится.

Начнем с примера.

В приведенной выше программе мы печатаем числа от 1 до 6.

Варианты петли for

Как обсуждалось ранее, все три оператора в цикле for необязательны.

Необязательный оператор post: мы можем отбросить post оператор и выполнить внутри for код цикла, чтобы получить те же результаты.

Необязательный оператор инициализации. Мы также можем удалить оператор init и выполнить его вне for цикла. Но в этом случае переменная i будет доступна вне цикла for.

Необязательный оператор инициализации и публикации: мы можем работать только с condition оператором проверки. В этом случае можно отбросить все точки с запятой, Go будет рассматривать этот оператор как condition оператор. Это похоже на while цикл на C языке.

Без всех операторов: поскольку все for операторы цикла являются необязательными, давайте посмотрим, как это будет работать. Цикл for без каких-либо операторов - это цикл for, где оператор condition всегда истинен, поэтому он будет повторяться бесконечно, если не будет завершен вручную из кода цикла for.

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

Заявление break

Оператор break используется внутри цикла for для завершения цикла for. Любой код после оператора break выполняться не будет.

В приведенной выше программе, когда i больше 6, условие if будет true и будет выполняться инструкция break. Это немедленно завершит цикл for.

Заявление continue

Оператор continue используется для пропуска одной итерации цикла for. Когда цикл for видит оператор continue, он просто игнорирует текущую итерацию, выполняет оператор post и запускается снова. Простым примером может быть печать только четных чисел от 1 до 10.

Заявление return

Если цикл for встречает оператор return, выполнение функции будет остановлено, и функция вернет значение. Следовательно, return не относится к циклу for.