Formation F#
  • Intro
  • Bases
    • Le F♯, c'est quoi ?
    • Syntaxe
    • Premiers concepts
    • 🍔 Quiz
  • Fonctions
    • Signature
    • Fonctions
    • Fonctions standard
    • Opérateurs
    • Fonctions : compléments
    • 🍔 Quiz
    • 📜 Récap’
  • Types composites
    • Généralités
    • Tuples
    • Records
    • Unions
    • Enums
    • Records anonymes
    • Types valeur
    • 🍔 Quiz
  • Types : Compléments
    • Type unit
    • Génériques
    • Types flexibles
    • Unités de mesure
    • Conversion
    • Exceptions F#
  • Pattern matching
    • Patterns
    • Match expression
    • 🚀 Active Patterns
    • 📜 Récap’
  • Collections
    • Vue d'ensemble
    • Types
    • Fonctions génériques
    • Fonctions spécifiques
    • 🍔 Quiz
    • 📜 Récap’
  • Programmation asynchrone
    • Workflow asynchrone
    • Interop avec la TPL .NET
    • 📜 Récap’
  • Types monadiques
    • Type Option
    • Type Result
    • Smart constructor
    • 🚀 Computation expression (CE)
    • 🚀 CE - Fondements théoriques
    • 📜 Récap’
  • Module & namespace
    • Vue d'ensemble
    • Namespace
    • Module
    • 🍔 Quiz
    • 📜 Récap’
  • Orienté-objet
    • Introduction
    • Membres
    • Extensions de type
    • Classe, structure
    • Interface
    • Expression objet
    • Recommandations
  • 🦚 Aller plus loin
Propulsé par GitBook
Sur cette page
  • Syntaxe
  • Contenu
  • Portée
  • Recommandations
  • 🚀 Namespace récursif

Cet article vous a-t-il été utile ?

Modifier sur GitHub
  1. Module & namespace

Namespace

Syntaxe

Syntaxe : namespace [rec] [parent.]identifier

  • rec pour récursif (slide suivante)

  • parent permet de regrouper des namespaces

  • Tout ce qui suit appartiendra à ce namespace

Contenu

Un namespace F♯ ne peut contenir que des types et des modules locaux

  • Ne peut contenir ni valeurs ni fonctions

Par équivalence avec la compilation .NET

  • idem namespace C♯ qui ne peut contenir que des classes / enums

Quid des namespaces imbriqués ?

  • Se passe uniquement de manière déclarative namespace [parent.]identifier

  • 2 namespaces déclarés à la suite = pas imbriqués mais indépendants

Portée

  • Plusieurs fichiers peuvent partager le même namespace

  • Dans un fichier, on peut déclarer plusieurs namespaces → Ils ne seront pas imbriqués → Peut être source de confusion ❗

Recommandations

  • Utiliser les namespaces dans un projet .fsproj (Dans un script .fsx, cela a moins d'intérêt)

  • Ne déclarer qu'1 seul namespace par fichier

  • Organiser les fichiers en les groupant dans des répertoires de même nom que le namespace

Niveau
Répertoire
Namespace

0 (racine)

/

*

1

/Niv1

*.Niv1

2

/Niv1/Niv2

*.Niv1.Niv2

🚀 Namespace récursif

Permet d'étendre la visibilité par défaut unidirectionnelle, de bas en haut, pour que des éléments les uns au-dessous des autres se voient mutuellement

namespace rec Fruit

type Banana = { Peeled: bool } with
    member this.Peel() =
        BananaHelper.peel this // 👈 `peel` non visible ici sans le `rec`

module BananaHelper =
    let peel banana = { banana with Peeled = true }

☝ Recommandation : pratique mais à utiliser avec parcimonie

PrécédentVue d'ensembleSuivantModule

Dernière mise à jour il y a 2 ans

Cet article vous a-t-il été utile ?

️ Inconvénients : compilation + lente et risque de référence circulaire ❗

⚠️