F # - Módulos

De acordo com a biblioteca MSDN, um módulo F # é um agrupamento de construções de código F #, como tipos, valores, valores de função e código em ligações do. Ele é implementado como uma classe CLR (common language runtime) que possui apenas membros estáticos.

Dependendo da situação, se o arquivo inteiro está incluído no módulo, existem dois tipos de declarações de módulo -

  • Declaração de módulo de nível superior
  • Declaração de módulo local

Em uma declaração de módulo de nível superior, todo o arquivo é incluído no módulo. Nesse caso, a primeira declaração no arquivo é a declaração do módulo. Você não precisa recuar declarações em um módulo de nível superior.

Em uma declaração de módulo local, apenas as declarações que são recuadas nessa declaração de módulo fazem parte do módulo.

Sintaxe

A sintaxe para a declaração do módulo é a seguinte -

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

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

Observe que o modificador de acessibilidade pode ser um dos seguintes - público, privado, interno. O padrão épublic.

Os exemplos a seguir demonstrarão os conceitos -

Exemplo 1

O arquivo de módulo 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

O arquivo de programa 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

Quando você compila e executa o programa, ele produz a seguinte saída -

34
16
225
2
110
90
1000
10

Exemplo 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

Quando você compila e executa o programa, ele produz a seguinte saída -

125
325