Noções básicas sobre registros F#

O objetivo deste artigo é ilustrar como os registros F# podem ser definidos e usados. Aqui, vamos falar sobre a sintaxe necessária para definir registros, acessar seus campos e criar instâncias de registros.

Além disso, falaremos sobre as vantagens de usar registros F#, como o fato de serem imutáveis ​​e também oferecerem suporte à correspondência de padrões.



Registros F#

O registro F# ​​é semelhante a uma classe ou struct em outra linguagem de programação, mas há algumas diferenças importantes que os tornam especiais em relação a outras linguagens de programação.

Os valores de registro são imutáveis ​​por padrão, o que significa que, uma vez criados, não podem ser alterados.

Um tipo de registro pode ser considerado como outro tipo de valor, portanto, é semelhante a um tipo de referência, pois é passado como um valor em vez de uma referência a outro registro.

Sintaxe

type website =
{ title : string;
url : string }

Criar um registro F#

Para criar um registro, você precisa especificar os campos do registro.

Suponha que criássemos um registro para o site chamado home, por exemplo:

let homepage = { Title = "mrexamples"; Url = "www.mrexamples.com" }

Abaixo está um exemplo que ilustra claramente o conceito de registros.


Declarar registro em F#

Existem dois tipos de registros definidos, a saber:

  • Registros que são definidos pela palavra-chave type .
  • Registros que contêm campos.

Ambos são definidos por uma lista de campos separados por ponto e vírgula.

A sintaxe para definir um registro é a seguinte:

type recordName =
{ [ fieldName : dataType ] + }

 

Definindo um tipo de registro chamado site

Abaixo está um exemplo de definição de registros do nome do site e suas urls:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type website =
{ Title : string;
Url : string }
//creating records
let home = { Title = "mrexample"; Url = "https://mrexamples.com/" }
let fsharp = { Title = "Learn F#"; Url = "https://mrexamples.com/f-sharp/" }
let pythonTutorial = { Title = "Learn Python"; Url = "https://mrexamples.com/python/" }
let phpTutorial = { Title = "Learn PHP"; Url = "https://mrexamples.com/php/" }
//printing records
(printfn "Home: Title: %A \nURL: %A") home.Title home.Url
(printfn "\nLearn F# from mrexamples: Title: %A \nURL: %A") fsharp.Title fsharp.Url
(printfn "\nLearn Python from mrexamples: Title: %A \nURL: %A") pythonTutorial.Title pythonTutorial.Url
(printfn "\nLearn Python from mrexamples: Title: %A \nURL: %A") phpTutorial.Title phpTutorial.Url
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

No exemplo acima, são impressos os seguintes registros:

Home: Title: mrexample
URL: https://mrexamples.com/

Learn F# from mrexamples: Title: Learn F#
URL: https://mrexamples.com/f-sharp/

Learn Python from mrexamples: Title: Learn Python
URL: https://mrexamples.com/python/

Learn Python from mrexamples: Title: Learn PHP
URL: https://mrexamples.com/php/

Outro exemplo de criação de um registro sobre um animal de estimação:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type Pet = {
Name: string
Age: int
Species: string
Owner: string
}
let myPet = { Name = "Cute"; Age = 2; Species = "Dog"; Owner = "Christopher" }
printfn "My pet's name is %s" myPet.Name
printfn "My pet's age is %d" myPet.Age
let printPetAge pet =
match pet with
| { Age = age } -> printfn "The pet's age is %d" age
| _ -> printfn "Unable to determine pet's age"
printPetAge myPet
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

A saída será como:

Exemplos de registro F#

Exemplo de Explicação

No exemplo acima, definimos um tipo de registro chamado Pet com quatro campos: Nome do tipo string , Idade do tipo int, Espécie do tipo string e Proprietário do tipo string.

Em seguida, criamos uma instância do registro Pet chamada myPet com os valores “ Cute ” para o nome, 2 para a idade, “ Dog ” para a espécie e “ Christopher ” para o dono.

Em seguida, usamos a função printfn para imprimir o nome e a idade do registro myPet no console.

Por fim, definimos uma função chamada printPetAge que recebe um registro Pet como entrada e usa correspondência de padrões para extrair o campo Age e imprimi-lo no console . Se o campo Idade não estiver presente no registro de entrada, a função imprime “ Não é possível determinar a idade do animal ”.

A função printPetAge é chamada com o registro myPet como argumento e imprime A idade do animal é 2  no console.


Registros de Registro de Alunos

Segue abaixo um exemplo de cadastro de cadastro de aluno:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
type student =
{ Name : string;
ID : int;
Registration : string;
IsRegistered : bool }
let getStudent name id =
{ Name = name; ID = id; Registration = null; IsRegistered = false }
let studentRegistration stu =
{ stu with
Registration = "Registered";
IsRegistered = true }
let printStudent msg stu =
printfn "%s: %A" msg stu
let main() =
let preRegistered = getStudent "Jennifer" 105
let postRegistered = studentRegisteration preRegistered
printStudent "Before Registration: " preRegistered
printStudent "\nAfter Registration: " postRegistered
main()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Os resultados de antes e depois do registro serão exibidos da seguinte forma:

Before Registration: : {Name = Jennifer;
ID = 105;
Registration = null;
IsRegistered = false}

After Registration: : {Name = Jennifer;
ID = 105;
Registration = Registered;
IsRegistered = true}
Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone