Básico Sobre Inferência de Tipos em F#
F# é uma linguagem fortemente tipada. Ou seja, todos os dados possuem tipos definidos em tempo de compilação.
Apesar disso não é necessário dizer que tipos serão usados, devido à uma característica peculiar da linguagem, a inferência de tipos.
O compilador tentará descobrir que tipo pode ser usado sempre que possível.
Vejamos como funciona:
🐚 dotnet fsi
Microsoft (R) F# Interactive version 11.3.2.0 for F# 5.0
Copyright © Microsoft Corporation. All Rights Reserved.For help type #help;;
> let nome:string=”Eliz”;;
val nome : string = “Eliz”
Neste caso foi definida uma variável e dizemos que o tipo dela é string. Entretanto definir o tipo não é necessário:
> let nome=”Eliz”;;
val nome : string = “Eliz”
O tipo de nome foi definido como string mesmo sem defini-lo explicitamente! O que acontece é que o compilador vê o que está sendo passado do lado direito da expressão e atribui o tipo, tudo em tempo de compilação.
Mas tem coisa mais interessante. Veja o trecho a seguir:
> type Pessoa={Nome: string};;
type Pessoa =
{ Nome: string }> let nome a = a.Nome;;
val nome : a:Pessoa -> string
No trecho acima definimos um tipo Pessoa que armazena um dado de tipo string.
Em seguida criamos uma função chamado nome que retorna o dado Nome dentro do tipo Pessoa.
Note que mesmo sem dizer que o argumento da função a é um tipo Pessoa o compilador foi capaz de identificar que a é deste tipo e Nome é uma string!
Vamos colocar outro dado dentro do tipo Pessoa e ver se funciona:
> type Pessoa={Nome: string; CPF: int};;
type Pessoa =
{ Nome: string
CPF: int }> let cpf a = a.CPF;;
val cpf : a:Pessoa -> int
Funciona! Mesmo sem saber que a era um tipo Pessoa o compilador foi capaz de identificar os tipos corretamente!
Até a próxima!