Percursos
/
F#
F#
/
Programa
/
Uniões discriminadas
Un

Uniões discriminadas em F#

15 exercícios

Sobre Uniões discriminadas

O tipo união discriminada representa um número fixo de casos nomeados. Cada valor de uma união discriminada corresponde exatamente a um dos casos nomeados. Este tipo de dados é conhecido como tipo soma.

Cada caso de uma união discriminada pode ter, opcionalmente, dados associados, e casos diferentes podem ter diferentes tipos de dados. Se nenhum dos casos tiver dados associados, a união discriminada é semelhante ao que outras linguagens costumam designar por enumeração (ou enum).

Uma união discriminada é definida com a palavra-chave type e requer muito pouca sintaxe. Isto torna-as fáceis de usar, e vais encontrá-las em muitos sítios, incluindo na biblioteca 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

Podes criar um valor para um caso específico referindo o seu nome, ou o nome completo se o nome não for único. Como os nomes dos casos são apenas funções construtoras, os dados associados podem ser passados como um argumento normal de uma função.

let byName = Integer 2
let byFullName = Number.Invalid

As uniões discriminadas têm igualdade estrutural, o que significa que dois valores do mesmo caso e com os mesmos dados (opcionais) são equivalentes.

A forma preferida de trabalhar com uniões discriminadas é através da correspondência de padrões, usando o padrão de identificador:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Uniões discriminadas

A prática está bloqueada

Desbloqueia mais 10 exercícios para praticares Uniões discriminadas