«Очень трудно сделать правильный выбор… Но самое трудное — вообще не делать выбора.»
Из дневников Буриданова осла
Условные операторы — это один из ключевых элементов программирования, позволяющий управлять последовательностью выполнения операторов в программе в зависимости от результата проверки определённых условий. Другими словами, это как развилка на дороге: программа «решает», в каком направлении ей «двигаться» дальше, основываясь на результатах проверки условий.
Основная идея работы условного оператора проста:
- Первый шаг — проверка условия: программа проверяет, является ли некоторое условие истинным или ложным.
- Второй шаг — выполнение (или невыполнение) блока кода: если условие истинно, выполняется один блок кода. Если условие ложно, может выполняться другой блок кода (или ничего).
История вопроса
Условные операторы появились практически одновременно с первыми языками программирования. В 1940-х годах, когда программирование только зарождалось, первые языки, такие как язык ассемблера, уже имели примитивные механизмы для условного выполнения команд. С появлением языков высокого уровня, таких как Fortran (1957) и ALGOL (1958), условные операторы стали более выразительными и удобными. Например, в Fortran появился оператор IF, который позволял выполнять определённые действия в зависимости от условия. С тех пор условные операторы стали неотъемлемой частью практически всех языков программирования. Современные языки, такие как C, C++, Python, JavaScript и т.д., используют улучшенные и более понятные синтаксисы для условных конструкций. Однако, их основная идея осталась неизменной: выполнять код в зависимости от истинности или ложности условия, и в основе этих операторов лежит все та же простейшая ассемблерная конструкция.
Оператор if
Обычно для проверки условия и последующего выбора, какой фрагмент кода будет выполняться, в большинстве языков программирования используется оператор if («если»). В отличие от оператора безусловного перехода goto, оператор if является оператором условного перехода или перехода по условию. Проверяемое условие всегда связано со значениями переменных. Таким образом, последовательность выполнения программы зависит от значений переменных, проверяемых в условии оператора if. То есть, мы можем управлять последовательностью выполнения операторов в программе с помощью изменения значений переменных.
Использование условного оператора if — это самый простой и распространённый способ ветвления в программах. Он проверяет указанное в нем условие и выполняет блок кода, если условие выполнено (истинно) или выполняет переход к коду, следующему за оператором, если условие не выполнено (ложно):
if (Проверяемое условие)
[Начало блока кода]
Блок кода, который выполняется, только если условие истинно.
[Конец блока кода]
[Конец оператора if]
Код, который выполняется после оператора if в любом случае.
Пример на языке Small Basic
If X > 10 Then
TextWindow.WriteLine(«X больше 10»)
EndIf
С или С++
if (x > 5)
{
printf(«x больше 5»);
}
Оператор if-else
Такая конструкция оператора if позволяет неплохо управлять программным кодом, но в ряде случаев она не слишком удобна. Например, для случая, когда нам надо выбрать один из двух различных блоков кода в зависимости от результатов проверки условия нам придётся использовать два оператора if:
if (Проверяемое условие)
[Начало блока кода]
Блок кода, который выполняется, только если условие истинно.
[Конец блока кода]
[Конец первого оператора if]
if (Проверяемое альтернативное условие)
[Начало блока кода]
Блок кода, который выполняется, только если альтернативное условие истинно.
[Конец блока кода]
[Конец второго оператора if]
Код, который выполняется после оператора if в любом случае.
Пример на языке С или С++
if (x == 5)
{
printf(«x равно 5»);
}
if (x != 5)
{
printf(«x не равно 5»);
}
Подобных сложностей можно избежать, используя расширенную форму оператора if — else:
if (Проверяемое условие)
[Начало блока кода]
Блок кода, который выполняется, только если условие истинно.
[Конец блока кода]
else
[Начало блока кода]
Блок кода, который выполняется, только если условие ложно.
[Конец блока кода]
[Конец оператора if-else]
Код, который выполняется после оператора if-else в любом случае.
Пример на языке Small Basic
If X > 10 Then
TextWindow.WriteLine(«X больше 10»)
Else
TextWindow.WriteLine(«X меньше или равно 10»)
EndIf
Пример на языке С или С++
if (x == 5)
{
printf(«x равно 5»);
}
else
{
printf(«x не равно 5»);
}
Введение конструкции if-else также помогает избежать ошибок при формировании сложных альтернативных условий.
Оператор else-if
Оператор else-if (фактически — if-else-if) используется для проверки нескольких условий последовательно. Если первое условие ложно, тогда проверяется следующее, и так далее. Фактически, это просто оператор if-else, состыкованный с другим таким же оператором if или if-else
if (Проверяемое условие)
[Начало блока кода]
Блок кода, который выполняется, только если первое условие истинно.
[Конец блока кода]
else if (Проверяемое условие) — этот оператор if проверяет условие, только если первое условие ложно.
[Начало блока кода]
Блок кода, который выполняется, только если второе условие истинно.
[Конец блока кода]
[Конец оператора else-if]
Код, который выполняется после оператора else-if в любом случае.
или
if (Проверяемое условие)
[Начало блока кода]
Блок кода, который выполняется, только если первое условие истинно.
[Конец блока кода]
else if (Проверяемое условие) — этот оператор if проверяет условие, только если первое условие ложно.
[Начало блока кода]
Блок кода, который выполняется, только если второе условие истинно.
[Конец блока кода]
else
[Начало блока кода]
Блок кода, который выполняется, только если второе условие ложно.
[Конец блока кода]
[Конец оператора else-if]
Код, который выполняется после оператора else-if в любом случае.
Как видите, эта конструкция может быть очень длинной.
Тернарный оператор
Тернарный оператор — это сокращённая форма простого оператора if-else, которая позволяет записать условие и код в одну строку.
(Проверяемое условие) ? Оператор1 : Оператор2;
Если условие истинно, выполняется Оператор1, иначе — Оператор2.
Оператор switch
Говоря об условных операторах, нельзя не упомянуть оператор switch. Оператор switch используется для выбора для выполнения одного из многих блоков кода на основе значения переменной.
Вот такой синтаксис имеет этот оператор в языках С или С++
switch (переменная)
{
case значение1:
// Блок кода для значение1
break;
case значение2:
// Блок кода для значение2
break;
default:
// Блок кода, если ни одно из значений не совпало
}
Если значение проверяемой переменной совпадает с одним из значений, указанным в операторе case, то выполняется соответствующий блок кода, а затем оператор break обеспечивает выход из самого блока switch.
Именно наличие условных опереторов позволяет делать все алгоритмы нелинейными. В основе всех операций ветвления, выбора, проверки условий находятся условные операторы. Если вы вспомните циклы, то они тоже построены на элементарных условных операторах. Именно условные операторы заставляют нас рисовать сложные блок-схемы алгоритмов.
Возможные ошибки в условных операторах
Ошибки в логических выражениях: Неправильное использование операторов сравнения, логических операторов может привести к некорректной работе программы.
Отсутствие фигурных скобок: В некоторых языках (например, C, C++) фигурные скобки обязательны для обозначения блоков кода, выполняемых при выполнении условия.
Неправильное использование оператора else: Оператор else должен идти сразу после блока кода оператора if или else if.
1. Пропуск фигурных скобок
Если вы забудете поставить фигурные скобки {} после условия, то только первая строка после if будет считаться частью условного блока. Это может привести к логическим ошибкам.
Пример ошибки на C:
c
Copy
int x = 10;
if (x > 5)
printf(«x больше 5\n»);
printf(«Эта строка выполнится всегда, независимо от условия.\n»);
2. Использование оператора присваивания вместо сравнения
Одна из самых распространённых ошибок — использование оператора присваивания = вместо оператора сравнения ==.
Пример ошибки на JavaScript:
javascript
Copy
let x = 5;
if (x = 10) { // Ошибка: присваивание вместо сравнения
console.log(«x равно 10»);
}
3. Забытый break в операторе switch
Если вы забудете поставить break после каждого case в операторе switch, выполнение продолжится в следующем case, что может привести к неожиданным результатам.
Пример ошибки на PHP:
php
Copy
$day = «Monday»;
switch ($day) {
case «Monday»:
echo «Сегодня понедельник.»;
case «Tuesday»:
echo «Сегодня вторник.»;
break;
}
// Выведет: «Сегодня понедельник.Сегодня вторник.»
Приметы
Small Basic:
Фрагмент кода
If number > 10 Then
TextWindow.WriteLine(«Число больше 10»)
EndIf
C:
C
#include <stdio.h>
int main() {
int age = 25;
if (age >= 18) {
printf(«Вы совершеннолетний\n»);
} else {
printf(«Вы несовершеннолетний\n»);
}
return 0;
}
C++:
C++
#include <iostream>
using namespace std;
int main() {
int x = 10, y = 20;
if (x > y) {
cout << «x больше y» << endl;
} else if (x == y) {
cout << «x равно y» << endl;
} else {
cout << «x меньше y» << endl;
}
return 0;
}
JavaScript:
JavaScript
let isRaining = true;
if (isRaining) {
console.log(‘Возьми зонтик’);
} else {
console.log(‘Можно идти без зонтика’);
}
PHP:
PHP
$temperature = 25;
if ($temperature > 30) {
echo «Жарко!»;
} elseif ($temperature < 10) {
echo «Холодно!»;
} else {
echo «Комфортная температура.»;
}
1. Small Basic
smallbasic
Copy
‘ Пример использования условного оператора в Small Basic
TextWindow.Write(«Введите число: «)
number = TextWindow.ReadNumber()
If number > 0 Then
TextWindow.WriteLine(«Число положительное.»)
ElseIf number < 0 Then
TextWindow.WriteLine(«Число отрицательное.»)
Else
TextWindow.WriteLine(«Число равно нулю.»)
EndIf
2. C
c
Copy
#include <stdio.h>
int main() {
int x = 10;
if (x > 5) {
printf(«x больше 5\n»);
} else {
printf(«x меньше или равно 5\n»);
}
return 0;
}
3. C++
cpp
Copy
#include <iostream>
using namespace std;
int main() {
int x = 10;
if (x > 5) {
cout << «x больше 5» << endl;
} else {
cout << «x меньше или равно 5» << endl;
}
return 0;
}
4. JavaScript
javascript
Copy
let age = 18;
if (age >= 18) {
console.log(«Вы совершеннолетний.»);
} else {
console.log(«Вы несовершеннолетний.»);
}
5. PHP
php
Copy
$score = 85;
if ($score >= 90) {
echo «Отлично!»;
} else if ($score >= 70) {
echo «Хорошо!»;
} else {
echo «Попробуйте ещё раз!»;
}
13.Циклы с условием.→
Поделиться: