مسیرها
/
Gleam
Gleam
/
تمرین‌ها
/
روز ولنتاین
روز ولنتاین

روز ولنتاین

تمرین یادگیری

مقدمه

نوع دادهی سفارشی

نوع دادهی سفارشی روشی است که با آن نوعهای دادهی جدید در Gleam تعریف می‌شوند. هر نوع دادهی سفارشی می‌تواند چندین «گونه» داشته باشد که هر کدام اسم خودش را دارد.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

هر گونه از یک نوع دادهی سفارشی می‌تواند به‌صورت اختیاری داده‌هایی را نگه دارد، و گونه‌های مختلف می‌توانند نوع‌های مختلفی از داده داشته باشند. وقتی یک گونه داده نگه می‌دارد، به آن «رکورد» می‌گویند.

pub type Number {
  SomeInt(Int)
  SomeFloat(Float)
  Invalid
}

برای ساختن یک مقدار برای یک گونه‌ی خاص، اگر داده‌ی اضافی نداشته باشد می‌توان به اسم آن اشاره کرد (Spring)، و اگر داشته باشد آن را به‌عنوان یک تابع فراخوانی کرد (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

نوع‌های داده‌ی سفارشی، همراه با همه‌چیز در Gleam، «برابری ساختاری» دارند، یعنی دو مقدار از یک گونه و با داده‌ی یکسان، معادل هستند.

Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False

می‌توان با استفاده از عبارت‌های case روی گونه‌های نوع داده‌ی سفارشی تطبیق الگو انجام داد.

import gleam/int
import gleam/float

pub fn describe(flexible_number: Number) -> String {
  case flexible_number {
    SomeFloat(f) -> "Float: " <> float.to_string(f)
    SomeInt(i) -> "Int: " <> int.to_string(i)
    Invalid -> "Neither a float nor an int"
  }
}

دستورالعمل‌ها

در این تمرین، روز ولنتاین است و شما و همراهتان قصد دارید با هم کار قشنگی انجام دهید. همراهتان ایده‌های زیادی دارد و حالا از شما می‌خواهد که ایده‌ها را ارزیابی کنید تا فعالیتی را که می‌خواهید در آن شرکت کنید پیدا کنید.

ایده‌های زیر را همراهتان پیشنهاد کرده است:

  • بازی رومیزی
  • استراحت
  • تماشای فیلم
  • رفتن به رستوران
  • پیاده‌روی

شش کار دارید که به شما کمک می‌کنند فعالیت روز ولنتاین را انتخاب کنید.

1. تعریف تأیید

برای هر ایده‌ای که همراهتان پیشنهاد می‌کند، شما با یکی از سه گزینه پاسخ می‌دهید: بله، خیر یا شاید.

یک «نوع سفارشی» به اسم Approval تعریف کنید که این گزینه‌ها را به‌صورت سه حالت زیر نشان می‌دهد: Yes، No و Maybe.

2. تعریف آشپزی‌ها

همراهتان دو رستوران ممکن را انتخاب کرده است: یکی با آشپزی کره‌ای و دیگری با آشپزی ترکی.

یک نوع سفارشی به اسم Cuisine تعریف کنید که این آشپزی‌ها را به‌صورت دو حالت زیر نشان می‌دهد: Korean و Turkish.

3. تعریف ژانرهای فیلم

فیلم‌های بی‌شماری برای انتخاب وجود دارد؛ بنابراین برای محدودتر کردن انتخاب‌ها، همراهتان ژانر آن‌ها را هم فهرست می‌کند.

یک نوع سفارشی به اسم Genre تعریف کنید که ژانرهای زیر را به‌عنوان حالت‌ها نشان می‌دهد: Crime، Horror، Romance و Thriller.

4. تعریف فعالیت

همان‌طور که گفتیم، همراهتان پنج فعالیت مختلف پیشنهاد کرده است: بازی رومیزی، استراحت، تماشای فیلم، رفتن به رستوران و پیاده‌روی.

یک نوع سفارشی به اسم Activity تعریف کنید که این انواع فعالیت را نشان می‌دهد:

  • BoardGame: بدون داده‌ی همراه.
  • Chill: بدون داده‌ی همراه.
  • Movie: Genre را به‌عنوان داده‌ی همراه دارد.
  • Restaurant: Cuisine را به‌عنوان داده‌ی همراه دارد.
  • Walk: یک Int به‌عنوان داده‌ی همراه دارد که تعداد کیلومترهای پیاده‌روی را نشان می‌دهد.

5. ارزیابی فعالیت

بالاخره آماده‌اید ایده‌های همراهتان را ارزیابی کنید. نظر شما درباره‌ی ایده‌ی همراهتان این است:

  • بازی رومیزی: خیر.
  • استراحت: خیر.
  • تماشای فیلم: اگر فیلم عاشقانه باشد بله، در غیر این صورت خیر.
  • رفتن به رستوران: اگر آشپزی‌اش کره‌ای باشد بله، اگر ترکی باشد شاید.
  • پیاده‌روی: اگر پیاده‌روی بیش از یازده کیلومتر باشد بله؛ اگر بیش از شش کیلومتر باشد شاید؛ در غیر این صورت خیر.

تابعی به اسم rate_activity پیاده‌سازی کنید که یک مقدار Activity می‌گیرد و بر اساس احساس‌های بالا مقدار Approval را برمی‌گرداند:

rate_activity(Restaurant(Turkish))
// -> Maybe
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Gleam Exercism

آماده‌اید روز ولنتاین را شروع کنید؟

در Exercism ثبت‌نام کنید تا Gleam را همراه با 33 مفهوم122 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.