Треки
/
Gleam
Gleam
/
Вправи
/
Рейтинг погоди
Рейтинг погоди

Рейтинг погоди

Навчальна вправа

Вступ

Константи

У Gleam константи дають змогу давати значенням імена. Їх визначають за допомогою ключового слова const.

pub const pi: Float = 3.14159

pub fn circle_area(radius: Float) -> Float {
  radius *. radius *. pi
}

Якщо константу визначено з ключовим словом pub, до неї можна звертатися з інших модулів, інакше вона доступна лише всередині модуля, де її визначено.

Порядок

Модуль gleam/order зі стандартної бібліотеки Gleam містить тип Order, який використовують для порівняння значень.

Визначення Order має такий вигляд:

pub type Order {
  Gt
  Eq
  Lt
}

Тип має три варіанти, і кожен із них описує відношення між одним значенням та іншим:

  • Gt - значення більше за інше значення.
  • Eq - значення дорівнює іншому значенню.
  • Lt - значення менше за інше значення.

Якщо тип даних можна порівнювати за величиною, зазвичай модуль визначає функцію compare, яка повертає значення Order. Наприклад, gleam/float і gleam/int визначають функції compare, які працюють відповідно з числами з плаваючою комою та цілими числами.

int.compare(1, 2)
// -> Lt

int.compare(2, 2)
// -> Eq

float.compare(1.0, 2.0)
// -> Lt

Функції сортування, як-от list.sort, зазвичай приймають функцію, яка повертає значення Order, тож той, хто викликає, може визначити, як саме сортувати список.

list.sort([3, 7, 3, 1], by: int.compare)
// -> [1, 3, 3, 7]

Вказівки

Торі працює журналісткою і пише про клімат. Вона хоче написати статтю про погоду в різних містах. У неї є дані про погоду в різних містах, і вона хоче впорядкувати їх за температурою, але одні температури подано в градусах Фаренгейта, а інші - в градусах Цельсія. Їй потрібна наша допомога, щоб перевести температури в однакову одиницю виміру й упорядкувати їх.

1. Перевести градуси Фаренгейта в градуси Цельсія

Визначте функцію fahrenheit_to_celsius, яка приймає температуру в градусах Фаренгейта як аргумент і повертає температуру в градусах Цельсія.

Щоб перевести градуси Фаренгейта в градуси Цельсія, відніміть 32 від значення у градусах Фаренгейта, а потім поділіть результат на 1.8.

fahrenheit_to_celsius(72.5)
// -> 22.5

2. Порівняти дві температури

Визначте функцію compare_temperature, яка приймає дві температури й повертає значення типу Order, що вказує, чи перша температура менша за другу, дорівнює їй чи більша за неї.

compare_temperature(Celsius(30.5), Fahrenheit(82.1))
// -> Gt

3. Упорядкувати міста за температурою

Визначте функцію sort_cities_by_temperature, яка приймає масив міст і повертає їх від найхолоднішого до найтеплішого.

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)))
// ]
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Gleam Exercism

Час розпочати Рейтинг погоди?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Gleam, а також 33 концепції122 вправи та справжнє наставництво від людей, і все це безкоштовно.