Конструкция if..then..else

Последнее обновление: 10.12.2023

Конструкция 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

Если мы хотим также определить альтернативные действия, которые выполняются, если условие НЕверно, то в этом случае можно использовать необязательный оператор 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, после которого указываются дополнительные условия:

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

Если блоки 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).

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850