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는 기후 저널리스트이고, 여러 도시의 날씨에 관한 기사를 쓰고 싶어 해요. 여러 도시의 날씨 데이터를 가지고 있는데, 온도를 기준으로 도시들의 순위를 매기고 싶어 해요. 그런데 어떤 온도는 화씨이고 어떤 온도는 섭씨예요. Tori를 도와 온도를 같은 단위로 변환하고 순위를 매겨 주세요.
화씨 온도를 인자로 받아 섭씨 온도를 반환하는 fahrenheit_to_celsius 함수를 정의해요.
화씨를 섭씨로 변환하려면 화씨 값에서 32를 뺀 다음, 그 결과를 1.8로 나눠요.
fahrenheit_to_celsius(72.5)
// -> 22.5
두 온도를 인자로 받아, 첫 번째 온도가 두 번째 온도보다 작은지, 같은지, 큰지를 나타내는 Order 값을 반환하는 compare_temperature 함수를 정의해요.
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개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.