Condividi tramite


Valori (F#)

I valori in F# sono quantità di un tipo specifico. I valori possono essere numeri a virgola mobile o integrali, caratteri o testo, elenchi, sequenze, matrici, tuple, unioni discriminate, record, tipi di classi o valori di funzioni.

Associazione di un valore

Il termine associazione indica l'associazione di un nome a una definizione. La parola chiave let consente di associare un valore, come negli esempi seguenti:

let a = 1
let b = 100u
let str = "text" 

// A function value binding. 

let f x = x + 1

Il tipo di un valore viene derivato dalla definizione. Per un tipo primitivo, ad esempio un numero integrale o a virgola mobile, il tipo è determinato dal tipo del valore letterale. Nell'esempio precedente il compilatore deriva pertanto il tipo di b come unsigned int, e il tipo di a come int. Il tipo di un valore di funzione è determinato dal valore restituito nel corpo della funzione. Per ulteriori informazioni sui tipi di valore di funzione, vedere Funzioni (F#). Per ulteriori informazioni sui tipi letterali, vedere Valori letterali (F#).

Significato di non modificabile

I valori non modificabili sono valori che non possono essere modificati nel corso dell'esecuzione di un programma. Se si ha familiarità con linguaggi come C++, Visual Basic o C#, potrebbe sembrare strano che in F# venga data maggiore importanza ai valori non modificabili rispetto alle variabili, a cui è possibile assegnare nuovi valori durante l'esecuzione di un programma. I dati non modificabili sono un elemento importante della programmazione funzionale. In un ambiente multithreading, le variabili modificabili condivise che possono essere modificate da numerosi thread diversi sono difficili da gestire. Con le variabili modificabili, inoltre, talvolta può risultare difficile stabilire se una variabile può essere modificata quando viene passata a un'altra funzione.

Nei linguaggi funzionali puri non vi sono variabili e le funzioni si comportano esattamente come funzioni matematiche. Mentre nel codice in un linguaggio procedurale viene utilizzata l'assegnazione di una variabile per modificare un valore, nel codice equivalente in un linguaggio funzionale sono presenti un valore non modificabile che costituisce l'input, una funzione non modificabile e diversi valori non modificabili come output. Questa precisione matematica consente un ragionamento più rigido sul comportamento del programma. Questa logica più rigida consente al compilatore di controllare il codice in modo più rigoroso e di ottenere un livello maggiore di ottimizzazione e semplifica la comprensione del codice e la scrittura di codice corretto da parte degli sviluppatori. Il debug del codice funzionale è pertanto più semplice di quello del comune codice procedurale.

F# non è un linguaggio funzionale puro, ma tuttavia supporta completamente la programmazione funzionale. L'utilizzo di valori non modificabili è consigliabile in quanto in questo modo si consente al codice di usufruire dei vantaggi offerti da un aspetto importante della programmazione funzionale.

variabili modificabili

È possibile utilizzare la parola chiave mutable per specificare una variabile che può essere modificata. Le variabili modificabili in F# dovrebbero in genere avere un ambito limitato, come un campo di un tipo o un valore locale. Le variabili modificabili con un ambito limitato sono più semplici da controllare e vi sono meno probabilità che possano essere modificate in modo non corretto.

È possibile assegnare un valore iniziale a una variabile modificabile utilizzando la parola chiave let nello stesso modo in cui si definirebbe un valore. La differenza, tuttavia, sta nel fatto che è possibile assegnare nuovi valori alle variabili modificabili in un secondo momento, utilizzando l'operatore <-, come nell'esempio seguente.

let mutable x = 1
x <- x + 1

Argomenti correlati

Titolo

Descrizione

Associazioni let (F#)

Vengono fornite informazioni sull'utilizzo della parola chiave let per associare nomi a valori e funzioni.

Funzioni (F#)

Viene fornita una panoramica delle funzioni in F#.

Vedere anche

Concetti

Valori Null (F#)

Altre risorse

Riferimenti per il linguaggio F#