Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I valori in F# sono quantità con un tipo specifico; I valori possono essere numeri integrali o a virgola mobile, caratteri o testo, elenchi, sequenze, matrici, tuple, unioni discriminate, record, tipi di classe o valori di funzione.
Associazione di un valore
Il termine binding indica l'associazione di un nome a una definizione. La let
parola chiave associa 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 dedotto dalla definizione. Per un tipo primitivo, ad esempio un numero integrale o a virgola mobile, il tipo viene determinato dal tipo del valore letterale. Pertanto, nell'esempio precedente, il compilatore deduce il tipo di b
come unsigned int
, mentre il compilatore deduce il tipo di a
come int
. Il tipo di un valore di funzione viene determinato dal valore restituito nel corpo della funzione. Per altre informazioni sui tipi di valori di funzione, vedere Funzioni. Per altre informazioni sui tipi letterali, vedere Valori letterali.
Per impostazione predefinita, il compilatore non rilascia la diagnostica sulle associazioni inutilizzate. Per ricevere questi messaggi, abilitare l'avviso 1182 nel file di progetto o quando si richiama il compilatore (vedere in --warnon
Opzioni del compilatore).
Perché non modificabile?
I valori non modificabili sono valori che non possono essere modificati durante l'esecuzione di un programma. Se si usano linguaggi come C++, Visual Basic o C#, è possibile che F# inserisca il primato su valori non modificabili anziché su 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 molti thread diversi sono difficili da gestire. Inoltre, con variabili modificabili, a volte può essere difficile stabilire se una variabile potrebbe essere modificata quando viene passata a un'altra funzione.
Nei linguaggi funzionali puri non esistono variabili e le funzioni si comportano rigorosamente come funzioni matematiche. Se il codice in un linguaggio procedurale usa un'assegnazione di variabile per modificare un valore, il codice equivalente in un linguaggio funzionale ha un valore non modificabile che è l'input, una funzione non modificabile e valori non modificabili diversi come output. Questa rigidità matematica consente un ragionamento più stretto sul comportamento del programma. Questo ragionamento più rigoroso è ciò che consente ai compilatori di controllare il codice in modo più rigoroso e di ottimizzare in modo più efficace e semplifica la comprensione e la scrittura del codice corretto da parte degli sviluppatori. È quindi probabile che il codice funzionale sia più semplice eseguire il debug rispetto al codice procedurale ordinario.
F# non è un linguaggio funzionale puro, ma supporta completamente la programmazione funzionale. L'uso di valori non modificabili è una procedura consigliata perché questa operazione consente al codice di trarre vantaggio da un aspetto importante della programmazione funzionale.
Variabili modificabili
È possibile usare la parola chiave mutable
per specificare una variabile che può essere modificata. Le variabili modificabili in F# devono in genere avere un ambito limitato, come campo di un tipo o come valore locale. Le variabili modificabili con un ambito limitato sono più facili da controllare e hanno meno probabilità di essere modificate in modi non corretti.
È possibile assegnare un valore iniziale a una variabile modificabile usando la let
parola chiave nello stesso modo in cui si definisce un valore. Tuttavia, la differenza è che successivamente è possibile assegnare nuovi valori alle variabili modificabili usando l'operatore , come nell'esempio <-
seguente.
let mutable x = 1
x <- x + 1
I valori contrassegnati mutable
possono essere promossi automaticamente a 'a ref
se acquisiti da una chiusura, inclusi i moduli che creano chiusura, ad esempio seq
i generatori. Se si vuole ricevere una notifica quando si verifica questa situazione, abilitare l'avviso 3180 nel file di progetto o quando si richiama il compilatore.
Argomenti correlati
Titolo | Descrizione |
---|---|
let Bindings | Fornisce informazioni sull'uso della let parola chiave per associare nomi a valori e funzioni. |
Funzioni | Offre una panoramica delle funzioni in F#. |