C#-এর enum টাইপ নির্দিষ্ট নামযুক্ত কনস্ট্যান্টের একটি সেট প্রকাশ করে। এর মূল উদ্দেশ্য হলো সংখ্যাসূচক কনস্ট্যান্টের সাথে টাইপ-সেফ উপায়ে কাজ করার সুযোগ দেওয়া, যেখানে উপলব্ধ মানগুলো আগে থেকেই নির্ধারিত একটি সেটে সীমাবদ্ধ থাকে। একটি সাধারণ ইনাম এভাবে ডিফাইন করা যায়:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
স্পষ্টভাবে ডিফাইন করা না হলে, ইনামের সদস্যগুলো স্বয়ংক্রিয়ভাবে ক্রমবর্ধমান ইন্টিজার মান পায়, যেখানে প্রথম মানটি শূন্য। চাইলে স্পষ্টভাবেও মান অ্যাসাইন করা যায়:
enum Answer
{
Maybe = 1,
Yes = 3,
No = 5
}
এই অনুশীলনীতে আপনি লগ লাইন প্রসেস করবেন।
প্রতিটি লগ লাইন একটি স্ট্রিং, যার বিন্যাস নিচের মতো: "[<LVL>]: <MESSAGE>"।
লগ লেভেলগুলো হলো:
TRC (trace)DBG (debug)INF (info)WRN (warning)ERR (error)FTL (fatal)আপনার তিনটি কাজ আছে।
উপরের লগ লেভেলগুলোর সাথে মিলে যায় এমন ছয়টি এলিমেন্টযুক্ত একটি LogLevel এনাম ডিফাইন করুন।
TraceDebugInfoWarningErrorFatalএরপর, একটি লগ লাইনের লগ লেভেল পার্স করতে (static) LogLine.ParseLogLevel() মেথডটি ইমপ্লিমেন্ট করুন:
LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info
দুর্ভাগ্যবশত, মাঝেমধ্যে কিছু লগ লাইনে অজানা লগ লেভেল থাকে। এই লগ লাইনগুলো সুন্দরভাবে হ্যান্ডেল করতে, LogLevel এনামে একটি Unknown এলিমেন্ট যোগ করুন, যা অজানা লগ লেভেল পার্স করার সময় রিটার্ন করা উচিত:
LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown
একটি লগ লাইনে লগ লেভেল লেখা বেশ লম্বা হয়ে যায়। লগ লাইনগুলো সংরক্ষণ করতে যে ডিস্ক স্পেস লাগে তা কমাতে একটি শর্ট ফরম্যাট তৈরি করা হয়েছে: "[<ENCODED_LEVEL>]:<MESSAGE>"।
এনকোড করা লগ লেভেল হলো লগ লেভেল থেকে একটি সংখ্যায় সরল ম্যাপিং:
Unknown - 0
Trace - 1
Debug - 2
Info - 4
Warning - 5
Error - 6
Fatal - 42
সংক্ষিপ্ত লগ লাইন ফরম্যাট আউটপুট দিতে পারে এমন (static) LogLine.OutputForShortLog() মেথডটি ইমপ্লিমেন্ট করুন:
LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"
Exercism-এ সাইন আপ করুন, C# ট্র্যাকের 62টি কনসেপ্ট178টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।