Skip to content

Programando o F#

Vamos começar escrevendo uma biblioteca em F# para um caso de Credit Allowance.

A ideia é criar funções puras em F# que vão suportar a aplicação, não importanto qual a plataforma de interação com o usuário. Além das funções, é possível também manter os Records na biblioteca.

A sintaxe de F# é muito parecido com OCaml, com algumas pequenas diferenças. Por exemplo, usa-se PascalCase em F#, enquanto que em OCaml, é usado snake_case.

O projeto LoadRules cria automaticamente o arquivo Library.fs. Vamos utilizar esse mesmo arquivo para escrever o código, mantendo uma estrutura básica

Records

Vamos começar com o record que representa o cliente. Essa estrutura irá armazenar dados como idade, proventos e score de crédito:

Customer: - Age: int - Income: float - CreditScore: int

Você pode criar o Record de forma análoga a feita em OCaml, mas lembrando que precisa ser em PascalCase:

type Customer = {
    Age: int
    Income: float
    CreditScore: int
}

Exercício 1:

Crie agora um novo Record chamado Loan com 3 campos: Amount, InterestRate e TermMonths. Os dois primeiros são float e o último é inteiro.

Exercício 2:

Crie um Record chamado LoanRequest com 2 campos: Customer e Loan.

A nova estrutura irá conter os dados referentes a um empréstimo em específico.

Functions

Por último vamos substituir o módulo atual por um novo módulo chamado Elegibility. Dentro colocaremos uma única função por enquanto chamada isEligible. Essa função irá receber um record referente ao usuário e um record referente ao empréstimo e retorna um boolean.

A regra de negócio é para aprovação do empréstimo (retorno true):

  • Se o usuário tem 18 anos ou mais
  • Se a renda é maior ou igual ao dobro do valor do empréstimo
  • Se o score de crédito é superior a 649

Exercício 3:

Codificar a função acima no módulo

Integração

Na integração entre as plataformas, o Record se tornará algo parecido com uma classe com um construtor automático contendo todos os campos.

Logo, é possível construir objetos em C# usando o Record declarado em F#:

var customer = new Customer(30, 60000, 700);

O único detalhe principal é que a ordem declarada precisa ser mantida no construtor, ao contrário do OCaml que permitia qualquer ordem.

Exercício 4:

Reescreva o programa em C# para realizar a chamada da nova função.