Конструкция if проверяет некоторое условие и в зависимости от того, какой результат возвращает это условие - true или false, выполняет те или иный действия. Формальное определение конструкции:
if условие then действия_если_условие_верно [ else действия_если_условие_не_верно ]
Само условие указывается после оператора if. Условие представляет любое выражение, которое возвращает значение типа bool
, то есть либо значение
true
, либо значение false
.
После условия идет ключевое слово then, после которого указываются действия, выполняемые, если условие истинно (то есть возвращает true
).
Например:
let x = 20 if x > 10 then printfn "x больше 10"
Здесь конструкция if
проверяет условие x > 10
, то есть больше ли значение x
, чем число 10. И если это условие возвращает true
,
то выполняются действия после оператора then:
printfn "x больше 10"
Поскольку в данном случае это условие истинно, то есть значение x действительно больше 10, то на консоль будет выведена строка "x больше 10"
Если мы хотим также определить альтернативные действия, которые выполняются, если условие НЕверно, то в этом случае можно
использовать необязательный оператор else. После него указываются действия, выполняемые, если условие возвращает false
.
Например, в примере выше значение x может быть больше 10, а может быть меньш или равно. Отразим это в коде:
let x = 8 if x > 10 then printfn "x больше 10" else printfn "x меньше или равен 10"
В данном случае условие > 10
неверное, поскольку значение x равно 8. Поэтому блок then
игнорируется и будет выполняться блок else
,
который выведет на консоль строку "x меньше или равен 10"
.
Если надо проверить альтернативные дополнительные условия, то можно использовать оператор elif, после которого указываются дополнительные условия:
elif дополнительное_условие then действия_если_дополнительное_условие_истинно
Так, в примере выше значение x имеет три варианта: больше 10, меньше 10 и равно 10. Определим соответствующую конструкцию if:
let x = 8 if x > 10 then printfn "x больше 10" elif x < 10 then printfn "x меньше 10" else printfn "x равен 10"
В данном случае условие из блока elif
- x < 10
истинно, поэтому будет выполняться код printfn "x меньше 10"
Выражений elif
может быть произвольное количество. Например:
let x = 8 if x = 6 then printfn "x = 6" elif x = 7 then printfn "x = 7" elif x = 8 then printfn "x = 8" elif x = 9 then printfn "x = 9" else printfn "undefined"
Если блоки then
и else
должны выполнять несколько выражений (а не одно выражение, как в примерах выше), то каждое выражение
располагается на следующей строке и предваряется отступом (как и в случае с многострочной функцией):
let country = "france" if country = "france" then printfn "Выбрана страна: Франция" printfn "Язык: французский" elif country = "spain" then printfn "Выбрана страна: Испания" printfn "Язык: испанский" else printfn "Выбрана страна: неопределена" printfn "Язык: неопределен"
Но конструкция if..then не просто выполняет некоторые действия в зависимости от условия. Она еще, подобно функции возвращает определенное значение:
let n1 = 10 let n2 = 4 let operation = "+" let result = if operation = "+" then n1 + n2 elif operation = "-" then n1 - n2 else n1 * n2 printfn $"Result = {result}" // Result = 14
В данном случае в зависимости от значения operation (знака операции) выполняем над числами n1 и n2 ту или иную операцию. Возращаемый результат указывается
после then/else
. Затем результат передается значению result
.
Если после операторов then/else
указано несколко выражений, то результат определяет последнее выражение:
let countryCode = "de" let country = if countryCode = "fr" then printfn "Выбрана страна: Франция" printfn "Язык: французский" "France" elif countryCode = "de" then printfn "Выбрана страна: Германия" printfn "Язык: немецкий" "Germany" else printfn "Страна по умолчанию: США" printfn "Язык: английский" "USA" printfn $"country: {country}" // Germany
В данном случае из if возвращается в завимости от условия одна из строк: "France"/ "Germany"/ "USA".
Стоит отметить, что если конструкция if
не использует else
, то она должна возвращать значение типа unit
:
let countryCode = "fr" let result = if countryCode = "fr" then printfn "Выбрана страна: Франция" printfn "Язык: французский"
Здесь значение result
представляет тип unit
(функция printfn
возвращает значение типа unit
).