Records anonymes

Introduction

  • Depuis F♯ 4.6 (mars 2019)

  • Syntaxe : idem Record avec accolades "larges" {| fields |}

    • {| Age: int |} → signature

    • {| Age = 15 |} → instance

  • Typage inline : pas besoin de pré-définir un type nommé

    • Alternative aux Tuples

  • Autorisé en entrée/sortie de fonction

    • ≠ Type anonyme C♯

Bénéfices ✅

Réduire boilerplate • Améliorer interop avec systèmes externes (JavaScript, SQL...)

Exemples :

  • Projection LINQ

  • Personnalisation d'un record existant

  • Sérialisation JSON

  • Signature inline

  • Alias par module

✅ Projection LINQ

💡 Sélectionner un sous-ensemble de propriétés

En C♯, on utiliserait un type anonyme :

🔗 https://queil.net/2019/10/fsharp-vs-csharp-anonymous-records/

✅ Personnalisation d'un record existant

💡 Un record anonyme peut être instancié à partir d'une instance de record

✅ Sérialisation JSON

😕 Unions sérialisées dans un format pas pratique

💡 Définir un record anonyme pour sérialiser un customer

✅ Signature inline

💡 Utiliser un record anonyme inline pour réduire charge cognitive

✅ Alias par module

💡 Instant t : même type dans 2 modules

💡 Plus tard : facilite personnalisation des types par module

Limites 🛑

Last updated

Was this helpful?