Типы языка F#

В этом разделе описываются типы, используемые в F# и как называются и описываются типы F#.

Сводка типов F#

Некоторые типы считаются примитивными типами, такими как логический тип bool и целочисленный и с плавающей запятой различных размеров, которые включают типы для байтов и символов. Эти типы описаны в примитивных типах.

Другие типы, встроенные в язык, включают кортежи, списки, массивы, последовательности, записи и дискриминированные объединения. Если у вас есть опыт работы с другими языками .NET и вы изучаете F#, ознакомьтесь с разделами для каждого из этих типов. Эти типы F#поддерживают стили программирования, которые являются общими для функциональных языков программирования. Многие из этих типов имеют связанные модули в библиотеке F#, поддерживающие распространенные операции с этими типами.

Тип функции содержит сведения о типах параметров и типе возвращаемого значения.

Платформа .NET Framework является источником типов объектов, типов интерфейсов, типов делегатов и других. Вы можете определить собственные типы объектов так же, как и на любом другом языке .NET.

Кроме того, код F# может определять псевдонимы, которые называются сокращенными типами, которые являются альтернативными именами для типов. Вы можете использовать сокращения типов, когда тип может измениться в будущем, и вы хотите избежать изменения кода, который зависит от типа. Кроме того, вы можете использовать сокращение типа в качестве понятного имени для типа, который может упростить чтение и понимание кода.

F# предоставляет полезные типы коллекций, разработанные с учетом функционального программирования. Использование этих типов коллекций помогает создавать код, более функциональный в стиле. Дополнительные сведения см. в разделе "Типы коллекций F#".

Синтаксис для типов

В коде F# часто приходится записывать имена типов. Каждый тип имеет синтаксическую форму, и эти синтаксические формы используются в заметках типов, абстрактных объявлениях методов, объявлениях делегатов, подписях и других конструкциях. Когда вы объявляете новую конструкцию программы в интерпретаторе, интерпретатор выводит имя конструкции и синтаксис для его типа. Этот синтаксис может быть просто идентификатором определяемого пользователем типа или встроенным идентификатором, например для int или string, но для более сложных типов синтаксис является более сложным.

В следующей таблице показаны аспекты синтаксиса типов для типов F#.

Тип Синтаксис типа Примеры
примитивный тип имя типа int

float

string
агрегатный тип (класс, структура, объединение, запись, перечисление и т. д.) имя типа System.DateTime

Color
Сокращение типа type-abbreviation-name bigint
полный тип namespaces.type-name

or

modules.type-name

or

namespaces.modules.type-name
System.IO.StreamWriter
array type-name[] или

Массив имен типа
int[]

array<int>

int array
двухмерный массив type-name[,] int[,]

float[,]
трехмерный массив type-name[,,] float[,,]
tuple type-name1 * type-name2 ... Например, (1,'b',3) имеет тип int * char * int
универсальный тип type-parametergeneric-type-name

or

generic-type-name<type-parameter-list>
'a list

list<'a>

Dictionary<'key, 'value>
сконструированный тип (универсальный тип с заданным аргументом типа) type-argumentgeneric-type-name

or

generic-type-name<type-argument-list>
int option

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>
Тип функции с одним параметром параметр-type1 ->return-type Функция, принимаюющая int и возвращающая string тип, int -> string
Тип функции с несколькими параметрами parameter-type1> -parameter-type2 -> ... ->return-type Функция, принимаюющая int и возвращающая floatstring тип int -> float -> string
Функция более высокого порядка в качестве параметра (тип функции) List.map имеет тип ('a -> 'b) -> 'a list -> 'b list
delegate делегат типа функции delegate of unit -> int
гибкий тип #имя типа #System.Windows.Forms.Control

#seq<int>
Тема Описание
Типы-примитивы Описывает встроенные простые типы, такие как целочисленные типы, логический тип и типы символов.
Тип единиц Описывает unit тип, тип, имеющий одно значение и обозначаемый (); эквивалентный void c# и Nothing в Visual Basic.
Кортежи Описывает тип кортежа, тип, состоящий из связанных значений любого типа, сгруппированного в парах, тройных, четырехкратных и т. д.
Параметры Описывает тип параметра, тип, который может иметь значение или быть пустым.
Списки Описывает списки, которые упорядочены, неизменяемые ряды элементов одного типа.
Массивы Описывает массивы, которые упорядочены наборами мутируемых элементов одного типа, которые занимают непрерывный блок памяти и имеют фиксированный размер.
Последовательности Описывает тип последовательности, представляющий логический ряд значений; отдельные значения вычисляются только по мере необходимости.
Записи Описывает тип записи, небольшой агрегат именованных значений.
Размеченные объединения Описывает тип различаемого объединения, тип, значения которого могут быть одним из возможных типов.
Функции Описание значений функций.
Классы Описывает тип класса, тип объекта, соответствующий ссылочного типа .NET. Типы классов могут содержать элементы, свойства, реализованные интерфейсы и базовый тип.
Структуры Описывает struct тип объекта, соответствующий типу значения .NET. Тип struct обычно представляет небольшой агрегат данных.
Интерфейсы Описывает типы интерфейсов, которые представляют набор элементов, которые предоставляют определенные функциональные возможности, но не содержат данных. Тип интерфейса должен быть реализован типом объекта, чтобы быть полезным.
Делегаты Описывает тип делегата, представляющий функцию в качестве объекта.
Перечисления Описывает типы перечисления, значения которых принадлежат набору именованных значений.
Атрибуты Описывает атрибуты, которые используются для указания метаданных для другого типа.
Типы исключения Описывает исключения, которые указывают сведения об ошибке.