Tipi F#

In questo argomento vengono descritti i tipi usati in F# e il modo in cui vengono denominati e descritti i tipi F#.

Riepilogo dei tipi F#

Alcuni tipi sono considerati tipi primitivi, ad esempio il tipo bool booleano e i tipi integrali e a virgola mobile di varie dimensioni, che includono tipi per byte e caratteri. Questi tipi sono descritti in Tipi primitivi.

Altri tipi integrati nel linguaggio includono tuple, elenchi, matrici, sequenze, record e unioni discriminate. Se si ha esperienza con altri linguaggi .NET e si apprende F#, è consigliabile leggere gli argomenti per ognuno di questi tipi. Questi tipi specifici di F#supportano stili di programmazione comuni ai linguaggi di programmazione funzionale. Molti di questi tipi hanno moduli associati nella libreria F# che supportano operazioni comuni su questi tipi.

Il tipo di una funzione include informazioni sui tipi di parametro e sul tipo restituito.

.NET Framework è l'origine di tipi di oggetto, tipi di interfaccia, tipi delegati e altri. È possibile definire tipi di oggetto personalizzati esattamente come è possibile in qualsiasi altro linguaggio .NET.

Inoltre, il codice F# può definire alias, che sono abbreviazioni di tipo denominate , che sono nomi alternativi per i tipi. È possibile usare abbreviazioni di tipo quando il tipo potrebbe cambiare in futuro ed evitare di modificare il codice che dipende dal tipo. In alternativa, è possibile usare un'abbreviazione di tipo come nome descrittivo per un tipo in grado di semplificare la lettura e la comprensione del codice.

F# fornisce tipi di raccolta utili progettati tenendo presente la programmazione funzionale. L'uso di questi tipi di raccolta consente di scrivere codice più funzionale nello stile. Per altre informazioni, vedere Tipi di raccolta F#.

Sintassi per i tipi

Nel codice F# spesso è necessario scrivere i nomi dei tipi. Ogni tipo ha una forma sintattica e si usano queste forme sintattiche nelle annotazioni di tipo, dichiarazioni di metodo astratte, dichiarazioni di delegato, firme e altri costrutti. Ogni volta che si dichiara un nuovo costrutto di programma nell'interprete, l'interprete stampa il nome del costrutto e la sintassi per il relativo tipo. Questa sintassi può essere solo un identificatore per un tipo definito dall'utente o un identificatore predefinito, ad esempio per int o string, ma per tipi più complessi, la sintassi è più complessa.

La tabella seguente illustra gli aspetti della sintassi del tipo per i tipi F#.

Type Sintassi dei tipi Esempi
tipo primitivo type-name int

float

string
tipo di aggregazione (classe, struttura, unione, record, enumerazione e così via) type-name System.DateTime

Color
abbreviazione del tipo type-abbreviation-name bigint
tipo completo namespaces.type-name

or

modules.type-name

or

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

matrice type-name
int[]

array<int>

int array
matrice bidimensionale type-name[,] int[,]

float[,]
matrice tridimensionale type-name[,,] float[,,]
tupla type-name1 * type-name2 ... Ad esempio, (1,'b',3) ha tipo int * char * int
tipo generico type-parametergeneric-type-name

or

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

list<'a>

Dictionary<'key, 'value>
tipo costruito (tipo generico con un argomento di tipo specifico fornito) 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>
tipo di funzione con un singolo parametro parameter-type1 ->return-type Funzione che accetta e int restituisce un oggetto ha un string tipo int -> string
tipo di funzione con più parametri parameter-type1 ->parameter-type2 -> ... ->return-type Funzione che accetta e intfloat e restituisce un oggetto ha un string tipo int -> float -> string
funzione di ordine superiore come parametro (tipo di funzione) List.map ha tipo ('a -> 'b) -> 'a list -> 'b list
delegate delegato di tipo funzione delegate of unit -> int
tipo flessibile #type-name #System.Windows.Forms.Control

#seq<int>
Argomento Descrizione
Tipi primitivi Vengono descritti i tipi semplici predefiniti, ad esempio i tipi integrali, il tipo booleano e i tipi di carattere.
Tipo di unità Descrive il unit tipo , un tipo con un valore e indicato da (); equivalente a void in C# e Nothing in Visual Basic.
Tuple Descrive il tipo di tupla, un tipo costituito da valori associati di qualsiasi tipo raggruppato in coppie, triple,ple e così via.
Opzioni Descrive il tipo di opzione, un tipo che può avere un valore o essere vuoto.
Elenchi Vengono descritti gli elenchi, che vengono ordinati, serie non modificabili di elementi dello stesso tipo.
Matrici Descrive le matrici, che sono set ordinati di elementi modificabili dello stesso tipo che occupano un blocco contiguo di memoria e sono di dimensioni fisse.
Sequenze Descrive il tipo di sequenza, che rappresenta una serie logica di valori; i singoli valori vengono calcolati solo se necessario.
Record Descrive il tipo di record, un piccolo aggregato di valori denominati.
Unioni discriminate Descrive il tipo di unione discriminante, un tipo i cui valori possono essere uno qualsiasi di un set di tipi possibili.
Funzioni Descrive i valori della funzione.
Classi Descrive il tipo di classe, un tipo di oggetto che corrisponde a un tipo riferimento .NET. I tipi di classe possono contenere membri, proprietà, interfacce implementate e un tipo di base.
Struct Descrive il struct tipo , un tipo di oggetto che corrisponde a un tipo di valore .NET. Il struct tipo rappresenta in genere una piccola aggregazione di dati.
Interfacce Descrive i tipi di interfaccia, ovvero tipi che rappresentano un set di membri che forniscono determinate funzionalità, ma che non contengono dati. Un tipo di interfaccia deve essere implementato da un tipo di oggetto per essere utile.
Delegati Descrive il tipo delegato, che rappresenta una funzione come oggetto .
Enumerazioni Descrive i tipi di enumerazione, i cui valori appartengono a un set di valori denominati.
Attributi Descrive gli attributi utilizzati per specificare i metadati per un altro tipo.
Tipi di eccezione Vengono descritte le eccezioni, che specificano le informazioni sull'errore.