خبرنامه

خبرنامه

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

مقدمه

Nil

Nil در Gleam نوعی است با یک مقدار واحد، که به آن Nil هم می‌گویند. این نوع شبیه void در زبان‌های دیگر است، از این جهت که وقتی یک تابع مقدار مناسب دیگری برای برگرداندن ندارد از آن استفاده می‌شود.

io.println("Hello, Joe!")
// -> Nil

مقادیر در Gleam مانند برخی زبان‌های دیگر نمی‌توانند تهی باشند. یک مقدار تنها زمانی می‌تواند Nil باشد که نوعش Nil باشد، و یک مقدار از هر نوع دیگری هرگز نمی‌تواند Nil باشد.

ورودی/خروجی

مانند بیشتر زبان‌های برنامه‌نویسی، Gleam هم «اثرات جانبی» دارد، بنابراین توابع می‌توانند وضعیت جهان را بخوانند و تغییر دهند، و همچنین مقداری را برگردانند.

ماژول gleam/io در کتابخانه‌ی استاندارد Gleam توابعی برای چاپ رشته‌ها در کنسول فراهم می‌کند.

io.println("Hello, Joe!")
// Hello, Joe!
// -> Nil

بسته‌های دیگر ممکن است توابع ورودی/خروجی دیگری ارائه دهند، مانند simplifile، بسته‌ای که توابعی برای خواندن و نوشتن فایل‌ها فراهم می‌کند.

simplifile.read("favourite-colour.txt")
// -> Ok("Pink\n")

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

بوریس علاقه‌ی زیادی به قطارهای مدل دارد و تصمیم گرفته اشتیاقش را با راه‌اندازی یک خبرنامه با دنیا به اشتراک بگذارد. او کار را با فرستادن اولین شماره‌ی خبرنامه برای دوستان و آشنایانی که این سرگرمی را دارند آغاز می‌کند؛ نشانی‌های ایمیل آنان در یک فایل متنی ذخیره شده است.

راهنما: برای عملیات فایل از ماژول simplifile استفاده کنید.

1. خواندن نشانی‌های ایمیل از یک فایل

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

read_emails("/home/my_user/documents/model_train_friends_emails.txt")
// -> Ok(["rick@example.com", "choochoo42@example.com", "anna@example.com"])

2. ساختن یک فایل لاگ برای نوشتن

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

تابع create_log_file را پیاده‌سازی کنید. این تابع یک مسیر فایل می‌گیرد و یک فایل خالی جدید در آن مکان می‌سازد.

create_log_file("/home/my_user/documents/newsletter_issue1_log.txt")
// -> Ok(Nil)

3. ثبت یک ایمیل فرستاده‌شده

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

log_sent_email(
  "/home/my_user/documents/newsletter_issue1_log.txt",
  "joe@example.com",
)
// -> Ok(Nil)

4. فرستادن خبرنامه

حالا که همه‌ی قطعه‌های لازم برای روند فرستادن ایمیل را دارید، باید آن‌ها را در یک تابع واحد کنار هم بگذارید.

تابع send_newsletter را پیاده‌سازی کنید. این تابع مسیر فایلی با نشانی‌های ایمیل، مسیر یک فایل لاگ و یک تابع بینام می‌گیرد که ایمیلی را به نشانی ایمیل داده‌شده می‌فرستد.

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

send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  send_email,
)
// -> Ok(Nil)
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Gleam Exercism

آماده‌اید خبرنامه را شروع کنید؟

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