Trilhas
/
Gleam
Gleam
/
Exercícios
/
Loja de Bicicletas da Betty
Loja de Bicicletas da Betty

Loja de Bicicletas da Betty

Exercício de aprendizagem

Introdução

Inteiros

Existem dois tipos diferentes de números no Gleam: os inteiros e os números de ponto flutuante.

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

let integer = 3
// -> 3

O 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 ponto flutuante

Números de ponto flutuante são números com um ou mais dígitos depois do separador decimal.

let float = 3.45
// -> 3.45

Os números de ponto flutuante também têm 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 é organizado em módulos, e cada arquivo é 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. Funções definidas com fn são privadas do módulo em que foram 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 do Gleam têm nomes, e o nome é baseado no caminho do arquivo 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 operacionais do tipo UNIX) se chamaria geometry/rectangle.

Importando funções de outros módulos

O acesso a funções definidas em outros módulos é feito por meio de importações. Todas as funções daquele módulo que foram expostas por ele ficam acessíveis quando você importa esse módulo. Mas a forma de acessá-las varia conforme o modo como o módulo é importado.

Importações qualificadas são o padrão, e para acessar uma função dentro desse módulo (por exemplo a função map do módulo gleam/list) você escreve o nome do módulo antes (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 padrão, o nome usado para se referir ao módulo é a última parte do nome do módulo, neste caso int, mas isso pode ser mudado 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)
}

Importações não qualificadas permitem acessar diretamente as funções expostas 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)
}

Importações qualificadas são preferíveis porque deixam mais claro para quem lê de onde vem a função, além de evitar conflitos de nomes.

Biblioteca padrão

O Gleam tem uma biblioteca padrão rica e bem documentada. A documentação está disponível online em hexdocs.pm/gleam_stdlib. Salve este link em algum lugar, você vai usá-lo muito!

A maioria dos tipos de dados embutidos tem um módulo correspondente que oferece funções para trabalhar com esse tipo de dados, por exemplo, existe 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, você vai escrever um código para ajudar a Betty's Bike Shop, uma loja online de bicicletas e peças. Você tem três tarefas, com o objetivo de exibir corretamente os preços das bicicletas e das peças no site.

1. Exporte a função pence_to_pounds

Alguém da sua equipe já escreveu o esqueleto do módulo, com as funções incompletas pence_to_pounds e pounds_to_string. No entanto, essa pessoa esqueceu de exportar a função pence_to_pounds, então no momento ela não é visível para outros módulos nem para a suíte de testes.

Exporte a função pence_to_pounds.

2. Converta pence em libras

No momento, o preço é armazenado como um número inteiro de pence (a loja de bicicletas fica no Reino Unido). No site, queremos mostrar o preço em libras, em que 1 libra equivale a 100 pence. Sua primeira tarefa é implementar a função pence_to_pounds, que recebe uma quantidade de pence como Int e a converte no valor equivalente em libras como Float. Você também deve adicionar anotações de tipo para essa função.

pence_to_pounds(106)
// -> 1.06

3. Formate o preço para exibição no site

Como as bicicletas da Betty são vendidas em libras, os preços devem ser exibidos com o símbolo "£". Sua segunda tarefa, então, é implementar a função pounds_to_string, que recebe uma quantidade de libras como Float e retorna seu preço exibido como uma String com o símbolo da libra na frente.

Você deve importar os módulos gleam/float e gleam/string antes de usá-los.

Você também deve definir a anotação de tipo para pounds_to_string.

pounds_to_string(1.06)
// -> "£1.06"
Editar via GitHub O link abre em uma nova janela ou aba
Gleam Exercism

Tudo pronto para começar Loja de Bicicletas da Betty?

Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.