Основы программирования на F#

Оператор let. Привязка значений

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

Возможно, наиболее важным оператором, без которого сложно обойтись, является оператор let. Этот оператор позволяет определить значения (value) и связать их с данными или действиями. То есть по сути значения представляют некоторые данные или действия, которые мы можем использовать в программе.

Общая форма определения значения:

let название_значения = данные/действия

После названия значения через знак равно(=) указываются связываемые с этим значением данные или действия.

В качестве названия значения может выступать произвольное название. Например, определим идентификатор name:

let name

Однако подобное выражение неполное: нам надо что-то связать с этим значением. Что можно связать со значением? Это могут быть какие-то конкретные данные - числа, строки, хотя это также могут быть и целые действия. В данном случае мы сначала рассмотрим привязку данных. Например, передадим значению name какую-нибудь строку:

let name = "Tom"

Таким образом, мы определили значение name, которое связано со строкой "Tom" (по сути хранит строку "Tom").

Теперь определим программу, где используем этот значение:

let name = "Tom"
printfn "%s" name

В данном случае сначала определяем значение name, которое хранит строку "Tom". Затем мы передаем это значение для вывода на консоль функции printfn(). Для этого после названия функции printfn сначала идет строка "%s". %s указывает, что на месте этих символов (если точнее этого спецификатора) будет вставляться строка (значение name у нас представляет строку). Далее после "%s" указывается, что будет вставляться вместо %s, то есть значение name.

Запустим данную программу, и на консоль будет выведено значение name, то есть строка "Tom"

C:\Users\eugen\fsharp>dotnet fsi program.fsx
Tom
C:\Users\eugen\fsharp> 

Таким образом, как мы видим, значения позволяют сохранять данные, которые далее могут использоваться в программе.

Подобным образом можно определять и другие значения, например:

let name = "Tom"
printfn "Name: %s" name

let age = 39
printfn "Age: %d" age

Здесь также определяется значение age, которое представляет число 39. Поскольку оно представляет целое число, то для его вывода на консоль нам надо использовать спецификатор %d. Таким образом, в последней строке кода при выводе на консоль в строку "Age %d" вместо %d будет вставляться значение age. Консольный вывод программы:

C:\Users\eugen\fsharp>dotnet fsi program.fsx
Name: Tom
Age: 39
C:\Users\eugen\fsharp> 

Изменяемые значения

Все значения по умолчанию являются неизменяемыми (immutable). Например, определим следующую программу:

let name = "Tom"
printfn "%s" name    // Tom

name = "Bob"    // здесь мы хотим поменять значение на "Bob"
printfn "%s" name    // Мы хотим, чтобы здесь выводило "Bob", но выводит "Tom"

Консольный вывод программы:

Tom
Tom

Здесь мы видим, что несмотря на строку кода name = "Bob" данные значения name не изменились. В этом плане значения в F# похожи на константы в некоторых языках программирования. Immutablity/неизменяемость делает программу более предсказуемой и позволяет гарантировать, мы будем использовать те значения, которые мы ожидаем. Однако иногда необходимо все таки менять значения. В этом случае значение определяется с помощью ключевого слова mutable:

let mutable name = "Tom"
printfn "%s" name    // Tom

name <- "Bob"
printfn "%s" name    // Bob

При этом чтобы присвоить значению новые данные применяется оператор <-.

Консольный вывод программы:

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