নিউজলেটার

নিউজলেটার

লার্নিং অনুশীলনী

ভূমিকা

Nil

Gleam-এ Nil হলো এমন একটি টাইপ, যার একটিই মান, যাকে-ও Nil বলা হয়। এটি অন্য ভাষার void-এর মতো, কারণ কোনো ফাংশনের রিটার্ন করার জন্য আর কোনো উপযুক্ত মান না থাকলে এটি ব্যবহার করা হয়।

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

Gleam-এ মানগুলো অন্য কিছু ভাষার মতো "নিল-যোগ্য" বা "নাল-যোগ্য" নয়। কোনো মান কেবল তখনই Nil হতে পারে যখন তার টাইপ Nil, আর অন্য যেকোনো টাইপের মান কখনোই Nil হতে পারে না।

IO

বেশিরভাগ প্রোগ্রামিং ভাষার মতোই Gleam-এও "সাইড এফেক্ট" আছে, তাই ফাংশনগুলো একটি মান রিটার্ন করার পাশাপাশি বাইরের জগতের অবস্থাও পড়তে ও বদলাতে পারে।

Gleam স্ট্যান্ডার্ড লাইব্রেরির gleam/io মডিউল কনসোলে স্ট্রিং প্রিন্ট করার ফাংশন দেয়।

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

অন্য প্যাকেজগুলো অন্য IO ফাংশনও দিতে পারে, যেমন simplifile, যা ফাইল পড়া ও লেখার ফাংশন দেয়।

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

নির্দেশনা

Boris মডেল ট্রেনের এক বড় ভক্ত, আর নিজের এই ভালোবাসা সবার সঙ্গে ভাগ করে নিতে তিনি একটি নিউজলেটার শুরু করার সিদ্ধান্ত নিয়েছেন। শুরুতে তিনি এই শখের সঙ্গে যুক্ত বন্ধু ও পরিচিতদের কাছে নিউজলেটারের প্রথম সংখ্যাটি পাঠাবেন; তাদের ইমেইল একটি টেক্সট ফাইলে সংরক্ষিত আছে।

ইঙ্গিত: ফাইল সংক্রান্ত কাজের জন্য 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।