📜 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 expressions, F# for fun and profit, Juin 2012

📜 Domain modelling et pattern matching : Roman numeral, F# for fun and profit, Juin 2012

📜 Recursive types and folds (6 articles), F# for fun and profit, Août 2015

📹 A Deep Dive into Active Patterns - Repo github

Exercices

Les exercices suivants sur exercism.io (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

Ce contenu vous a-t-il été utile ?