As constantes em Gleam são uma forma de dar nomes a valores. Definem-se com a palavra-chave const.
pub const pi: Float = 3.14159
pub fn circle_area(radius: Float) -> Float {
radius *. radius *. pi
}
Quando são definidas com a palavra-chave pub, as constantes de módulo podem ser acedidas a partir de outros módulos; caso contrário, só podem ser acedidas dentro do módulo onde são definidas.
O módulo gleam/order da biblioteca padrão do Gleam contém o tipo Order, que serve para comparar valores.
A definição de Order é esta:
pub type Order {
Gt
Eq
Lt
}
O tipo tem três variantes, cada uma usada para representar a relação entre um valor e outro valor:
Gt - o valor é maior do que o outro valor.Eq - o valor é igual a o outro valor.Lt - o valor é menor do que o outro valor.Se um tipo de dados puder ser comparado por tamanho, é comum o módulo definir uma função compare que devolve um valor do tipo Order. Por exemplo, gleam/float e gleam/int definem funções compare que operam sobre números de vírgula flutuante e inteiros, respetivamente.
int.compare(1, 2)
// -> Lt
int.compare(2, 2)
// -> Eq
float.compare(1.0, 2.0)
// -> Lt
As funções de ordenação, como list.sort, recebem habitualmente uma função que devolve um valor do tipo Order, permitindo a quem chama definir como a lista deve ser ordenada.
list.sort([3, 7, 3, 1], by: int.compare)
// -> [1, 3, 3, 7]
A Tori é jornalista de clima e quer escrever um artigo sobre o tempo em diferentes cidades. Tem dados sobre o tempo em várias cidades e quer ordená-las com base na temperatura, mas algumas temperaturas estão em Fahrenheit e outras em Celsius. Precisa da tua ajuda para converter as temperaturas para a mesma unidade e ordená-las.
Define a função fahrenheit_to_celsius, que recebe uma temperatura em Fahrenheit como argumento e devolve a temperatura em Celsius.
Para converter Fahrenheit em Celsius, subtrai 32 ao valor em Fahrenheit e depois divide o resultado por 1.8.
fahrenheit_to_celsius(72.5)
// -> 22.5
Define a função compare_temperature, que recebe duas temperaturas e devolve um valor Order que indica se a primeira temperatura é menor, igual ou maior do que a segunda.
compare_temperature(Celsius(30.5), Fahrenheit(82.1))
// -> Gt
Define a função sort_cities_by_temperature, que recebe uma lista de cidades e devolve-as da mais fria para a mais quente.
sort_cities_by_temperature([
City(name: "London", temperature: Celsius(30.5)),
City(name: "Paris", temperature: Fahrenheit(82.1))
])
// -> [
// City(name: "Paris", temperature: Fahrenheit(82.1)),
// City(name: "London", temperature: Celsius(30.5)))
// ]
Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.