F # - Modules

Selon la bibliothèque MSDN, un module F # est un regroupement de constructions de code F #, telles que les types, les valeurs, les valeurs de fonction et le code dans les liaisons do. Il est implémenté en tant que classe CLR (Common Language Runtime) qui n'a que des membres statiques.

Selon la situation, si le fichier entier est inclus dans le module, il existe deux types de déclarations de module -

  • Déclaration de module de niveau supérieur
  • Déclaration du module local

Dans une déclaration de module de niveau supérieur, le fichier entier est inclus dans le module. Dans ce cas, la première déclaration du fichier est la déclaration du module. Vous n'avez pas à mettre en retrait les déclarations dans un module de niveau supérieur.

Dans une déclaration de module local, seules les déclarations qui sont indentées sous cette déclaration de module font partie du module.

Syntaxe

La syntaxe de la déclaration du module est la suivante -

// Top-level module declaration.
module [accessibility-modifier] [qualified-namespace.]module-name
   declarations

// Local module declaration.
module [accessibility-modifier] module-name =
   declarations

Veuillez noter que le modificateur d'accessibilité peut être l'un des suivants - public, privé, interne. La valeur par défaut estpublic.

Les exemples suivants démontreront les concepts -

Exemple 1

Le fichier de module Arithmetic.fs -

module Arithmetic
let add x y =
   x + y

let sub x y =
   x - y
	
let mult x y =
   x * y
	
let div x y =
   x / y

Le fichier programme main.fs -

// Fully qualify the function name.
open Arithmetic
let addRes = Arithmetic.add 25 9
let subRes = Arithmetic.sub 25 9
let multRes = Arithmetic.mult 25 9
let divRes = Arithmetic.div 25 9

printfn "%d" addRes
printfn "%d" subRes
printfn "%d" multRes
printfn "%d" divRes

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

34
16
225
2
110
90
1000
10

Exemple 2

// Module1
module module1 =
   // Indent all program elements within modules that are declared with an equal sign.
   let value1 = 100
   let module1Function x =
      x + value1

// Module2
module module2 =
   let value2 = 200

   // Use a qualified name to access the function.
   // from module1.
   let module2Function x =
      x + (module1.module1Function value2)

let result = module1.module1Function 25
printfn "%d" result

let result2 = module2.module2Function 25
printfn "%d" result2

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

125
325