Введение

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

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

Терминология

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

История и развитие

В ранних языках программирования, особенно в некоторых диалектах BASIC на домашних компьютерах в 1980-х годах, оператор `if–then` мог содержать только операторы `GOTO` (эквивалентные инструкции перехода). Это приводило к трудночитаемому стилю программирования, известному как "программирование спагетти", а программы, написанные в этом стиле, назывались "спагетти-кодом". В результате структурированное программирование, которое позволяет размещать (практически) любые операторы в блоках внутри оператора `if`, приобрело популярность и стало нормой даже в большинстве сообществ программистов на BASIC. Эти механизмы и принципы были основаны на более раннем, но более продвинутом семействе языков ALGOL, а языки, подобные ALGOL, такие как Pascal и Modula 2, на протяжении многих лет оказывали влияние на современные варианты BASIC. Хотя при использовании только операторов `GOTO` в `if–then` можно написать программы, которые не будут представлять собой "спагетти-код" и будут столь же хорошо структурированы и читаемы, как программы, написанные на языке структурированного программирования, структурированное программирование упрощает это и способствует соблюдению принципов структурирования. Структурированные операторы `if–then–else`, подобные приведенному выше примеру, являются одним из ключевых элементов структурированного программирования и присутствуют в большинстве популярных языков программирования высокого уровня, таких как C, Java, JavaScript и Visual Basic.

Если тогда другие выражения

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

Visual Basic (визуальный базовый)

В Visual Basic и некоторых других языках предусмотрена функция с именем IIf, которую можно использовать как условное выражение. Однако она не работает как настоящее условное выражение, поскольку обе ветви – и для истинного значения, и для ложного – всегда вычисляются; просто результат одной из них игнорируется, а результат другой возвращается функцией IIf.

Прогноз

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

Выбор системы перекрестных ссылок

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

Язык программирования | Структурированный | условный оператор | переключатель | выбор | арифметический | сопоставление с образцом | оператор then | оператор else | else if
---|---|---|---|---|---|---|---|---
Ada | Да | if | switch | case | Да | Да | then | else | else if
APL | Да | / | | | Да | | | |
Bash shell | Да | if | case | select | Да | | then | else | elif
C, C++ | Да | if | switch | case | Да | | then | else | else if
C# | Да | if | switch | case | Да | Да | then | else | else if
COBOL | Да | IF | | | Да | | THEN | ELSE | ELSE IF
Eiffel | Да | if | case | select | Да | Да | then | else | else if
F# | Да | if | match | | Да | Да | then | else | else if
Fortran 90 | Да | IF | | | Да | | THEN | ELSE | ELSE IF
Go | Да | if | switch | case | Да | Да | then | else | else if
Haskell | Да | if | case | | Да | Да | then | else | else if
Java | Да | if | switch | case | Да | Да | then | else | else if
ECMAScript (JavaScript) | Да | if | switch | case | Да | Да | then | else | else if
Mathematica | Да | If | Switch | Case | Да | PatternMatching | Then | Else | ElseIf
Oberon | Да | IF | CASE | | Да | | THEN | ELSE | ELSEIF
Perl | Да | if | | | Да | | then | else | elsif
PHP | Да | if | switch | case | Да | | then | else | elseif
Pascal, Object Pascal (Delphi) | Да | if | case | | Да | | then | else | else if
Python | Да | if | | | Да | Да | then | else | elif
QuickBASIC | Да | IF | SELECT CASE | CASE | Да | | THEN | ELSE | ELSEIF
Ruby | Да | if | case | when | Да | Да | then | else | elsif
Rust | Да | if | match | | Да | Да | then | else | else if
Scala | Да | if | match | case | Да | Да | then | else | else if
SQL | Да | CASE | | | Да | | THEN | ELSE | ELSEIF
Swift | Да | if | switch | case | Да | Да | then | else | else if
Tcl | Да | if | switch | case | Да | | then | else | elseif
Visual Basic, classic | Да | If | Select Case | Case | Да | | Then | Else | ElseIf
Visual Basic NET | Да | If | Select Case | Case | Да | | Then | Else | ElseIf
Windows PowerShell | Да | if | switch | case | Да | | then | else | elseif