Percursos
/
Gleam
Gleam
/
Exercícios
/
A Loja de Bicicletas da Betty
A Loja de Bicicletas da Betty

A Loja de Bicicletas da Betty

Exercício de aprendizagem

Introdução

Inteiros

Em Gleam existem dois tipos diferentes de números: inteiros e números de vírgula flutuante.

Os inteiros são números sem parte fracionária.

let integer = 3
// -> 3

Gleam tem vários operadores que funcionam com inteiros.

1 + 1 // -> 2
5 - 1 // -> 4
5 / 2 // -> 2
3 * 3 // -> 9
5 % 2 // -> 1

2 > 1  // -> True
2 < 1  // -> False
2 >= 1 // -> True
2 <= 1 // -> False

Números de vírgula flutuante

Os números de vírgula flutuante são números com um ou mais algarismos depois do separador decimal.

let float = 3.45
// -> 3.45

Os números de vírgula flutuante também têm o seu próprio conjunto de operadores.

1.0 +. 1.4 // -> 2.4
5.0 -. 1.5 // -> 3.5
5.0 /. 2.0 // -> 2.5
3.0 *. 3.1 // -> 9.3

2.0 >. 1.0  // -> True
2.0 <. 1.0  // -> False
2.0 >=. 1.0 // -> True
2.0 <=. 1.0 // -> False

Módulos

Módulos

O código Gleam está organizado em módulos, e cada ficheiro é um módulo Gleam.

Até agora, escrevemos funções com a sintaxe pub fn, que define uma função disponível publicamente para outros módulos. As funções definidas com fn são privadas do módulo onde são definidas e não podem ser usadas por outros módulos.

// This function is public
pub fn add(x, y) {
  x + y
}

// This function is private
fn subtract(x, y) {
  x - y
}

Os módulos Gleam têm nomes, e o nome baseia-se no caminho do ficheiro dentro do diretório src ou test.

Por exemplo, um módulo definido em src\geometry\rectangle.gleam (no Windows) ou src/geometry/rectangle.gleam (em sistemas operativos do tipo UNIX) teria o nome geometry/rectangle.

Importar funções de outros módulos

O acesso a funções definidas noutros módulos faz-se através de importações. Todas as funções dentro desse módulo que foram expostas por ele ficam acessíveis quando importas esse módulo. Mas a forma como são acedidas varia consoante a forma como o módulo é importado.

As importações qualificadas são a predefinição, e o acesso a uma função dentro desse módulo (por exemplo, a função map no módulo gleam/list) faz-se colocando o nome do módulo como prefixo (list.map).

// Import the int module
import gleam/int

pub fn run(x: Int) -> String {
  // Use the to_string function from the int module
  int.to_string(x)
}

Por predefinição, o nome usado para fazer referência ao módulo é a última parte do nome do módulo, neste caso int, mas isto pode ser alterado com a palavra-chave as.

// Import the int module and refer to it as i
import gleam/int as i

pub fn run(x: Int) -> String {
  i.to_string(x)
}

As importações não qualificadas permitem o acesso direto às funções expostas dentro desse módulo, sem prefixo.

// Import the to_string function from the int module
import gleam/int.{to_string}

pub fn run(x: Int) -> String {
  to_string(x)
}

Prefere-se as importações qualificadas, pois tornam mais claro para quem lê de onde vem uma função e ajudam a evitar conflitos de nomes.

Biblioteca padrão

Gleam tem uma biblioteca padrão rica e bem documentada. A documentação está disponível online em hexdocs.pm/gleam_stdlib. Guarda este link algures, vais usá-lo muitas vezes!

A maioria dos tipos de dados incorporados tem um módulo correspondente que oferece funções para trabalhar com esse tipo de dados, por exemplo, há o módulo gleam/int para inteiros, o módulo gleam/string para strings, o módulo gleam/list para listas, e assim por diante.

Instruções

Neste exercício vais escrever algum código para ajudar a Betty's Bike Shop, uma loja online de bicicletas e peças. Tens três tarefas, que têm como objetivo mostrar corretamente os preços das bicicletas e das peças no site.

1. Exporta a função pence_to_pounds

O teu colega já escreveu o esqueleto do módulo, as funções incompletas pence_to_pounds e pounds_to_string. No entanto, esqueceu-se de exportar a função pence_to_pounds, por isso atualmente não é visível para outros módulos nem para o conjunto de testes.

Exporta a função pence_to_pounds.

2. Converte pence em libras

Atualmente, o preço é armazenado como um número inteiro de pence (a loja de bicicletas está sediada no Reino Unido). No site, queremos mostrar o preço em libras, em que 1,00 libra equivale a 100 pence. A tua primeira tarefa é implementar a função pence_to_pounds, que recebe uma quantidade de pence do tipo Int e a converte no equivalente em libras como Float. Deves também adicionar anotações de tipo para essa função.

pence_to_pounds(106)
// -> 1.06

3. Formata o preço para mostrar no site

Como as bicicletas da Betty são vendidas em libras, os preços devem ser apresentados com o símbolo "£". A tua segunda tarefa é, por isso, implementar a função pounds_to_string, que recebe uma quantidade de libras como Float e devolve o preço apresentado como String, com o símbolo da libra colocado no início.

Deves importar os módulos gleam/float e gleam/string antes de os utilizar.

Deves também definir a anotação de tipo para pounds_to_string.

pounds_to_string(1.06)
// -> "£1.06"
Editar via GitHub A ligação abre numa nova janela ou separador
Gleam Exercism

Estás pronto para começar A Loja de Bicicletas da Betty?

Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.