এনুমেরেশন বা এনাম কি?
এনুমেরেশন বা সংক্ষেপে এনাম হচ্ছে ইউজার ডিফাইন্ড ফিক্সড সেট ডেটা টাইপ। এনাম তৈরির সময় এর ভ্যালু গুলো বলে দিতে হয়। এই স্পেশাল টাইপ ভ্যারিয়েবল গুলো সাধারণত সুইচ এবং কনডিশনালের সাথে ব্যবহৃত হয়। এনাম ডেটা টাইপ তৈরির সময় enum কিওয়ার্ড ব্যবহার করতে হয়। যেমনঃ
enum EnumerationNmae { // enum values }
যেমন আমরা সপ্তাহের দিন গুলোর একটা ফিক্সড সেট ভ্যারিয়েবল তৈরি করবঃ
enum Weekday { case Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday }
যেখানে case দিয়ে এনাম ভ্যালু গুলো লিখতে হয়। উপরে আমরা এক লাইনে সব গুলো ভ্যালু লিখেছি। চাইলে এভাবেও লিখতে পারিঃ
enum Weekday { case Saturday case Sunday case Monday case Tuesday case Wednesday case Thursday case Friday }
এনাম ভ্যারিয়েবল তৈরি
এই Weekdayএনাম হচ্ছে Int, String এর মতই আরেকটা ডেটা টাইপ। এর ইউজার ডিফাইন্ড ডেটা টাইপ থেকে আমরা চাইলে ভ্যারিয়েবল তৈরি করতে পারি। যেমন
var thisDay: Weekday
এনাম ভ্যারিয়েবলে ডেটা এসাইন করা
কোন এনাম ভ্যারিয়েবলে ডেটা এসাইন করার জন্য এনামের নামের পর ডট নোটেশন ব্যবহার করে ভ্যালু এসাইন করা হয়। যেমনঃ
thisDay = Weekday.Tuesday
আমরা চাইলে এক লাইনেই ভ্যারিয়েবল তৈরি এবং ডেটা এসাইন করতে পারি:
var thisDay = Weekday.Tuesday print(thisDay)
আউটপুট পাবোঃ Tuesday
যেহেতু এনাম হচ্ছে ফিক্সড সেট ডেটা টাইপ, আমরা এনামে থাকা ভ্যালু গুলো ছাড়া অন্য কোন ভ্যালু ব্যবহার করতে পারব না।
var thisDay = Weekday.Holiday
যদি উপরের কোড লিখি, তাহলে Type ‘Weekday’ has no member ‘Holiday’ এরর দেখাবে।
এনামে CaseIterable প্রটোকলঃ
এনামের মেম্বার আইটেম গুলোর মধ্যে যদি ইটারেশনের সুবিধা রাখতে চাই, তাহলে আমাদের CaseIterable প্রটোকল ব্যবহার করতে হবে। এরপর এর সব গুলো মেম্বারের মধ্যে ইটারেশনের জন্য allCases ব্যবহার করতে পারি। যেমনঃ
enum Weekday: CaseIterable { case Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday } for thisDay in Weekday.allCases{ print(thisDay) }
যা আমাদের Weekday এনামের মেম্বার গুলো প্রিন্ট করে দিবে।
এনামে সুইস স্টেটমেন্ট
এনাম সুইস স্টেটমেন্টের সাথে খুব সুন্দর ভাবে কাজ করে। যেমনঃ
enum Weekday{ case Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday } var thisDay = Weekday.Tuesday switch(thisDay){ case .Friday, .Saturday: print("Today is holiday.") default: print("Today is working day.") }
সুইচ কেসের মধ্যে যখন Friday অথবা Saturday হবে thisDay ভ্যারিয়েবলের ভ্যালু, তখন প্রিন্ট করবে Today is holiday.। বাকি সব ক্ষেত্রে প্রিন্ট করবে Today is working day.। এখানে আমরা thisDay এর ভ্যালু Tuesday সেট করেছি। আর তাই আউটপুড় পাবো Today is working day.।
এনামে raw ভ্যালু সেট করা
এনাম তৈরির সময় আমরা এর মেম্বার গুলোর ভ্যালু সেট করে দিতে পারি।
enum Weekday: String { case Saturday = "Holiday" case Monday = "Working Day" }
এনামে raw ভ্যালু হিসেবে কি ধরণের ডেটা এসাইন করব, তা বলে দিতে হয়। আমাদের ক্ষেত্রে String টাইপ ডেটা এসাইন করেছি। এখানে অন্য যে কোন টাইপ হতে পারে। এই raw ভ্যালু গুলো এক্সেস করার জন্য rawValue প্রোপার্টি ব্যবহার করতে হয়। যেমনঃ
print(Weekday.Monday.rawValue)
যা প্রিন্ট করবে Working Day
এনাম এসোসিয়েট ভ্যালু
এনামের কোন মেম্বারে কোন ধরণের ডেটা ব্যবহার করতে পারবে, তা বলে দিতে পারি এসোসিয়েট ভ্যালু এর মাধ্যমে।
enum Location{ case name(String) case distance(Double) }
এখানে Location এনামের দুইটা মেম্বার রয়েছে। একটা হচ্ছে name, যার এসোসিয়েটেড ভ্যালু টাইপ হচ্ছে স্ট্রিং। আরেকটা হচ্ছে distance, যার এসোসিয়েটেড ভ্যালু টাইপ হচ্ছে ডাবল।
এখন এই এনাম থেকে নতুন ভ্যারিয়েবল তৈরির সময় আমরা name এর ক্ষেত্রে শুধুমাত্র স্ট্রিং ভ্যালু ব্যবহার করতে পারব। distance এর ক্ষেত্রে ডাবল ভ্যালু। আর আমরা যেভাবে কোন ভ্যারিয়েবলের এসোসিয়েট ভ্যালু সেট করতে পারিঃ
var office = Location.name(“Dhaka")
আমরা চাইলে একটা মেম্বারে একের অধিক এসোসিয়েট ভ্যালু সেট করতে পারি। যেমনঃ
enum MapLocation{ case point(Double, Double) } var office = MapLocation.point(23.830448, 90.436814)
সুইফট নিয়ে অন্যান্য লেখা গুলো পাওয়া যাবে বাংলায় সুইফট প্রোগ্রামিং পেইজে।
খুব সুন্দর ও দরকারি পোষ্ট শেয়ার করার জন্য অনেক ধন্যবাদ ভাই।
এরকম পোষ্ট আরো চাই।