У 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]
Торі працює журналісткою і пише про клімат. Вона хоче написати статтю про погоду в різних містах. У неї є дані про погоду в різних містах, і вона хоче впорядкувати їх за температурою, але одні температури подано в градусах Фаренгейта, а інші - в градусах Цельсія. Їй потрібна наша допомога, щоб перевести температури в однакову одиницю виміру й упорядкувати їх.
Визначте функцію fahrenheit_to_celsius, яка приймає температуру в градусах Фаренгейта як аргумент і повертає температуру в градусах Цельсія.
Щоб перевести градуси Фаренгейта в градуси Цельсія, відніміть 32 від значення у градусах Фаренгейта, а потім поділіть результат на 1.8.
fahrenheit_to_celsius(72.5)
// -> 22.5
Визначте функцію compare_temperature, яка приймає дві температури й повертає значення типу Order, що вказує, чи перша температура менша за другу, дорівнює їй чи більша за неї.
compare_temperature(Celsius(30.5), Fahrenheit(82.1))
// -> Gt
Визначте функцію 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)))
// ]
Зареєструйтеся на Exercism, щоб вивчати й опановувати Gleam, а також 33 концепції122 вправи та справжнє наставництво від людей, і все це безкоштовно.