Monday, February 13, 2017

এনাম (Enum)

জাভাতে এনাম (enum) একটি বিশেষ টাইপ। একটি নির্দিষ্ট সংখ্যক কনস্ট্যান্ট (Constant) তৈরি করতে এটি ব্যবহার করা হয়। যেমন, সপ্তাহের দিনের নাম (days of the week), বছরে মাসের নাম (month in the year), দিক (উত্তর, দক্ষিণ, পূর্ব, পশ্চিম) ইত্যাদি।
উদাহরণ,

public enum Day {
   SATURDAY,
   SUNDAY,
   MONDAY,
   TUESDAY,
   WEDNESDAY,
   THURSDAY,
   FRIDAY
}

উদাহরণটি Day নামে একটি এনাম তৈরি করা হয়ছে। এতে সাতটি কনস্ট্যান্ট রয়েছে। এনাম তৈরি করতে ক্লাস বা ইন্টারফেসের মতো একটি কিওয়ার্ড enum ব্যবহার করা হয়েছে।
এনাম সরাসরি ডট('.') অপারেটর ব্যবহার করে অ্যাকসেস করা যায় এবং ভ্যারিয়েবল হিসেবে ব্যবহার করা যায়। উদাহরণ,

Day day = Day.SATURDAY;

এনাম, if স্টেটমেন্টে ব্যবহার করা যায়। উদাহরণ,

 public class EnumExample {
   public void displayDay(Day day) {
      if (day == Day.SATURDAY) {
         System.out.println("Its saturday! Weekend!");
      } else if (day == Day.FRIDAY) {
         System.out.println("It's Friday!! Weekend!");
      } else {
         System.out.println("Weekday!");
      }
   }

   public static void main(String[] args) {
      EnumExample enumExample = new EnumExample();
      Day day = Day.SATURDAY;
      enumExample.displayDay(day);
   }
}

এনাম সুইচ স্টেটমেন্টে ব্যবহার করা যায়। উদাহরণ,

public void displayDay(Day day) {
   switch (day) {
      case SATURDAY:
         System.out.println("Its saturday! Weekend!");
         break;
      case FRIDAY:
         System.out.println("It's Friday!! Weekend!");
         break;
      default:
         System.out.println("Weekday!");
         break;
   }
}

জাভা প্রোগ্রামিং ভাষায় এনাম খুব শক্তিশালী একটি ফিচার। কম্পাইল টাইমে জাভা কম্পাইলার এতে বেশ কিছু স্ট্যাটিক মেথড যুক্ত করে। যেমন, values()। এটি একটি অ্যারে রিটার্ন করে যাতে সবগুলো এনামের ভ্যালুগুলো থাকে।
উদাহরণ,

Day[] values = Day.values();
for (Day day : values) {
   System.out.println(day);
}


আউটপুট,

SATURDAY
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY

এতে ফিল্ড, মেথড এবং কনস্ট্রাক্টর লেখা যায়। উদাহরণ,


public enum Level {
   HIGH(3),
   MEDIUM(2),
   LOW(1);

   private final int levelCode;

   Level(int levelCode) {
      this.levelCode = levelCode;
   }

   public int getLevelCode() {
      return this.levelCode;
   }
}


এছাড়াও এনাম সম্পর্কে বেশ কতগুলো তথ্য যা জেনে রাখা বিশেষ প্রয়োজন,
1. এনাম ডিক্লেয়ারেশন মূলত একটি ক্লাস যা কিনা java.lang.Enum ক্লাসকে এক্সটেন্ড করে। একে এক্সটেন্ড করা যায় না বা অন্য কোনো ক্লাসকে এটি এক্সটেন্ড করতে পারে না। তবে এনাম ইন্টারফেস ইমপ্লিমেন্ট করতে পারে।
2. এনাম টাইপ সেইফ। অর্থাৎ কোন এনাম ভ্যারিয়েবলে অন্য কোনো ভ্যালু অ্যাসাইন করা সম্ভবন না। উদাহরণ,

Day day = Day.MONDAY;
day = 4;

এখানে দ্বিতীয় লাইনটি বৈধ নয়।
3. এনামকে == অপারেটর ব্যবহার করে এবং equals() মেথড ব্যবহার করে দুই ভাবেই তুলনা করা যায়।
4. এনামকে নিউ (new) অপারেটর ব্যবহার করে এর ইনস্ট্যান্স তৈরি করা যাবে না।