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
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
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.
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.
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.
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.
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.
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
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"
Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.