Fonctions standard
La librairie FSharp.Core.dll est automatiquement importée dans un projet F# ou en console FSI. Elle fournit les opérateurs et fonctions standard (doc). En voici les fonctions principales :
Conversion
box, tryUnbox, unbox : boxing et (tentative de) unboxing
let i = 123 // val i : int = 123
let o = box i // val o : obj = 123
let i2: int = unbox o // val i3 : int = 123
let i3 = unbox<int> o // val i2 : int = 123
let ok = tryUnbox<int> o // val ok : int option = Some 123
let ko = tryUnbox<string> o // val ko : string option = None
unbox<float> o // 💥 System.InvalidCastExceptionbyte, char, decimal, float, int, string : conversion en byte, char, ...
let c_ko = char "ab" // 💥 System.FormatException
let c1 = char "c" // val c1 : char = 'c'
let c2 = char 32 // val c2 : char = ' '
let i_ko = int " " // 💥 System.FormatException
let i1 = int "30" // val i1 : int = 30
let i2 = int ' ' // val i2 : int = 32
let i3 = int 12.6 // val i3 : int = 12enum<'TEnum> : conversion en l'enum spécifié
→ Cf. Enums > Conversion
Reflection
nameof, typeof :
typedefof est intéressant avec un type générique :
Math
abs,sign: valeur absolue, signe (-1 si < 0...)(a)cos(h),(a)sin,(a)tan: (co)sinus/tangente (inverse/hyperbolique)ceil,floor,round: arrondi (inf, sup)exp,log,log10: exponentielle, logarithme...pown x (n: int): power =xà la puissancensqrt: square root / racine carrée
Identité id
idDéfinition let id x = x
Signature : (x: 'T) -> 'T
→ Fonction à un seul paramètre d'entrée
→ Qui ne fait que renvoyer ce paramètre
Pourquoi une telle fonction ❓
→ Nom id = abréviation de identity
→ Zéro / Élément neutre de la composition des fonctions
Addition +
0
0 + 5 ≡ 5 + 0 ≡ 5
Multiplication *
1
1 * 5 ≡ 5 * 1 ≡ 5
Composition >>
id
id >> fn ≡ fn >> id ≡ fn
Cas d'utilisation de id
idAvec une high-order function faisant 2 choses :
• 1 opération
• 1 mapping de valeur via param 'T -> 'U
Ex : List.collect fn list = flatten + mapping
Comment faire juste l'opération et pas de mapping ?
list |> List.collect (fun x -> x)👎list |> List.collect id👍☝ Meilleure alternative :
List.concat list💯
Autres
compare a b : int: renvoie -1 si a < b, 0 si =, 1 si >hash: calcule le hash (HashCode)max,min: maximum et minimum de 2 valeurs comparablesignore: pour "avaler" une valeur et obtenirunit
Extras
On utilise couramment les fonctions suivantes, non standard donc en les recodant ou en utilisant celles du module Prelude (source) du package NuGet FSharpx.Extras.
Flip
flip, flip3 et flip4 permettent d'inverser l'ordre des paramètres d'une fonction, de sorte que le dernier devienne le premier.
Curry
curry et curry3 permettent de curryfier des fonctions tuplifiées de 2 ou 3 paramètres.
uncurry et uncurry3 font l'inverse.
Konst
konst est une fonction sink par rapport à son deuxième argument, ignoré pour renvoyer toujours le premier argument, la constante.
→ Exemple : générer un prédicat toujours vrai, pour le passer à une fonction d'ordre supérieur telle que filterMap ci-dessous :
💡 ignore ≅ konst ()
Tee
tee (appelée également tap) permet d'appliquer une valeur à une fonction et de renvoyer cette valeur, en ignorant l'éventuel retour de la fonction. C'est utile avec une fonction à effet de bord, par exemple pour logguer une valeur intermédiaire dans un pipeline :
Parse
Les types primitifs Boolean, Byte, SByte, UInt16, Int16, UInt32, Int32, UInt64, Int64, Decimal, Single, Double, DateTime, DateTimeOffset sont étendus avec la méthode statique parse qui encapsule la classique méthode statique .NET TryParse. L'objectif est de renvoyer une Option (📍 Type Option) plutôt qu'un bool et une variable out (📍 ).
String
Le module String encapsule les méthodes d'instance de string dans des fonctions pour être utilisées plus facilement dans les pipelines. En voici quelques exemples :
☝ Note : les fonctions surchargées auraient bénéficier d'un nom plus parlant, par exemple :
Last updated
Was this helpful?