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 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
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.
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.
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.
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.
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.
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
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"
Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.