ট্র্যাক
/
Rust
Rust
/
অনুশীলনী
/
স্বাস্থ্য পরিসংখ্যান
স্বাস্থ্য পরিসংখ্যান

স্বাস্থ্য পরিসংখ্যান

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

ভূমিকা

অনেক সময় একগুচ্ছ আইটেমকে একসাথে দলবদ্ধ করা এবং সেই দলগুলোকে একক হিসেবে ব্যবহার করা কাজে লাগে। Rust-এ এমন একটি দলকে আমরা struct বলি, আর প্রতিটি আইটেমকে বলি struct-এর একটি ফিল্ড। একটি struct কোন কোন ফিল্ড থাকতে পারে তার সাধারণ সেট নির্ধারণ করে, কিন্তু struct-এর একটি নির্দিষ্ট উদাহরণকে বলা হয় ইনস্ট্যান্স।

এর বাইরে, struct-এর উপর মেথড ডিফাইন করা যায়, যেগুলোর ফিল্ডগুলোতে অ্যাক্সেস থাকে। সেক্ষেত্রে struct নিজেকেই self হিসেবে উল্লেখ করা হয়। যখন একটি মেথড &mut self ব্যবহার করে, তখন ফিল্ডগুলো পরিবর্তন করা যায়, অর্থাৎ মিউটেট করা যায়। আর যখন একটি মেথড &self ব্যবহার করে, তখন ফিল্ডগুলো পরিবর্তন করা যায় না: সেগুলো ইমিউটেবল। মিউটেবিলিটি নিয়ন্ত্রণ করলে বরো-চেকার নিশ্চিত করতে পারে যে concurrency bug-এর গোটা কয়েকটি শ্রেণী Rust-এ আর ঘটেই না।

এই অনুশীলনীতে আপনি একটি struct-এর উপর দুই ধরনের মেথড তৈরি করবেন। প্রথম ধরনের মেথডগুলোকে সাধারণত গেটার বলা হয়: এগুলো struct-এর ফিল্ডগুলো বাইরের জগতের সামনে তুলে ধরে, কিন্তু অন্য কাউকে সেই মান মিউটেট করতে দেয় না। Rust-এ রীতি অনুযায়ী এই মেথডগুলোর নাম হয় যে ফিল্ডটি তারা প্রকাশ করে তারই নাম, অর্থাৎ যদি name নামের একটি struct ফিল্ড এনে দেওয়ার জন্য একটি গেটার মেথড থাকে, তাহলে মেথডটির নাম হবে শুধু name()।

আপনি আরেক ধরনের মেথডও তৈরি করবেন, যেগুলোকে সাধারণত সেটার বলা হয়। এগুলো ফিল্ডের মান পরিবর্তন করে। সেটার Rust-এ খুব একটা কমন নয়: যদি একটি ফিল্ড অবাধে পরিবর্তন করা যায়, তাহলে সেটিকে সাধারণত শুধু পাবলিক করে দেওয়াই বেশি প্রচলিত। কিন্তু ফিল্ড আপডেট করার সময় কোনো সাইড এফেক্ট থাকলে, বা অ্যাক্সেস নিয়ন্ত্রণের জন্য সেটার কাজে লাগে: pub(crate) হিসেবে চিহ্নিত একটি সেটার একই ক্রেটের অন্য মডিউলগুলোকে একটি প্রাইভেট ফিল্ড আপডেট করার সুযোগ দেয়, যে ফিল্ড বাইরের জগৎ ছুঁতেই পারে না।

struct সাধারণত তিন ধরনের হয়: নামযুক্ত ফিল্ডের struct, টুপল struct, আর ইউনিট struct। এই কনসেপ্ট অনুশীলনীতে আমরা প্রথম ধরনটি দেখব: নামযুক্ত ফিল্ডের struct।

struct ডিফাইন করা হয় struct কিওয়ার্ড দিয়ে, তারপর আসে যে টাইপকে struct বর্ণনা করছে, তার প্রথম অক্ষর বড় হাতের লেখা নাম:

struct Item {}

এরপর আরও টাইপ struct-এর বডিতে struct-এর ফিল্ড হিসেবে যোগ করা হয়, প্রতিটির নিজস্ব টাইপ থাকে:

struct Item {
    name: String,
    weight: f32,
    worth: u32,
}

সবশেষে, struct-এর উপর মেথড ডিফাইন করা যায় একটি impl ব্লকের ভেতরে:

impl Item {
    // initializes and returns a new instance of our Item struct
    fn new() -> Self {
        todo!()
    }
}

struct-এর সিনট্যাক্স নিয়ে এই সংক্ষিপ্ত পরিচিতি শেষে, এবার এই অনুশীলনীর নির্দেশনা একবার দেখে নিন!

নির্দেশনা

আপনি একটি স্বাস্থ্য মনিটরিং সিস্টেম তৈরি করার কাজ করছেন। তার অংশ হিসেবে আপনাকে ইউজারদের স্বাস্থ্য পরিসংখ্যানের হিসাব রাখতে হবে।

শুরুতে একটি impl ব্লকে কিছু স্টাব করা ফাংশন পাবেন, সঙ্গে পাবেন নিচের স্ট্রাক্ট ডেফিনিশনটিও:

pub struct User {
    name: String,
    age: u32,
    weight: f32,
}

আপনার লক্ষ্য হলো impl ব্লকে ডিফাইন করা User struct-এর স্টাব করা মেথডগুলো ইমপ্লিমেন্ট করা।

যেমন, new মেথডটি নির্দিষ্ট নাম, বয়স ও ওজনের মানসহ User struct-এর একটি ইনস্ট্যান্স রিটার্ন করবে।

let mut bob = User::new(String::from("Bob"), 32, 155.2);
// Returns: a User with name "Bob", age 32, and weight 155.2

weight মেথডটি User struct-এর ওজন রিটার্ন করবে।

bob.weight();
// Returns: 155.2

set_age মেথডটি User struct-এর বয়স সেট করবে।

bob.set_age(33);
// Updates Bob's age to 33; happy birthday Bob!

শুভকামনা!

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Rust Exercism

স্বাস্থ্য পরিসংখ্যান শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Rust ট্র্যাকের 99টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।