صندوق گنج

صندوق گنج

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

مقدمه

جنریک

یک نوع زمانی نوع جنریک است که بتواند با استفاده از یک پارامتر نوع، مقادیر هر نوعی را در خود نگه دارد.

برای نمونه، این نوع Box پارامتر نوع a را دارد (که با حروف کوچک نوشته می‌شود).

pub type Box(a) {
  Box(a)
}

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

Box("Hello, Joe!") // The type is Box(String)

Box(42) // The type is Box(Int)

یک نوع می‌تواند چندین پارامتر نوع داشته باشد که با ویرگول از هم جدا می‌شوند.

pub type Pair(a, b) {
  Pair(a, b)
}

توابع جنریک

پارامترهای نوع را می‌توان در آرگومان‌های توابع هم به کار برد.

این تابع یک مقدار از نوع a می‌گیرد و تابعی را که یک a می‌گیرد و یک b برمی‌گرداند، دو بار فراخوانی می‌کند.

pub fn twice(value: a, f: fn(a) -> b) -> b {
  f(value)
  f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)

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

در این تمرین قرار است یک TreasureChest عمومی (یا به بیان بهتر، جادویی!) بنویسید تا گنجی را در آن ذخیره کنید.

1. نوع سفارشی عمومی TreasureChest را تعریف کنید

یک نوع سفارشی TreasureChest با یک «گونه» تعریف کنید.

این گونه باید یک مقدار String همراه داشته باشد که برای ذخیره‌ی رمز صندوق گنج استفاده می‌شود.

این گونه همچنین باید یک مقدار عمومی همراه داشته باشد که برای ذخیره‌ی گنج استفاده می‌شود. این مقدار عمومی است تا گنج بتواند هرچه باشد.

2. نوع UnlockResult را تعریف کنید

یک نوع سفارشی UnlockResult با دو گونه تعریف کنید.

گونه‌ی اول باید Unlocked باشد و یک مقدار عمومی را در خود نگه دارد که برای ذخیره‌ی گنج استفاده می‌شود.

گونه‌ی دوم باید WrongPassword باشد که هیچ مقداری در خود نگه نمی‌دارد.

3. تابع get_treasure را تعریف کنید

این تابع باید دو پارامتر بگیرد

  • یک نوع سفارشی عمومی TreasureChest
  • یک String (برای امتحان کردن رمز)

این تابع باید رمز واردشده را با String موجود در TreasureChest بررسی کند.

تابع باید یک UnlockResult برگرداند.

اگر رمزها یکسان باشند، Unlocked را همراه با مقدار عمومی موجود در TreasureChest برگردانید (همان گنج!)

اگر رمزها یکسان نباشند، WrongPassword را برگردانید.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Gleam Exercism

آماده‌اید صندوق گنج را شروع کنید؟

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