Использование переменных для хранения значений
Все программы обычно состоят из множества шагов, в которых программа работает с данными. В рамках выполнения всех этих действий обычно хранятся временные результаты, данные в именованной ссылке. Затем вы можете считывать или управлять данными позже. Именованные ссылки обычно называются переменными .
Переменные, привязка значения
Переменные называются ссылками, привязанными к значению, к которому следует ссылаться в коде. В F# это считается присваиванием значения. Поэтому необходимо назначить или привязать значение к именованной ссылке, переменной. Чтобы привязать значение, используйте ключевое слово let, имя ссылки и присвойте ему значение, как показано в приведенном ниже коде:
let name = "Chris"
name является именованной ссылкой, а "Chris" — его привязанное значение.
После назначения значения переменной его нельзя изменить, она неизменяема. Следующий код не будет компилироваться и создает ошибку, заявив, что-то вроде "error FS0027: это значение не мутируется".
let name = "Chris"
name <- "Luis" // not allowed
Сделать его изменяемым
Переменные можно изменить, но вам нужно сигнализировать о том, что вы хотите сделать их изменяемыми. Используя ключевое слово mutable в определении переменной, можно изменить значение без ошибки компиляции, как показано в следующем коде:
let mutable name = "Chris"
name <- "Luis" // this statement is now allowed
Типы переменных
В F# представлено множество различных типов. Многие типы связаны с хранением чисел разных размеров, с десятичными разрядами или без них. Другие типы связаны с текстовой строкой или логическими переменными. Вот список типов, с которыми вы, вероятно, столкнетесь, начиная изучать F#.
| Тип | Описание |
|---|---|
| булевая переменная (bool) | возможные значения : true или false |
| инт | Значения от -2 147 483 648 до 2 147 483 647. |
| струна | Текст Юникода |
| число с плавающей запятой, двойная точность | 64-разрядный тип с плавающей запятой. |
Тип выводится
При объявлении переменной можно сделать это с указанием типа или без него. Если при объявлении переменной тип не указан, компилятор F# лучше всего угадывает, какой тип должен быть по значению, присвоенному переменной. Рассмотрим следующие утверждения:
let age = 65 // int
let PI = 3.14 // float
let name = "my name" // string
Компилятор определяет , какие типы должны быть, и это правильно. Вы также можете более точно указать, каким должен быть тип. Чтобы назначить переменную, используйте синтаксис variableName:<type>, как в этом коде:
let sum:float = 0.0
Вывести на экран
Часто вы хотите печатать на экране. Это может быть по различным причинам, например:
- Выходные данные приложения: приложение выполняет некоторое вычисление, и вы хотите просмотреть выходные данные.
- Отладка. В рамках отладки кода может потребоваться вывести результат в заданной точке, чтобы понять, что происходит неправильно.
Существуют и другие причины для вывода на экран, но предыдущие два сценария являются наиболее распространенными.
Как бы вы вывели на экран? В F#есть три различных функции, которые можно использовать. Они printf, printfnи даже Console.WriteLine. Так что же разница?
-
printf: он выводится наstdoutвстроенный (без символа новой строки). -
printfn: выводит вstdoutи добавляет символ новой строки. -
Console.WriteLine: эта функция находится в пространстве именSystemи работает на всех языках .NET.
Теперь вы знаете разницу, но какой из них следует использовать? Ну, printf и printfn считаются более идиоматичными и предпочтительнее в F#.
Форматирование
В рамках печати на экране может потребоваться объединить текст и цифры. Кроме того, может потребоваться, чтобы выходные данные были отформатированы определенным образом, например с помощью:
Позиционные аргументы: для форматирования можно использовать функцию .NET, например , которая использует позиционные аргументы, такие
String.FormatкакString.Format("My name is {0} and I live in {1}", "Chris", "UK").Интерполяция строк: другой способ объединения переменных и текста — использовать то, что называется интерполяцией. Чтобы использовать его, необходимо предшествовать строке знаком
$и указать заполнители в квадратных скобках{}. Ниже приведен пример использования интерполяции:let name = "Luis" let company = "Microsoft" printfn $"Name: {name}, Company: {company}"Можно также добавить выражения между квадратными скобками, например:
let firstNumber = 2000 let secondNumber = 21 printfn $"The year is: {firstNumber + secondNumber}"Заметка
Нет проверки типов с помощью интерполяции, поэтому может показаться простым для использования. Обязательно сочетайте вещи правильно.
Описатели. Вы также можете использовать описатели формата в рамках того, что вы пытаетесь распечатать. Использование описателей является наиболее часто используемым способом форматирования в F#. Ниже приведен пример:
let name = "Chris" printf "Hi %s" name // prints: Hi ChrisЗдесь вы можете увидеть, как форматтер
%sиспользуется для объединения первой строки с переменнойname.Заметка
При использовании модулей форматирования, таких как %s или %i, компилятор проверяет типы. Если позиционный аргумент не соответствует указанному типу, он вызывает ошибку.
Описатели формата
Существует множество спецификаторов формата. Ниже приведены некоторые из них, с которыми вы, скорее всего, столкнулись.
| Спецификатор | Описание | Пример |
|---|---|---|
| %s | Используется для строк и неискаченного содержимого | printf "Привет %s" name |
| %d, %i | Форматируется как десятичное целое число, со знаком, если базовый целочисленный тип имеет знак. | printf "Возраст: %i" 65 |
| %b | Булевый true или false |
printf "Установка на: %b" истинно |
Есть дополнительная информация о форматировании. Если вы хотите узнать обо всех возможностях, ознакомьтесь с форматированием в документе F#.