enum
1. কিভাবে হতে এসেছেন পটভূমি
আজ আমরা জাভাতে অন্য ধরনের ডেটা টাইপ অন্বেষণ করব: enum
. নামটি গণনাenum
শব্দ থেকে এসেছে । এই ডাটা টাইপ কি এবং এটা কিসের জন্য?
কখনও কখনও একজন প্রোগ্রামারকে একটি নতুন ডেটা টাইপ তৈরি করতে হয়, যার সম্ভাব্য মানগুলি একটি ছোট নির্দিষ্ট তালিকার মধ্যে সীমাবদ্ধ থাকে।
উদাহরণস্বরূপ, একটি DayOfTheWeek
প্রকার শুধুমাত্র মান নিতে পারে MONDAY
, TUESDAY
, WEDNESDAY
, ... মোট 7 টি মান আছে। অথবা একটি Month
টাইপ শুধুমাত্র মান নিতে পারে JANUARY
, FEBRUARY
, MARCH
, ... মোট 12 টি মান আছে।
অবশ্যই, আপনি পারে সংখ্যা ( int
টাইপ) ব্যবহার করেন: 1
— সোমবার, 2
— মঙ্গলবার, ইত্যাদি। কিন্তু কেউ ভুলবশত ভুল মান যেমন 8
বা 0
আপনার ভেরিয়েবলকে বরাদ্দ করতে পারে।
আপনার সহজেই এমন পরিস্থিতি হতে পারে যেখানে একজন প্রোগ্রামার মনে করেন সপ্তাহের দিনগুলি (বা বছরের মাসগুলি) শূন্য থেকে শুরু করে সংখ্যা করা হয়, যখন অন্যরা তাদের সংখ্যা এক থেকে শুরু হবে বলে আশা করে।
এই কারণেই জাভা প্রবর্তন করেছে enum
, একটি ডেটা টাইপ যা মানগুলির একটি সসীম সেট নিয়ে গঠিত ।
2. একটি প্রকার ঘোষণা করা
একটি নতুন enum
ডেটা টাইপ ঘোষণা করা এইরকম দেখাচ্ছে:
enum TypeName
{
VALUE1,
VALUE2,
VALUE3
}
কোথায় TypeName
নতুন ধরনের (শ্রেণী) নাম এবং সম্ভাব্য মানগুলি কমা দ্বারা পৃথক করা হয়েছে এবং কোঁকড়া ধনুর্বন্ধনীতে মোড়ানো হয়েছে: Value1
, Value2
, Value3
.
একটি উদাহরণ হিসাবে, আসুন আমাদের নিজস্ব তৈরি করা যাক DayOfTheWeek
enum
:
কোড | বিঃদ্রঃ |
---|---|
|
নতুন Day ধরনের সোমবার মঙ্গলবার বুধবার বৃহস্পতিবার শুক্রবার শুক্রবার শনিবার রবিবার |
এখানে আপনি কিভাবে আমাদের নতুন ধরনের একটি ভেরিয়েবলের জন্য একটি মান নির্ধারণ করবেন:
Day day = Day.MONDAY;
উদাহরণ:
কোড | বিঃদ্রঃ |
---|---|
|
পর্দার আউটপুট হবে:
|
3. একটি পদ্ধতিenum
একটি enum
প্রকারের বেশ কয়েকটি অন্তর্নির্মিত পদ্ধতি রয়েছে, যার মধ্যে দুটি খুব আকর্ষণীয়:
স্ট্যাটিক values()
পদ্ধতি টাইপের সমস্ত মানগুলির একটি অ্যারে প্রদান করে enum
:
কোড | বিঃদ্রঃ |
---|---|
|
ভেরিয়েবল টাইপের days মান ধারণকারী একটি অ্যারে সঞ্চয় করে Day (7 উপাদান) স্ক্রিনে অ্যারের বিষয়বস্তু প্রদর্শন করে:
|
পদ্ধতিটি ordinal()
ধ্রুবকের ক্রমিক সংখ্যা প্রদান করে। আপনি এটিকে enum
একটি শ্রেণির পরিবর্তে একটি মান হিসাবে কল করুন enum
:
কোড | কনসোল আউটপুট |
---|---|
|
|
4. একটি ক্লাসে রূপান্তর করা
বাস্তবে, এখানে যাদুকর কিছুই নেই। কম্পাইলার আমাদের কিছু সিনট্যাকটিক চিনি দিয়েছে। কম্পাইলের সময়, Day
enum একটি সাধারণ ক্লাসে রূপান্তরিত হয়:
কোড, সরলীকৃত সংস্করণ | বিঃদ্রঃ |
---|---|
|
Day ক্লাস স্ট্যাটিক ধ্রুবকের তালিকা enum A ভেরিয়েবলের সমস্ত মান সহ একটি অ্যারে যা একটি নির্দিষ্ট অবজেক্টের মান সংরক্ষণ করে ক্লাসটি ব্যক্তিগত, যার মানে ক্লাসের অবজেক্টগুলি শুধুমাত্র ক্লাসের ভিতরে তৈরি করা যেতে পারে । পদ্ধতি একটি বস্তুর উপর কল করা আবশ্যক . এটি বস্তুর মান প্রদান করে - ক্ষেত্র। পদ্ধতিটি ক্লাসের সমস্ত মান সহ একটি স্ট্যাটিক অ্যারে প্রদান করে Day Day Day constructor Day Day ordinal Day value Day |
যদি আমরা ক্লাস থেকে সমস্ত স্ট্যাটিক পদ্ধতি এবং ভেরিয়েবল মুছে ফেলি Day
, আমরা নিম্নলিখিতগুলি পাই:
কোড | বিঃদ্রঃ |
---|---|
|
ভেরিয়েবলটি অবজেক্ট অবজেক্টের value মান সংরক্ষণ করে শুধুমাত্র ক্লাসের ভিতরে তৈরি করা যেতে পারে , যেহেতু কনস্ট্রাক্টর হয় । পদ্ধতি বস্তুর প্রদান করে । Day Day Day private ordinal() value Day |
অন্য কথায়, এখানে ভীতিকর কিছুই ঘটছে না। কম্পাইলার Day
ক্লাস তৈরি করে, মানগুলিকে প্রতিনিধিত্ব করে এমন ধ্রুবক যোগ করে enum
, প্রয়োজনীয় পদ্ধতি যোগ করে এবং ক্লাস কনস্ট্রাক্টর তৈরি করে private
। আমরা একটু পরে কনস্ট্রাক্টর কিভাবে কাজ করে তা দেখব।
আশা করি, এটা এখন পরিষ্কার যে কেন আমরা এইভাবে একটি ভেরিয়েবলের মান নির্ধারণ করি:
Day day = Day.MONDAY;
MONDAY
ক্লাসে শুধুমাত্র একটি স্থির ক্ষেত্র (ধ্রুবক) Day
। ক্লাসের বাইরে থেকে স্ট্যাটিক পদ্ধতি এবং ক্ষেত্রগুলি অ্যাক্সেস করার সময়, আপনাকে অবশ্যই ক্ষেত্র বা পদ্ধতির নামের আগে ক্লাসের নাম নির্দেশ করতে হবে।
5. একটি আরো পদ্ধতিenum
প্রতিটি enum
ক্লাসের বেশ কিছু আকর্ষণীয় বৈশিষ্ট্য রয়েছে।
একটি স্ট্রিং থেকে এবং থেকে রূপান্তর করা হচ্ছে
একটি enum অবজেক্টকে একটি স্ট্রিং এ রূপান্তর করতে, আপনাকে এর toString()
পদ্ধতিতে কল করতে হবে।
String str = Day.MONDAY.toString();
অন্য দিকে রূপান্তর করতে (একটি স্ট্রিং থেকে একটি Day
বস্তুতে), আপনি স্ট্যাটিক valueOf()
পদ্ধতি ব্যবহার করতে পারেন:
Day day = Day.valueOf("MONDAY");
এটি অত্যন্ত সুবিধাজনক এবং অনেক ক্ষেত্রে সহায়ক হবে।
একটি সংখ্যা রূপান্তর এবং আবার ফিরে
আপনি ইতিমধ্যেই জানেন কিভাবে একটি enum
বস্তুকে একটি সংখ্যায় রূপান্তর করতে হয়: ordinal()
পদ্ধতিটি কল করুন:
int index = Day.MONDAY.ordinal();
অন্য দিকে রূপান্তর করতে (একটি সংখ্যা থেকে একটি Day
বস্তুতে), আপনার আরও স্বচ্ছ গঠন প্রয়োজন:
Day day = Day.values()[2];
উদাহরণ:
কোড | বিঃদ্রঃ |
---|---|
|
সোমবার সোমবারের সূচক পান: 0 সপ্তাহের দিন সোমবারের 2 দিন পর |
গুরুত্বপূর্ণ পয়েন্ট: যেহেতু enum
মানগুলি ধ্রুবকের একটি নির্দিষ্ট সেট, সেগুলিকে == ব্যবহার করে তুলনা করা যেতে পারে । অন্য কথায়, আপনার কাছে MONDAY
ভিন্ন ঠিকানা সহ দুটি অভিন্ন বস্তু থাকতে পারে না। প্রতিটি enum মানের শুধুমাত্র একটি একক উদাহরণ বিদ্যমান। এবং এর মানে হল যে == ব্যবহার করে enum ভেরিয়েবল তুলনা করা সবসময় কাজ করবে।
6. একটি আপনার নিজস্ব পদ্ধতি যোগ করাenum
যেহেতু একটি enum
কম্পাইলের সময় একটি সাধারণ ক্লাসে পরিণত হয়, আপনি এটিতে পদ্ধতিগুলি ঘোষণা করতে পারেন। এই পদ্ধতিগুলি কেবলমাত্র কম্পাইলার তৈরি করা ক্লাসে যোগ করা হয়। উদাহরণস্বরূপ, ধরুন আমরা Day enum
একটি অ্যারের পরিবর্তে enum মানগুলির একটি তালিকা ফেরত দিতে চাই।
তারপর আমরা নিম্নলিখিত কোড যোগ করতে পারেন:
কোড | বিঃদ্রঃ |
---|---|
|
মানের তালিকার পরে একটি সেমিকোলন প্রয়োজন। একটি ArrayList বস্তু তৈরি করুন পদ্ধতি দ্বারা প্রত্যাবর্তিত অ্যারের মান যোগ করুন values() । তালিকা ফেরত দিন। |
এখন এই পদ্ধতিটি কোডে বলা যেতে পারে:
কোড | বিঃদ্রঃ |
---|---|
|
ভেরিয়েবলটি list এর সমস্ত মানগুলির একটি তালিকা সংরক্ষণ করবে Day enum । |
GO TO FULL VERSION