學習軌道
/
Gleam
Gleam
/
練習
/
天氣排名
天氣排名

天氣排名

學習練習

簡介

常數

Gleam 中的常數是一種為值取名字的方式。它們是用const關鍵字定義的。

pub const pi: Float = 3.14159

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

用pub關鍵字定義的模組常數可以從其他模組存取,否則就只能從定義它們的模組內存取。

順序

Gleam 標準函式庫中的gleam/order模組包含了Order型別,用來比較值。

Order的定義看起來像這樣:

pub type Order {
  Gt
  Eq
  Lt
}

這個型別有三個變體,分別用來表示某個值與另一個值之間的關係:

  • Gt:這個值_大於_另一個值。
  • Eq:這個值_等於_另一個值。
  • Lt:這個值_小於_另一個值。

如果某個資料型態可以比較大小,模組通常會定義一個回傳Order值的compare函式。例如,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]

說明

Tori 是一位氣候記者,她想寫一篇關於不同城市天氣的報導。她手上有這些城市的天氣資料,想依氣溫將它們排名,但有些溫度是華氏,有些是攝氏。她需要你幫忙把溫度換算成同一個單位,再進行排名。

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,透過 33 個概念122 個練習 和真人引導來學習並精通 Gleam,全部免費。