Результат функции

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

В языке F# функция возвращает некоторый результат. Причем любая функция возвращает результат.

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

Например, возьмем следующую функцию

let sum x y = x + y

Здесь тело функции состоит из одного выражения: x + y. Поэтому функция sum будет возвращать сумму значений параметров x и y. По умолчанию компилятор расценивает эти параметры как параметры типа int (так как к ним применяется арифметическая операция), поэтому возвращаемое функцией значение также будет иметь тип int.

При вызове функции мы можем получить ее возвращаемое значение:

let sum x y = x + y

let result = sum 10 30

printfn $"result = {result}"    // result = 40

Здесь результат вызова функции sum 10 30 передается значению result. То есть здесь result будет хранить число 40.

Теперь усложним функцию:

let sum x y = 
    printfn $"x = {x}"
    printfn $"y = {y}"
    let result = x + y
    result

let n = sum 5 3

printfn $"n = {n}"    // n = 8

Теперь функция sum состоит из четырех выражений. На первых двух строках выводим значения параметров. На третей строке вычисляем их сумму и передаем значению result. А вот последней строкой является

result

Поэтому это значение и будет возвращаться функцией в качестве возвращаемого результата. То есть фактически функция опять же возвращает сумму параметров. Таким образом, значение на последней будет результатом функции.

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

let printMessage message = 
    printfn $"Message: {message}"

let result = printMessage "Hello"	// result имеет тип unit

В данном случае функция printMessage возвращает результат, который возвращается вызовом printfn $"Message: {message}". Здесь значение типа unit

Типизация типа результата

Также мы можем явно указать тип результата функции. Для этого тип результата функции указывается после ее параметров через двоеточие:

let имя_функции параметр1 параметр2 ... параметрN : тип_результата = действия_фукции

Например:

let sum x y : int64 = 
    printfn $"x = {x}"
    printfn $"y = {y}"
    let result = x + y
    result

let n = sum 600L 300L
printfn $"n = {n}"  // n = 900

Здесь функция sum возвращает значение типа int64. Поскольку компилятор видит, что при операции сложения параметров должно сформироваться значение типа int64, то параметры также будут рассматриваться как значения типа int64. Соответственно при вызове функции ей надо передать значения этого типа.

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