Percursos
/
Gleam
Gleam
/
Exercícios
/
Classificação do Tempo
Classificação do Tempo

Classificação do Tempo

Exercício de aprendizagem

Introdução

Constantes

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.

Ordens

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]

Instruções

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.

1. Converter Fahrenheit em Celsius

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

2. Comparar duas temperaturas

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

3. Ordenar cidades por temperatura

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)))
// ]
Editar via GitHub A ligação abre numa nova janela ou separador
Gleam Exercism

Estás pronto para começar Classificação do Tempo?

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