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
  • Pourquoi ?
  • Ignorer une valeur
  • Fonction ignore

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

Modifier sur GitHub
  1. Types : Compléments

Type unit

Pourquoi ?

Contrainte : l'évaluation d'une expression doit produire une valeur.

Quid des expressions ne produisant pas de valeur significative ?

  • void ? Non, void en C♯, Java n'est pas une valeur !

  • null ? Non, null n'est pas un type en .NET ! (≠ TypeScript)

Il faut donc un type spécifique, avec une seule valeur signifiant par convention : « Valeur non significative, à ignorer. »

  • Ce type s'appelle unit.

  • Sa valeur est notée ().Lien avec les fonctions

Fonction unit -> 'T ne prend pas de paramètre. → Ex : System.DateTime.Now (fonction cachée derrière une propriété)

Fonction 'T -> unit ne renvoie pas de valeur. → Ex : printf

👉 Fonctions impliquant un effet de bord !

Ignorer une valeur

F♯ n'est pas une langage fonctionnel pur, sans effet de bord. Mais il encourage l'écriture de programme fonctionnel pur.

👉 Règle : Toute expression produisant une valeur doit être utilisée.

  • Sinon, le compilateur émet un warning (sauf en console FSI).

  • Exception: () est la seule valeur que le compilateur autorise à ignorer.

☝ Avertissement : ignorer une valeur est généralement un code smell en FP.

👉 Une expression avec effet de bord doit le signaler avec type de retour unit

Fonction ignore

❓ Comment (malgré tout) ignorer la valeur produit par une expression ?

Avec la fonction ignore :

  • Prend un paramètre d'entrée ignoré, "avalé"

  • Renvoie unit

let inline ignore _ = ()
// Signature: 'T -> unit

Usage : expression |> ignore

Précédent🍔 QuizSuivantGénériques

Dernière mise à jour il y a 3 ans

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