githubModifier

📜 Récap’

Pattern matching

  • Brique fondamentale de F♯

  • Combine "comparaison de structure de données" et "déconstruction"

  • S'utilisent presque partout :

    • match expression et bloc function

    • bloc try/with

    • let binding, y.c. paramètre de fonction

  • Peut s'abstraire en fonction fold associée à un type union

Patterns

Pattern
Exemple

Constant - Identifier - Wilcard

1, Color.Red - Some 1 - _

Collection : Cons - List - Array

head :: tail - [1; 2]

Product type : Record - Tuple

{ A = a } - a, b

Type Test

:? Subtype

Logique : OR, AND

1 | 2, P1 & P2

Variables - Alias

head :: _ - (0, 0) as origin

+ Les guards when dans les match expressions

Active Patterns

  • Extension du pattern matching

  • Basés sur fonction + metadata → Citoyens de 1ère classe

  • 4 types : total simple/multiple, partiel (simple), paramétré

  • Un peu tricky à comprendre mais on s'habitue vite

  • S'utilisent pour :

    • Ajouter de la sémantique sans recourir aux types union

    • Simplifier / factoriser des guards

    • Wrapper des méthodes de la BCL

    • Extraire un ensemble de données d'un objet

    • ...

Compléments

📜 Match expressionsarrow-up-right, F# for fun and profit, Juin 2012

📜 Domain modelling et pattern matching : Roman numeralarrow-up-right, F# for fun and profit, Juin 2012

📜 Recursive types and foldsarrow-up-right (6 articles), F# for fun and profit, Août 2015

📹 A Deep Dive into Active Patternsarrow-up-right - Repo githubarrow-up-right

Exercices

Les exercices suivants sur exercism.ioarrow-up-right (se créer un compte) peuvent se résoudre avec des active patterns :

  • Collatz Conjecture (easy)

  • Darts (easy)

  • Queen Attack (medium)

  • Robot Name (medium)

Mis à jour