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

Tipi primitivi (F#)

Vengono descritti i tipi semplici incorporati, ad esempio i tipi integrali, il tipo booleano e i tipi di carattere.

Tipo di unità (F#)

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.

Tuple (F#)

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.

Opzioni (F#)

Viene descritto il tipo opzione, che può disporre di un valore o essere vuoto.

Elenchi (F#)

Vengono descritti gli elenchi, serie ordinate e non modificabili di elementi tutti dello stesso tipo.

Matrici (F#)

Vengono descritte le matrici, set ordinati di elementi modificabili dello stesso tipo che occupano un blocco contiguo di memoria e hanno dimensioni fisse.

Sequenze (F#)

Viene descritto il tipo sequenza, che rappresenta una serie logica di valori. I singoli valori vengono calcolati solo se necessario.

Record (F#)

Viene descritto il tipo record, una piccola aggregazione di valori denominati.

Unioni discriminate (F#)

Viene descritto il tipo unione discriminata, un tipo i cui valori possono essere di un tipo qualsiasi di un set di tipi possibili.

Funzioni (F#)

Vengono descritti i valori di funzione.

Classi (F#)

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.

Strutture (F#)

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.

Interfacce (F#)

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.

Delegati (F#)

Viene descritto il tipo delegato, che rappresenta una funzione come un oggetto.

Enumerazioni (F#)

Vengono descritti i tipi enumerazione, i cui valori appartengono a un set di valori denominati.

Attributi (F#)

Vengono descritti gli attributi, utilizzati per specificare i metadati per un altro tipo.

Tipi di eccezione (F#)

Vengono descritte le eccezioni, che specificano informazioni sugli errori.