Tipi F#
In questo argomento vengono descritti i tipi utilizzati in F# e le modalità di assegnazione del nome e descrizione per tali tipi.
Riepilogo dei tipi F#
Alcuni tipi sono considerati tipi primitivi, ad esempio il tipo booleano bool e i tipi integrali e a virgola mobile di varie dimensioni, che includono i tipi per byte e caratteri.Questi tipi sono descritti in Tipi primitivi (F#).
Altri tipi sono incorporati nel linguaggio e includono tuple, elenchi, matrici, sequenze, record e unioni discriminate.Se si ha familiarità con altri linguaggi .NET e si sta imparando l'utilizzo di F#, è consigliabile leggere gli argomenti relativi a ognuno di questi tipi.Nella sezione Argomenti correlati di questo argomento sono disponibili collegamenti ad argomenti in cui vengono fornite ulteriori informazioni.Questi tipi specifici di F# supportano stili di programmazione comuni ai linguaggi di programmazione funzionale.Molti di questi tipi dispongono di moduli associati nella libreria F#, che supportano le operazioni comuni su tali tipi.
Il tipo di una funzione include informazioni sui tipi di parametri e sul tipo restituito.
.NET Framework rappresenta l'origine di tipi di oggetti, tipi di interfacce, tipi di delegati e altro.È possibile definire tipi di oggetti personalizzati come in qualsiasi altro linguaggio .NET.
Il codice F# consente inoltre di definire alias, detti abbreviazioni di tipi, che costituiscono nomi alternativi per i tipi.È possibile utilizzare le abbreviazioni dei tipi quando il tipo potrebbe cambiare in futuro e si desidera evitare di modificare il codice che dipende da esso.È inoltre possibile utilizzare un'abbreviazione del tipo come nome descrittivo per un tipo, per semplificare la lettura e la comprensione del codice.
F# fornisce tipi di insieme utile che sono progettati con la programmazione funzionale in mente.Questi tipi di insieme consentono di scrivere codice che è più funziona nello stile.Per ulteriori informazioni, vedere Tipi di raccolta F#.
Sintassi dei tipi
Nel codice F# è spesso necessario scrivere i nomi dei tipi.Ogni tipo ha una forma sintattica, che viene utilizzata in annotazioni del tipo, dichiarazioni di metodi astratti, dichiarazioni di delegati, firme e altri costrutti.Ogni volta che si dichiara un nuovo costrutto del programma nell'interprete, tramite l'interprete vengono stampati il nome del costrutto e la sintassi per il relativo tipo.Tale sintassi potrebbe essere semplicemente un identificatore per un tipo definito dall'utente o un identificatore incorporato, ad esempio int o string, ma per i tipi più complessi, la sintassi è più complessa.
Nella tabella seguente sono illustrati gli aspetti della sintassi per i tipi F#.
Type |
Sintassi del tipo |
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 oppure modules.type-name oppure namespaces.modules.type-name |
System.IO.StreamWriter |
Matrice |
matrice 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) è di tipo int * char * int |
tipo generico |
type-parametergeneric-type-name oppure generic-type-name<type-parameter-list> |
'a list list<'a> Dictionary<'key, 'value> |
tipo costruito (tipo generico a cui viene fornito un argomento di tipo specifico) |
type-argumentgeneric-type-name oppure 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 solo parametro |
parameter-type1 -> return-type |
Il tipo di una funzione che accetta un valore int e restituisce un valore string è int -> string |
tipo di funzione con più parametri |
parameter-type1 -> parameter-type2 -> ...-> return-type |
Una funzione che accetta un valore int e un valore float e restituisce un valore string è di tipo int -> float -> string |
funzione di ordine superiore come un parametro |
(function-type) |
List.map è di tipo ('a -> 'b) -> 'a list -> 'b list |
delegato |
delegato di function-type |
delegate of unit -> int |
tipo flessibile |
#type-name |
#System.Windows.Forms.Control #seq<int> |
Argomenti correlati
Argomento |
Descrizione |
---|---|
Vengono descritti i tipi semplici incorporati, ad esempio i tipi integrali, il tipo booleano e i tipi di carattere. |
|
Viene descritto il tipo unit, un tipo che dispone di un valore e che è indicato da (). Questo tipo equivale a void in C# e Nothing in Visual Basic. |
|
Viene descritto il tipo tupla, costituito da valori associati di qualsiasi tipo raggruppati in coppie o in gruppi di tre o quattro elementi e così via. |
|
Viene descritto il tipo opzione, che può disporre di un valore o essere vuoto. |
|
Vengono descritti gli elenchi, serie ordinate e non modificabili di elementi tutti dello stesso tipo. |
|
Vengono descritte le matrici, set ordinati di elementi modificabili dello stesso tipo che occupano un blocco contiguo di memoria e hanno dimensioni fisse. |
|
Viene descritto il tipo sequenza, che rappresenta una serie logica di valori. I singoli valori vengono calcolati solo se necessario. |
|
Viene descritto il tipo record, una piccola aggregazione di valori denominati. |
|
Viene descritto il tipo unione discriminata, un tipo i cui valori possono essere di un tipo qualsiasi di un set di tipi possibili. |
|
Vengono descritti i valori di funzione. |
|
Viene descritto il tipo classe, un tipo di oggetto che corrisponde a un tipo di riferimento .NET.I tipi classe possono contenere membri, proprietà, interfacce implementate e un tipo di base. |
|
Viene descritto il tipo struct, un tipo di oggetto che corrisponde a un tipo di valore .NET.Il tipo struct rappresenta in genere una piccola aggregazione di dati. |
|
Vengono descritti i tipi interfaccia, ovvero tipi che rappresentano un set di membri che forniscono determinate funzionalità ma non contengono dati.Per essere utile, un tipo interfaccia deve essere implementato da un tipo di oggetto. |
|
Viene descritto il tipo delegato, che rappresenta una funzione come un oggetto. |
|
Vengono descritti i tipi enumerazione, i cui valori appartengono a un set di valori denominati. |
|
Vengono descritti gli attributi, utilizzati per specificare i metadati per un altro tipo. |
|
Vengono descritte le eccezioni, che specificano informazioni sugli errori. |