Tipos en F#

En este tema se describen los tipos que se usan en F# y cómo se denominan y describen los tipos de F#.

Resumen de tipos de F#

Algunos tipos se consideran tipos primitivos, como el tipo booleano y los tipos enteros y de punto flotante de varios tamaños, que incluyen tipos bool para bytes y caracteres. Estos tipos se describen en Tipos primitivos.

Otros tipos integrados en el lenguaje incluyen tuplas, listas, matrices, secuencias, registros y uniones discriminadas. Si tiene experiencia con otros lenguajes .NET y está aprendiendo F#, debe leer los temas de cada uno de estos tipos. Estos tipos específicos de F# admiten estilos de programación que son comunes a los lenguajes de programación funcionales. Muchos de estos tipos tienen módulos asociados en la biblioteca de F# que admiten operaciones comunes en estos tipos.

El tipo de una función incluye información sobre los tipos de parámetro y el tipo de valor devuelto.

El .NET Framework es el origen de los tipos de objeto, los tipos de interfaz, los tipos delegados y otros. Puede definir sus propios tipos de objeto igual que en cualquier otro lenguaje .NET.

Además, el código de F# puede definir alias, que son abreviaturas de tipo con nombre, que son nombres alternativos para los tipos. Puede usar abreviaturas de tipo cuando el tipo pueda cambiar en el futuro y desea evitar cambiar el código que depende del tipo. O bien, puede usar una abreviatura de tipo como nombre descriptivo para un tipo que pueda facilitar la lectura y la información del código.

F# proporciona tipos de colección útiles diseñados pensando en la programación funcional. El uso de estos tipos de colección le ayuda a escribir código que sea más funcional en el estilo. Para obtener más información, vea Tipos de colección de F#.

Sintaxis para tipos

En el código de F#, a menudo tiene que escribir los nombres de los tipos. Cada tipo tiene una forma sintáctica y se usan estas formas sintácticas en anotaciones de tipo, declaraciones de método abstractos, declaraciones de delegado, firmas y otras construcciones. Cada vez que se declara una nueva construcción de programa en el intérprete, el intérprete imprime el nombre de la construcción y la sintaxis de su tipo. Esta sintaxis podría ser simplemente un identificador para un tipo definido por el usuario o un identificador integrado como para o , pero para tipos más complejos, la sintaxis int string es más compleja.

En la tabla siguiente se muestran aspectos de la sintaxis de tipos para los tipos de F#.

Tipo Sintaxis de tipos Ejemplos
tipo primitivo type-name int

float

string
tipo de agregado (clase, estructura, unión, registro, enumeración, y así sucesivamente) type-name System.DateTime

Color
abreviatura de tipo type-abbreviation-name bigint
tipo completo namespaces.type-name

o

modules.type-name

o

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

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 ejemplo, (1,'b',3) tiene el tipo int * char * int
tipo genérico type-parameter generic-type-name

o

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

list<'a>

Dictionary<'key, 'value>
tipo construido (un tipo genérico que tiene un argumento de tipo específico proporcionado) type-argument generic-type-name

o

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

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>
Tipo de función que tiene un único parámetro parameter-type1 - > return-type Una función que toma y int devuelve un string tipo tiene int -> string
Tipo de función que tiene varios parámetros parameter-type1 - > parameter-type2 - > ... - > return-type Una función que toma y int y devuelve un tipo float string tiene int -> float -> string
función de orden superior como parámetro (tipo de función) List.map tiene el tipo ('a -> 'b) -> 'a list -> 'b list
delegado delegado de tipo de función delegate of unit -> int
tipo flexible #type-name #System.Windows.Forms.Control

#seq<int>
Tema Descripción
Tipos primitivos Describe los tipos simples integrados, como los tipos enteros, el tipo booleano y los tipos de caracteres.
Unit (Tipo) Describe el tipo , un tipo que tiene un valor y que indica (); equivalente a en C# y unit void en Nothing Visual Basic.
Tuplas Describe el tipo de tupla, un tipo que consta de valores asociados de cualquier tipo agrupados en pares, triples, cuádros, y así sucesivamente.
Opciones Describe el tipo de opción, un tipo que puede tener un valor o estar vacío.
Listas Describe las listas, que están ordenadas, series inmutables de elementos del mismo tipo.
Matrices Describe matrices, que son conjuntos ordenados de elementos mutables del mismo tipo que ocupan un bloque contiguo de memoria y tienen un tamaño fijo.
Secuencias Describe el tipo de secuencia, que representa una serie lógica de valores; Los valores individuales solo se calculan según sea necesario.
Registros Describe el tipo de registro, un pequeño agregado de valores con nombre.
Uniones discriminadas Describe el tipo de unión discriminada, un tipo cuyos valores pueden ser cualquiera de un conjunto de tipos posibles.
Funciones Describe los valores de función.
Clases Describe el tipo de clase, un tipo de objeto que corresponde a un tipo de referencia de .NET. Los tipos de clase pueden contener miembros, propiedades, interfaces implementadas y un tipo base.
Structs Describe el tipo struct , un tipo de objeto que corresponde a un tipo de valor de .NET. El struct tipo suele representar un pequeño agregado de datos.
Interfaces Describe los tipos de interfaz, que son tipos que representan un conjunto de miembros que proporcionan cierta funcionalidad pero que no contienen datos. Un tipo de interfaz debe implementarlo un tipo de objeto para que sea útil.
Delegados Describe el tipo de delegado, que representa una función como un objeto .
Enumeraciones Describe los tipos de enumeración, cuyos valores pertenecen a un conjunto de valores con nombre.
Atributos Describe los atributos, que se usan para especificar metadatos para otro tipo.
Tipos de excepción Describe las excepciones, que especifican información de error.