Compartilhar via


Tipos F#

Este tópico descreve os tipos que são usados no F# e como os tipos F# são nomeados e descritos.

Resumo de tipos F#

Alguns tipos são considerados tipos primitivos, como o tipo booliano bool e tipos de ponto flutuante e integral de vários tamanhos, que incluem tipos para bytes e caracteres. Esses tipos são descritos em Tipos Primitivos.

Outros tipos integrados à linguagem incluem tuplas, listas, matrizes, sequências, registros e uniões discriminadas. Se você tiver experiência com outras linguagens do .NET e estiver aprendendo F#, leia os tópicos de cada um desses tipos. Esses tipos específicos de F# dão suporte a estilos de programação comuns a linguagens de programação funcionais. Muitos desses tipos têm módulos associados na biblioteca F# que tem suporte a operações comuns nesses tipos.

O tipo de uma função inclui informações sobre os tipos de parâmetro e o tipo de retorno.

O .NET Framework é a origem de tipos de objeto, tipos de interface, tipos de delegados e outros. Você pode definir seus próprios tipos de objeto da mesma forma que pode em qualquer outra linguagem do .NET.

Além disso, o código F# pode definir aliases, que são abreviações de tipo nomeadas, que são nomes alternativos para tipos. Você pode usar abreviações de tipo quando o tipo pode ser alterado no futuro e você deseja evitar alterar o código que depende do tipo. Ou você pode usar uma abreviação de tipo como um nome amigável para um tipo que pode tornar o código mais fácil de ler e reconhecer.

O F# fornece tipos de coleção úteis que são projetados com a programação funcional em mente. Usar esses tipos de coleção ajuda você a escrever um código mais funcional em estilo. Para obter mais informações, consulte Tipos de Coleção F#.

Sintaxe para tipos

No código F#, geralmente você precisa escrever os nomes dos tipos. Cada tipo tem um formulário sintático e você usa esses formulários sintáticos em anotações de tipo, declarações de método abstrato, declarações de delegado, assinaturas e outros constructos. Sempre que você declara um novo constructo de programa no interpretador, o interpretador imprime o nome do constructo e a sintaxe para seu tipo. Essa sintaxe pode ser apenas um identificador para um tipo definido pelo usuário ou um identificador interno, como para int ou string, mas para tipos mais complexos, a sintaxe é mais complexa.

A tabela a seguir mostra aspectos da sintaxe de tipo para tipos F#.

Tipo Sintaxe do tipo Exemplos
tipo primitivo type-name int

float

string
tipo de agregação (classe, estrutura, união, registro, enumeração e assim por diante) type-name System.DateTime

Color
abreviação de tipo type-abbreviation-name bigint
tipo totalmente qualificado namespaces.type-name

ou

modules.type-name

ou

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

matriz type-name
int[]

array<int>

int array
matriz bidimensional type-name[,] int[,]

float[,]
matriz tridimensional type-name[,,] float[,,]
tuple type-name1 * type-name2 ... Por exemplo, (1,'b',3) tem tipo int * char * int
tipo genérico type-parametergeneric-type-name

ou

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

list<'a>

Dictionary<'key, 'value>
tipo construído (um tipo genérico que tem um argumento de tipo específico fornecido) type-argumentgeneric-type-name

ou

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

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>
tipo de função que tem um único parâmetro parameter-type1 ->return-type Uma função que usa um int e retorna um string que tem tipo int -> string
tipo de função que tem vários parâmetros parameter-type1 ->parameter-type2 -> ... ->return-type Uma função que usa um int e um float e retorna um string que tem tipo int -> float -> string
função de ordem superior como um parâmetro (function-type) List.map tem tipo ('a -> 'b) -> 'a list -> 'b list
delegado delegado do function-type delegate of unit -> int
tipo flexível #type-name #System.Windows.Forms.Control

#seq<int>
Tópico Descrição
Tipos primitivos Descreve tipos simples internos, como tipos integrais, o tipo booliano e tipos de caracteres.
Tipo unit Descreve o tipo unit, um tipo que tem um valor e que é indicado por (); equivalente a void em C# e Nothing no Visual Basic.
Tuplas Descreve o tipo de tupla, um tipo que consiste em valores associados de qualquer tipo agrupado em pares, triplos, quádruplos e assim por diante.
Opções Descreve o tipo de opção, um tipo que pode ter um valor ou estar vazio.
Listas Descreve listas, que são ordenadas, série imutável de elementos todos do mesmo tipo.
matrizes Descreve matrizes, que são conjuntos ordenados de elementos mutáveis do mesmo tipo que ocupam um bloco contíguo de memória e têm tamanho fixo.
Sequências Descreve o tipo de sequência, que representa uma série lógica de valores; os valores individuais são calculados somente conforme necessário.
Registros Descreve o tipo de registro, uma pequena agregação de valores nomeados.
Uniões discriminadas Descreve o tipo de união discriminado, um tipo cujos valores podem ser qualquer um de um conjunto de tipos possíveis.
Funções Descreve valores de função.
Classes Descreve o tipo de classe, um tipo de objeto que corresponde a um tipo de referência do .NET. Os tipos de classe podem conter membros, propriedades, interfaces implementadas e um tipo base.
Estruturas Descreve o tipo struct, um tipo de objeto que corresponde a um tipo de valor do .NET. O tipo struct geralmente representa uma pequena agregação de dados.
Interfaces Descreve os tipos de interface, que são tipos que representam um conjunto de membros que fornecem determinada funcionalidade, mas que não contêm dados. Um tipo de interface deve ser implementado por um tipo de objeto para ser útil.
Representantes Descreve o tipo de delegado, que representa uma função como um objeto.
Enumerações Descreve os tipos de enumeração, cujos valores pertencem a um conjunto de valores nomeados.
Atributos Descreve os atributos, que são usados para especificar metadados para outro tipo.
Tipos de Exceção Descreve exceções, que especificam informações de erro.