Как работают условные операторы? В чем разница между различными их видами?

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

Условный оператор позволяет программе выбирать разные действия в зависимости от истинности условия. Это основа ветвления в алгоритмах.

Условие обычно является логическим выражением. Оно принимает значение истина или ложь.

Простое условие

Простая форма выполняет действие только при истинном условии.

if (score >= 60) {
  console.log("Экзамен сдан");
}
if (score >= 60) {
  console.log("Экзамен сдан");
}
package main
import "fmt"
func main() {
  if score >= 60 {
    fmt.Println("Экзамен сдан")
  }
}
public class Example {
  public static void main(String[] args) {
    if (score >= 60) {
      System.out.println("Экзамен сдан");
    }
  }
}
if score >= 60:
  print("Экзамен сдан")

Если условие ложно, блок пропускается.

Полное ветвление

Полная форма содержит две ветви: что делать при истине и что делать при лжи.

if (score >= 60) {
  console.log("Экзамен сдан");
} else {
  console.log("Экзамен не сдан");
}
if (score >= 60) {
  console.log("Экзамен сдан");
} else {
  console.log("Экзамен не сдан");
}
package main
import "fmt"
func main() {
  if score >= 60 {
    fmt.Println("Экзамен сдан")
  } else {
    fmt.Println("Экзамен не сдан")
  }
}
public class Example {
  public static void main(String[] args) {
    if (score >= 60) {
      System.out.println("Экзамен сдан");
    } else {
      System.out.println("Экзамен не сдан");
    }
  }
}
if score >= 60:
  print("Экзамен сдан")
else:
  print("Экзамен не сдан")

Такой вариант удобен, когда нужно выбрать одно из двух действий.

Множественное ветвление

Если вариантов больше двух, используют цепочку условий.

if (score >= 90) {
  console.log("Отлично");
} else if (score >= 75) {
  console.log("Хорошо");
} else if (score >= 60) {
  console.log("Удовлетворительно");
} else {
  console.log("Не сдано");
}
if (score >= 90) {
  console.log("Отлично");
} else if (score >= 75) {
  console.log("Хорошо");
} else if (score >= 60) {
  console.log("Удовлетворительно");
} else {
  console.log("Не сдано");
}
package main
import "fmt"
func main() {
  if score >= 90 {
    fmt.Println("Отлично")
  } else if score >= 75 {
    fmt.Println("Хорошо")
  } else if score >= 60 {
    fmt.Println("Удовлетворительно")
  } else {
    fmt.Println("Не сдано")
  }
}
public class Example {
  public static void main(String[] args) {
    if (score >= 90) {
      System.out.println("Отлично");
    } else if (score >= 75) {
      System.out.println("Хорошо");
    } else if (score >= 60) {
      System.out.println("Удовлетворительно");
    } else {
      System.out.println("Не сдано");
    }
  }
}
if score >= 90:
  print("Отлично")
elif score >= 75:
  print("Хорошо")
elif score >= 60:
  print("Удовлетворительно")
else:
  print("Не сдано")

Условия проверяются сверху вниз. Выполняется первая подходящая ветвь.

Оператор выбора

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

switch (command) {
  case "start":
    console.log("Запуск");
    break;
  case "stop":
    console.log("Остановка");
    break;
  default:
    console.log("Неизвестная команда");
}
switch (command) {
  case "start":
    console.log("Запуск");
    break;
  case "stop":
    console.log("Остановка");
    break;
  default:
    console.log("Неизвестная команда");
}
package main
import "fmt"
func main() {
  switch (command) {
    case "start":
      fmt.Println("Запуск")
      break
    case "stop":
      fmt.Println("Остановка")
      break
    default:
      fmt.Println("Неизвестная команда")
  }
}
public class Example {
  public static void main(String[] args) {
    switch (command) {
      case "start":
        System.out.println("Запуск");
        break;
      case "stop":
        System.out.println("Остановка");
        break;
      default:
        System.out.println("Неизвестная команда");
    }
  }
}
match command:
  case "start":
    print("Запуск")
  case "stop":
    print("Остановка")
  case _:
    print("Неизвестная команда")

Он делает код яснее, если ветвление зависит от одного значения.

Тернарный оператор

Тернарный оператор используется для короткого выбора значения.

const status = score >= 60 ? "сдано" : "не сдано";
const status = score >= 60 ? "сдано" : "не сдано";
package main
func main() {
  status := score >= 60 ? "сдано" : "не сдано"
}
public class Example {
  public static void main(String[] args) {
    var status = score >= 60 ? "сдано" : "не сдано";
  }
}
status = "сдано" if score >= 60 else "не сдано"

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

Вложенные условия

Одно условие может находиться внутри другого.

if (isAuthorized) {
  if (isAdmin) {
    console.log("Панель администратора");
  }
}
if (isAuthorized) {
  if (isAdmin) {
    console.log("Панель администратора");
  }
}
package main
import "fmt"
func main() {
  if isAuthorized {
    if isAdmin {
      fmt.Println("Панель администратора")
    }
  }
}
public class Example {
  public static void main(String[] args) {
    if (isAuthorized) {
      if (isAdmin) {
        System.out.println("Панель администратора");
      }
    }
  }
}
if isAuthorized:
  if isAdmin:
    print("Панель администратора")

Вложенность нужно контролировать: слишком глубокие условия ухудшают читаемость.

Разница между видами

Вывод

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

Источники

  • Семакин И.Г. Основы программирования и баз данных. Учебник. - М.: Академия, 2014. - 224 с.
  • Симонова Е.В. Структуры данных в C#. Линейные и нелинейные динамические структуры. - Лань, 2018. - 152 с.
  • Бертран Мейер. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. - М.: Национальный Открытый Университет "ИНТУИТ": БИНОМ. Лаборатория знаний, 2011. - 775 с.
  • Мэтт Вайсфельд. Объектно-ориентированное мышление. - СПб.: Питер, 2014. - 304 с.
  • Ривест Р., Штайн К., Лейзерсон Ч., Кормен Т. Алгоритмы: построение и анализ. - М.: Вильямс, 2007. - 1296 с.
  • Стивенс Род. Алгоритмы. Теория и практическое применение. - М.: Эксмо, 2017. - 544 с.
  • Рублев В.С. Основы теории алгоритмов. - 2-е издание, исправленное. - М.: Научный мир, 2008. - 128 с.
  • Гольдберг Г.Л. Основы алгоритмизации и программирования. - М.: Академия, 2012. - 384 с.
  • Лаврищева И.В. Технология программирования. - М.: Горячая линия - Телеком, 2011. - 400 с.
  • Сергеев И.С., Сухоруков А.И., Шестаков А.А. Программирование: учебник для вузов. - М.: БИНОМ. Лаборатория знаний, 2013. - 512 с.