The Weather in Deather

The Weather in Deather

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

ভূমিকা

এক্সপ্রেশন বডিড মেম্বার

স্ট্রাক্ট ও ক্লাসের অনেক ধরনের মেম্বার (মূলত ফিল্ডগুলো ব্যতিক্রম) এক্সপ্রেশন বডিড মেম্বার সিনট্যাক্স ব্যবহার করতে পারে। প্রচলিত ব্লক বা স্টেটমেন্টের বদলে এক্সপ্রেশন দিয়ে একটি মেম্বার ডিফাইন করলে প্রায়ই আরও সংক্ষিপ্ত ও পাঠযোগ্য কোড পাওয়া যায়।

যেসব মেম্বার এক্সপ্রেশন বডি দিয়ে ডিফাইন করা যায়, মেথড ও রিড-অনলি প্রপার্টি তাদের মধ্যে অন্যতম।

public int Times3(int input) => input * 3;

public int Interesting => 1729;

সুইচ এক্সপ্রেশন

একটি সুইচ এক্সপ্রেশন একটি মানকে কতগুলো প্যাটার্নের মধ্যে একটি কেসের সঙ্গে মিলিয়ে দিতে পারে এবং সংশ্লিষ্ট মানটি রিটার্ন করতে পারে বা সংশ্লিষ্ট কাজটি করতে পারে। এই সম্পর্কটি => চিহ্ন দিয়ে বোঝানো হয়। এছাড়া প্রতিটি প্যাটার্নে when কিওয়ার্ড দিয়ে শুরু হওয়া একটি ঐচ্ছিক কেস গার্ড থাকতে পারে। সুইচের ওই "আর্ম" নির্বাচিত হতে হলে কেস গার্ড এক্সপ্রেশনটির মান ট্রু হতে হবে। কেসগুলো (যেগুলোকে _সুইচ আর্ম_ও বলা হয়) লেখার ক্রম অনুযায়ী মূল্যায়ন করা হয়, আর একটি মিল পাওয়া মাত্রই প্রক্রিয়াটি সেখানেই থেমে যায় এবং সংশ্লিষ্ট মানটি রিটার্ন করা হয়।

double xx = 42d;

string interesting = xx switch
{
    0 => "I suppose zero is interesting",
    3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
    3.14 => "π",
    42 => "a bit of a cliché",
    1729 => "only if you are a pure mathematician",
    _ => "not interesting"
};

// => interesting == "a bit of a cliché"

কন্ডিশনাল টার্নারি

টার্নারি অপারেটর দিয়ে স্টেটমেন্ট ব্লকের বদলে এক্সপ্রেশনের ভেতরেই if শর্ত ডিফাইন করা যায়। এটি ফাংশনাল প্রোগ্রামিংয়ের ধরনকে প্রতিফলিত করে এবং প্রায়ই কোডকে আরও ভাবপ্রকাশক ও কম ভুলপ্রবণ করে তুলতে পারে।

টার্নারি অপারেটর তিনটি এক্সপ্রেশন মিলিয়ে তৈরি হয়: একটি শর্ত, তারপর শর্তটি ট্রু হলে যে এক্সপ্রেশনটি মূল্যায়ন করে রিটার্ন করা হবে (অর্থাৎ if অংশ, যা ? দিয়ে শুরু হয়) এবং শর্তটি ফলস হলে যে এক্সপ্রেশনটি মূল্যায়ন করে রিটার্ন করা হবে (অর্থাৎ else অংশ, যা : দিয়ে শুরু হয়)।

int a = 3, b = 4;
int max = a > b ? a : b;
// => 4

থ্রো এক্সপ্রেশন

throw স্টেটমেন্টের একটি বিকল্প হলো throw এক্সপ্রেশন, আর এটি বিশেষভাবে টার্নারি ও অন্যান্য যৌগিক এক্সপ্রেশনের ক্ষমতা বাড়াতে পারে।

string trimmed = str == null ? throw new ArgumentException() : str.Trim();

নির্দেশনা

আপনাকে একটি আবহাওয়া স্টেশনের সঙ্গে সম্পর্কিত কিছু লিগ্যাসি কোড উন্নত করতে বলা হয়েছে।

আবহাওয়া স্টেশনটি রিডিং গ্রহণ করে এবং তাপমাত্রা ও চাপের মতো কিছু সূচক আউটপুট দেয়।

1. উপযুক্ত মেথডগুলোর সংক্ষিপ্ততা ও পাঠযোগ্যতা উন্নত করুন

এক্সপ্রেশন বডিড মেম্বার ব্যবহার করে WeatherStation ক্লাসের উপযুক্ত যেকোনো মেথড রিফ্যাক্টর করুন। এক্সপ্রেসিভনেস বাড়াতে এবং সম্ভবত এরর কমাতে যেখানে উপযুক্ত সেখানে টার্নারি অপারেশন ও সুইচ এক্সপ্রেশন ব্যবহার করুন।

নিশ্চিত করুন যে সব টেস্ট পাস করতেই থাকবে।

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

The Weather in Deather শুরু করতে প্রস্তুত?

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