Использование переменных для хранения значений

Завершено

Все программы обычно состоят из множества шагов, в которых программа работает с данными. В рамках выполнения всех этих действий обычно хранятся временные результаты, данные в именованной ссылке. Затем вы можете считывать или управлять данными позже. Именованные ссылки обычно называются переменными .

Переменные, привязка значения

Переменные называются ссылками, привязанными к значению, к которому следует ссылаться в коде. В 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#.