Tracce
/
F#
F#
/
Programma
/
Unioni discriminate
Un

Unioni discriminate in F#

15 esercizi

Informazioni su Unioni discriminate

Il tipo unione discriminata rappresenta un numero fisso di casi con un nome. Ogni valore di un'unione discriminata corrisponde esattamente a uno dei casi con un nome. Questo tipo di dato è noto come tipo somma.

Ogni caso di un'unione discriminata può avere facoltativamente dei dati associati, e casi diversi possono avere tipi di dati diversi. Se nessun caso ha dati associati, l'unione discriminata è simile a quello che in altri linguaggi viene di solito chiamato enumerazione (o enum).

Un'unione discriminata si definisce con la parola chiave type e richiede pochissima sintassi. Questo le rende facili da usare e le incontrerai in molti punti, compresa la libreria di base.

// Discriminated union without associated data
type Season =
    | Spring
    | Summer
    | Autumn
    | Winter

// Discriminated union with associated data
type Number =
    | Integer of int
    | Float of float
    | Invalid

Per creare un valore per un caso specifico basta fare riferimento al suo nome, o al suo nome completo se il nome non è univoco. Poiché i nomi dei casi sono delle semplici funzioni costruttore, i dati associati si possono passare come un normale argomento di funzione.

let byName = Integer 2
let byFullName = Number.Invalid

Le unioni discriminate hanno l'uguaglianza strutturale, il che significa che due valori dello stesso caso con gli stessi dati (facoltativi) sono equivalenti.

Il modo preferito per lavorare con le unioni discriminate è il pattern matching tramite il pattern identificatore:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Unioni discriminate

La pratica è bloccata

Sblocca 10 altri esercizi per esercitarti su Unioni discriminate