One place for hosting & domains

      выражений

      Написание условных выражений в Go


      Введение

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

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

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

      • Если ученица получает за тест 65% или больше, она сдает его; если нет — не сдает.
      • Если у человека есть деньги на счете, рассчитывается процент, а если нет — начисляется штраф.
      • Если покупатель приобретает 10 апельсинов или более, он получает скидку 5%; если же он покупает меньше, скидка не предоставляется.

      Оценка условий и назначение кода для запуска в зависимости от выполнения условий — это основа использования условных выражений.

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

      Оператор If

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

      Откройте в текстовом редакторе файл и введите следующий код:

      grade.go

      package main
      
      import "fmt"
      
      func main() {
          grade := 70
      
          if grade >= 65 {
              fmt.Println("Passing grade")
          }
      }
      

      В этом коде мы используем переменную grade и присваиваем ей значение 70. Затем мы используем оператор if для проверки того, что значения переменной grade больше или равно ( >= ) числу 65. Если это условие выполняется, мы указываем программе распечатать строку Passing grade.

      Сохраните программу с именем grade.go и запустите ее в локальной среде программирования из окна терминала с помощью команды go run grade.go.

      В данном случае оценка 70 соответствует условию (больше или равно 65), и после запуска программы вы получите следующий результат:

      Output

      Passing grade

      Теперь изменим результат программы, сменив значение переменной grade на 60:

      grade.go

      package main
      
      import "fmt"
      
      func main() {
          grade := 60
      
          if grade >= 65 {
              fmt.Println("Passing grade")
          }
      }
      

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

      Рассмотрим еще один пример, где мы будем рассчитывать, является ли баланс счета отрицательным. Создайте файл account.go и напишите следующую программу:

      account.go

      package main
      
      import "fmt"
      
      func main() {
          balance := -5
      
          if balance < 0 {
              fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
          }
      }
      

      При запуске этой программы с помощью комады go run account.go мы получим следующий результат:

      Output

      Balance is below 0, add funds now or you will be charged a penalty.

      В программе мы инициализировали переменную balance со значением -5, и это значение меньше 0. Поскольку баланс соответствует условию выражения if (balance < 0), при сохранении и запуске этого кода будет выведена строка. Если мы изменим баланс на 0 или положительное число, ничего выводиться не будет.

      Оператор Else

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

      Для этого мы добавим к условию выражение else следующим образом:

      grade.go

      package main
      
      import "fmt"
      
      func main() {
          grade := 60
      
          if grade >= 65 {
              fmt.Println("Passing grade")
          } else {
              fmt.Println("Failing grade")
          }
      }
      

      Поскольку переменная grade имеет значение 60, выражение if оценивается как ложное, и программа не распечатывает текст Passing grade. Однако следующее выражение else предписывает программе выполнить другое действие.

      Когда мы сохраним и запустим эту программу, мы увидим следующее:

      Output

      Failing grade

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

      Чтобы добавить выражение else в пример с банковским счетом, мы перепишем код следующим образом:

      account.go

      package main
      
      import "fmt"
      
      func main() {
          balance := 522
      
          if balance < 0 {
              fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
          } else {
              fmt.Println("Your balance is 0 or above.")
          }
      }
      

      Output

      Your balance is 0 or above.

      Здесь мы изменили значение переменной balance на положительное число, чтобы выполнить вывод в операторе else. Чтобы выполнить вывод первого оператора if, мы можем заменить значение отрицательным числом.

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

      Операторы Else if

      Мы использовали для условных выражений опцию Boolean, с которой каждое выражение if оценивается или как истинное, или как ложное. Во многих случаях нам может потребоваться программа, которая будет оценивать более двух возможных результатов. Для этой цели мы используем выражение else if, которое имеет в Go синтаксис else if. Выражение else if выглядит похожим на выражение if и оценивает другое условие.

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

      • Баланс меньше 0
      • Баланс равен 0
      • Баланс больше 0

      Выражение else if помещается между выражением if и выражением else следующим образом:

      account.go

      package main
      
      import "fmt"
      
      func main() {
          balance := 522
      
          if balance < 0 {
              fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
          } else if balance == 0 {
              fmt.Println("Balance is equal to 0, add funds soon.")
          } else {
              fmt.Println("Your balance is 0 or above.")
          }
      }
      

      Теперь при запуске программы возможны три результата:

      • Если переменная balance равняется 0, будет выведен результат выражения else if (Balance is equal to 0, add funds soon.)
      • Если переменная balance равняется положительному числу, будет выведен результат выражения else (Your balance is 0 or above.).
      • Если переменная balance равняется отрицательному числу, будет выведен результат выражения if (Balance is below 0, add funds now or you will be charged a penalty).

      Что делать, если нам требуется более трех вероятностей? В этом случае мы можем вставить в код несколько выражений else if.

      В программе grade.go мы перепишем код так, чтобы числовым оценкам соответствовали разные буквенные оценки:

      • 90 или выше соответствует оценке A
      • 80-89 соответствует оценке B
      • 70-79 соответствует оценке C
      • 65-69 соответствует оценке D
      • 64 или менее соответствует оценке F

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

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

      grade.go

      package main
      
      import "fmt"
      
      func main() {
          grade := 60
      
          if grade >= 90 {
              fmt.Println("A grade")
          } else if grade >= 80 {
              fmt.Println("B grade")
          } else if grade >= 70 {
              fmt.Println("C grade")
          } else if grade >= 65 {
              fmt.Println("D grade")
          } else {
              fmt.Println("Failing grade")
          }
      }
      

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

      1. Если оценка больше 90, программа выводит текст A grade, если оценка меньше 90, программа переходит к следующему выражению…

      2. Если оценка больше или равна 80, программа выводит текст B grade, если оценка равняется 79 или менее, программа переходит к следующему выражению…

      3. Если оценка больше или равна 70, программа выводит текст С grade, если оценка равняется 69 или менее, программа переходит к следующему выражению…

      4. Если оценка больше или равна 65, программа выводит текст D grade, если оценка равняется 64 или менее, программа переходит к следующему выражению…

      5. Программа выводит текст Failing grade, поскольку ни одно из предыдущих условий не выполнено.

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

      Вы познакомились с выражениями if, else if и else и теперь можете переходить к вложенным условным выражениям. Вложенные выражения if используются в ситуациях, когда нам нужно проверить дополнительное условие, если первое условие определяется как истинное. Для этого мы можем использовать выражение if-else внутри другого выражения if-else. Рассмотрим синтаксис вложенного выражения if:

      if statement1 { // outer if statement
          fmt.Println("true")
      
          if nested_statement { // nested if statement
              fmt.Println("yes")
          } else { // nested else statement
              fmt.Println("no")
          }
      
      } else { // outer else statement
          fmt.Println("false")
      }
      

      Этот код имеет несколько вариантов выводимых результатов:

      • Если выражение statement1 оценивается как истинное, программа проверяет истинность выражения nested_statement. Если оба выражения истинные, результат будет выглядеть следующим образом:

      Output

      true yes
      • Если выражение statement1 истинное, а выражение nested_statement — ложное, результат будет выглядеть следующим образом:

      Output

      true no
      • Если выражение statement1 ложное, вложенное выражение if-else не проверяется, и выполняется только выражение else. Результат будет выглядеть следующим образом:

      Output

      false

      Мы можем использовать в коде несколько вложенных выражений if:

      if statement1 { // outer if
          fmt.Println("hello world")
      
          if nested_statement1 { // first nested if
              fmt.Println("yes")
      
          } else if nested_statement2 { // first nested else if
              fmt.Println("maybe")
      
          } else { // first nested else
              fmt.Println("no")
          }
      
      } else if statement2 { // outer else if
          fmt.Println("hello galaxy")
      
          if nested_statement3 { // second nested if
              fmt.Println("yes")
          } else if nested_statement4 { // second nested else if
              fmt.Println("maybe")
          } else { // second nested else
              fmt.Println("no")
          }
      
      } else { // outer else
          statement("hello universe")
      }
      

      В этом коде вложенное выражение if используется внутри каждого выражения if в дополнение к выражению else if. Это дает больше вариантов для каждого условия.

      Рассмотрим пример вложенных выражений if в нашей программе grade.go. Вначале мы проверяем, соответствует ли оценка прохождению теста (больше или равняется 65%), а затем определяем буквенную оценку, которая соответствует числовой. Если оценка не соответствует прохождению, нам не нужно проверять буквенные значения, и программа просто сообщает, что тест не пройден. Наш измененный код с вложенным выражением if будет выглядеть следующим образом:

      grade.go

      
      package main
      
      import "fmt"
      
      func main() {
          grade := 92
          if grade >= 65 {
              fmt.Print("Passing grade of: ")
      
              if grade >= 90 {
                  fmt.Println("A")
      
              } else if grade >= 80 {
                  fmt.Println("B")
      
              } else if grade >= 70 {
                  fmt.Println("C")
      
              } else if grade >= 65 {
                  fmt.Println("D")
              }
      
          } else {
              fmt.Println("Failing grade")
          }
      }
      

      Если мы запустим код с переменной grade с целочисленным значением 92, первое условие выполняется, и программа выводит текст Passing grade of: . Затем программа видит, что оценка больше или равна 90, и поскольку это условие также выполнено, она выводит A.

      Если мы запустим код с переменной grade со значением 60, первое условие не будет выполняться, и программа пропустит вложенные выражения if и перейдет к выражению else, в результате чего будет выведен текст Failing grade.

      Мы можем добавить еще больше вариантов и использовать второй уровень вложенных выражений if. Например, мы можем захотеть использовать отдельные оценки A+, A и A-. Для этого вначале проверяем, что тест пройден, затем проверяем, что оценка равняется 90 или более, а затем проверим, что оценка больше 96 и соответствует значению A+:

      grade.go

      ...
      if grade >= 65 {
          fmt.Print("Passing grade of: ")
      
          if grade >= 90 {
              if grade > 96 {
                  fmt.Println("A+")
      
              } else if grade > 93 && grade <= 96 {
                  fmt.Println("A")
      
              } else {
                  fmt.Println("A-")
              }
      ...
      

      В этом коде, если для переменной grade задано значение 96, программа выполняет следующие действия:

      1. Проверяет, что оценка больше или равна 65 (истина)
      2. Выводит текст Passing grade of:
      3. Проверяет, что оценка больше или равна 90 (истина)
      4. Проверяет, что оценка больше 96 (ложь)
      5. Проверяет, что оценка больше 93 и меньше или равна 96 (истина)
      6. Выводит A
      7. Покидает вложенные условные выражения и продолжает выполнение остальной части кода

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

      Output

      Passing grade of: A

      Вложенные выражения if позволяют добавлять в код несколько определенных уровней условий.

      Заключение

      Использование условных выражений, в том числе выражения if, вы можете лучше контролировать выполняемый программой код. Условные выражения предписывают программе оценить выполнение определенных условий. Если условие выполнено, запускается определенный код, а если оно не выполнено — программа переходит к другому коду.

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



      Source link

      Использование выражений Break и Continue при работе с циклами в Go


      Введение

      Использование циклов for в Go позволяет эффективно автоматизировать и повторять выполнение задач.

      Понимание принципов контроля и работы циклов позволяет использовать в программе персонализированную логику. Вы можете контролировать циклы с помощью выражений break и continue.

      Оператор Break

      В языке Go оператор break останавливает выполнение текущего цикла. Выражение break почти всегда сочетается с условным выражением if.

      Рассмотрим пример использования выражения break в цикле for:

      break.go

      package main
      
      import "fmt"
      
      func main() {
          for i := 0; i < 10; i++ {
              if i == 5 {
                  fmt.Println("Breaking out of loop")
                  break // break here
              }
              fmt.Println("The value of i is", i)
          }
          fmt.Println("Exiting program")
      }
      

      Эта небольшая программа создает цикл for, выполняющийся пока i меньше 10.

      В цикле for содержится выражение if. Выражение if проверяет условие i и сравнивает значение с 5. Если значение i не равно 5, цикл продолжается и распечатывает значение i. Если значение i равно 5, цикл выполняет выражение break, печатает сообщение о выходе из цикла Breaking out of loop и останавливает выполнение цикла. После окончания выполнения программы распечатывается сообщение Exiting program, показывающее, что мы выполнили выход из цикла.

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

      Output

      The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 The value of i is 4 Breaking out of loop Exiting program

      Это показывает, что когда целое число i оценивается как равное 5, цикл прекращается, о чем программу информирует выражение break.

      Вложенные циклы

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

      nested.go

      package main
      
      import "fmt"
      
      func main() {
          for outer := 0; outer < 5; outer++ {
              if outer == 3 {
                  fmt.Println("Breaking out of outer loop")
                  break // break here
              }
              fmt.Println("The value of outer is", outer)
              for inner := 0; inner < 5; inner++ {
                  if inner == 2 {
                      fmt.Println("Breaking out of inner loop")
                      break // break here
                  }
                  fmt.Println("The value of inner is", inner)
              }
          }
          fmt.Println("Exiting program")
      }
      

      Эта программа содержит два цикла. Хотя оба цикла выполняют 5 итераций, в каждом из них есть условное выражение if с выражением break. Внешний цикл прекращается, если значение outer равняется 3. Внутренний цикл прекращается, если значение inner равняется 2.

      Если мы запустим программу, результат будет выглядеть следующим образом:

      Output

      The value of outer is 0 The value of inner is 0 The value of inner is 1 Breaking out of inner loop The value of outer is 1 The value of inner is 0 The value of inner is 1 Breaking out of inner loop The value of outer is 2 The value of inner is 0 The value of inner is 1 Breaking out of inner loop Breaking out of outer loop Exiting program

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

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

      Оператор Continue

      Выражение continue используется, когда вы хотите пропустить оставшуюся часть цикла, вернуться в начало цикла и продолжить новую итерацию этого цикла.

      Как и выражение break, выражение continue обычно используется вместе с условным выражением if.

      Мы используем ту же программу с циклом for, что и в предыдущем разделе «Выражение Break», но при этом используем выражение continue вместо выражения break:

      continue.go

      package main
      
      import "fmt"
      
      func main() {
          for i := 0; i < 10; i++ {
              if i == 5 {
                  fmt.Println("Continuing loop")
                  continue // break here
              }
              fmt.Println("The value of i is", i)
          }
          fmt.Println("Exiting program")
      }
      

      Отличие выражения continue от выражения break заключается в том, что код продолжит выполняться несмотря на прерывание, если переменная i будет оценена как равная 5. Посмотрим на результаты:

      Output

      The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 The value of i is 4 Continuing loop The value of i is 6 The value of i is 7 The value of i is 8 The value of i is 9 Exiting program

      Здесь вы видим, что строка The value of i is 5 не появляется в результатах, но цикл продолжает выполнение после этой точки и распечатывает строки для чисел 6-10 перед остановкой цикла.

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

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

      Заключение

      Выражения break и continue в Go позволят вам более эффективно использовать циклы for в программном коде.



      Source link