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-parameter generic-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-argument generic-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 int float 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> |
Argomenti correlati
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. |