دوره‌ها / JAVA / Enums (Java Enums)

Enums (Java Enums)

15 دقیقه Article

شمارش‌ها (Enums): مقادیر ثابت و خوانا 🔢🚦

Enum (مخفف Enumeration) یک کلاس خاص است که مجموعه‌ای از ثابت‌های تغییرناپذیر را نگه می‌داری می‌کند. زمانی از Enum استفاده می‌کنیم که مقادیر ما محدود و مشخص هستند (مثل روزهای هفته، رنگ‌های چراغ راهنما یا وضعیت‌های سفارش).

۱. تعریف Enum

{code_block('enum Level {\n LOW,\n MEDIUM,\n HIGH\n}')}

۲. دسترسی و استفاده 🔎

دسترسی به مقادیر با علامت نقطه انجام می‌شود و معمولاً در شرط‌ها یا سوئیچ‌ها استفاده می‌شوند:

{code_block('Level myVar = Level.MEDIUM;\nif (myVar == Level.MEDIUM) { ... }')}
نام‌گذاری: طبق استاندارد جاوا، مقادیر داخل Enum باید با حروف بزرگ نوشته شوند.

۳. استفاده در Switch

انوم‌ها رفیق صمیمی دستور switch هستند:

{code_block('switch(myVar) {\n case LOW: System.out.println("Low level"); break;\n case HIGH: ...\n}')}

متد values():

این متد لیستی از تمام مقادیر موجود در انوم را برمی‌گرداند که برای حلقه‌ها عالی است:

{code_block('for (Level myVar : Level.values()) {\n System.out.println(myVar);\n}')}
قدرت انوم در جاوا: برخلاف زبان‌هایی مثل C، در جاوا انوم‌ها کلاس واقعی هستند! یعنی می‌توانند فیلد، سازنده و متد هم داشته باشند.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: معماری سیستم‌های شیءگرا 🏗️💎

در این بخش، به مفاهیمی می‌پردازیم که تفاوت بین یک برنامه‌نویس معمولی و یک معمار نرم‌افزار را رقم می‌زند.

۱. کد تمیز و اصل ابزارمندی (Abstraction)

در پروژه‌های بزرگ صنعتی، ما سعی می‌کنیم تا حد امکان وابستگی‌ها (Dependencies) را کاهش دهیم. استفاده درست از Interface و Abstract Class باعث می‌شود کدهای ما انعطاف‌پذیر باشند. به قولی: "برنامه‌نویسی برای اینترفیس، نه برای پیاده‌سازی".

۲. مدیریت پکیج‌ها و جلوگیری از تداخل

پکیج‌بندی حرفه‌ای فقط برای نظم نیست؛ بلکه برای کنترلِ Visibility است. با استفاده درست از سطوح دسترسی (مثل protected و default) در سطح پکیج، می‌توانید از دسترسی‌های غیرمجاز به متدهای داخلی کلاس‌ها جلوگیری کنید.

۳. ترکیب به جای وراثت (Composition over Inheritance)

وراثت (Inheritance) ابزار قدرتمندی است، اما استفاده بیش از حد از آن باعث ایجاد "زنجیره‌های سفت‌وسخت" (Tight Coupling) می‌شود. در بسیاری از موارد، استفاده از ترکیب (داشتنِ یک شیء داخل شیء دیگر) راه‌حل منعطف‌تری برای گسترشِ کدهای شماست.

نکته پایانی: هدف از یادگیری این مفاهیمِ پیشرفته، نوشتن کدی است که نه تنها امروز کار کند، بلکه سال‌ها بعد هم به راحتی قابل تغییر و توسعه باشد.

نکته تکمیلی: متدها و فیلدها در Enum 🚀💎

در جاوا، Enum فقط یک لیست ساده نیست، بلکه یک کلاس است. شما می‌توانید برای آن فیلد و سازنده تعریف کنید. مثلاً برای یک انومِ Size، می‌توانید فیلدی به نام code داشته باشید که مقدار عددیِ هر سایز را نگه دارد. همچنین انوم‌ها می‌توانند اینترفیس‌ها را پیاده‌سازی کنند. این قابلیت باعث می‌شود انوم‌ها در جاوا بسیار قدرتمندتر از سایر زبان‌ها باشند و بتوان از آن‌ها برای پیاده‌سازی الگوهایی مثل Singleton استفاده کرد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

وضعیت سفارش Easy
سوال تمرین

یک enum به نام Status با مقادیر PENDING و DONE بسازید. در main مقدار DONE را در متغیری ذخیره و چاپ کنید.

پاسخ تمرین
JAVA
enum Status {
  PENDING,
  DONE
}
public class Main {
  public static void main(String[] args) {
    Status s = Status.DONE;
    System.out.println(s);
  }
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.