Skip to content

Integrando o F#

Abra o arquivo Library.fs no projeto LoadRules. Ele terá um código de exemplo a seguir:

namespace LoanRules

module Say =
    let hello name =
        printfn "Hello %s" name

namespace é autoexplicativo e indica como é a hierarquia da bibllioteca.

Dentro do namespace há um módulo chamado Say e uma função chamada hello com um argumento.

Essa função não é pura devido ao print embutido dentro dela.

Primeiro Passo

Sem modificar a biblioteca ainda, vamos tentar realizar a chamada dessa função no C# e fazer com que ela imprima o resultado no terminal.

Ao abrir o arquivo Program.cs, você notará que possui apenas um print:

Console.WriteLine("Hello, World!");

Apague essa linha e faça a chamada de função da biblioteca:

using LoanRules; // reference F# DLL

// Call function hello in module Say in LoanRules
Say.hello("John Doe");

Apesar da função estar em F#, a sintaxe a ser utilizada deve ser a do C#, que é análoga ao do Java.

A integração dentro do ambiente .net é automática e transparente. Ao rodar a aplicação, a solução monta ambos os projetos e preparam o código em .net IL para executar na Virtual Machine. Para o C#, a biblioteca não é em F#, mas em uma representação intermediária que é acessível por todo o ecoessistema .net.

Essa interoperabilidade é muito produtiva para aplicações complexas, com diversos times trabalhando na solução, isolando as atribuições de cada grupo e sem problemas ou camadas de integração.

Isolando o side-effect

Vamos agora tornar a função pura e jogar o efeito colateral para o C#.

Exercício 1:

Modifique a função hello para receber uma string e retornar uma string, concatenando o prefixo "Hello, " no argumento.

Exercício 2:

Modifique o arquivo Program.cs para chamar a função na biblioteca e imprimir o resultado.