Vue d'ensemble

Types et Modules

Collections en F♯ avec leur module associé :

Type F♯
Module
Equivalent BCL
Immutable
Comp. structurelle
Trié par

't array 't[] Array<'t>

Array

Array<T>

Ordre ajout

't list List<'t>

List

Immutable-List<T>

Ordre ajout

ResizeArray (alias)

List<T>

Ordre ajout

't seq seq<'t>

Seq

IEnumerable<T>

Ordre ajout

't set Set<'t>

Set

Immutable-HashSet<T>

Valeur

Map<'K, 'V>

Map

Immutable-Dictionary<K, V>

Clé

dict (cons)

IDictionary<K, V>

Clé

readOnlyDict (cons)

IReadOnly-Dictionary<K, V>

Clé

Homogénéité des fonctions 👍

Communes aux 5 modules :

  • empty/isEmpty, exists/forall

  • find/tryFind, pick/tryPick, contains (containsKey pour Map)

  • map/iter, filter, fold

Communes à Array, List, Seq :

  • append/concat, choose, collect

  • item, head, last

  • take, skip

  • ... une centaine de fonctions en tout !

Homogénéité de la syntaxe 👍

Type

Éléments

Range

Comprehension

Array

[∣ 1; 2 ∣]

[∣ 1..5 ∣]

...

List

[ 1; 2 ]

[ 1..5 ]

...

Seq

seq { 1; 2 }

seq { 1..5 }

...

Set

set [ 1; 2 ]

set [ 1..5 ]

...

Piège de la syntaxe ⚠️

Les crochets [] sont utilisés pour :

  • Valeur : instance d'une liste [ 1; 2 ] (de type int list)

  • Type : tableau int [], par ex. de [| 1; 2 |]

Recommendations

  • Bien distinguer type vs valeur ❗

  • Préférer écrire int array plutôt que int[]

    • N.B. En console FSI, le type affiché est encore int []

Création par Comprehension

  • Syntaxe similaire à boucle for

  • Même principe que générateurs en C♯, JS

    • Mot clé yield mais souvent optionnel (F♯ 4.7 / .NET Core 3)

    • Mot clé yield!yield* JS

    • Fonctionne pour toutes les collections 👍

Exemples :

yield! permet d'aplatir des collections imbriquées :

Last updated

Was this helpful?