مسیرها
/
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 را تعریف می‌کنند که به‌ترتیب روی floatها و intها کار می‌کنند.

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 را تعریف کنید که دمایی بر حسب فارنهایت را به عنوان آرگومان می‌گیرد و همان دما را بر حسب سلسیوس برمی‌گرداند.

برای تبدیل فارنهایت به سلسیوس، ۳۲ را از مقدار فارنهایت کم کنید و سپس نتیجه را بر ۱٫۸ تقسیم کنید.

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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.