Enums (Java Enums)
شمارشها (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) { ... }')}۳. استفاده در Switch
انومها رفیق صمیمی دستور switch هستند:
متد values():
این متد لیستی از تمام مقادیر موجود در انوم را برمیگرداند که برای حلقهها عالی است:
{code_block('for (Level myVar : Level.values()) {\n System.out.println(myVar);\n}')}بخش تخصصی: معماری سیستمهای شیءگرا 🏗️💎
در این بخش، به مفاهیمی میپردازیم که تفاوت بین یک برنامهنویس معمولی و یک معمار نرمافزار را رقم میزند.
۱. کد تمیز و اصل ابزارمندی (Abstraction)
در پروژههای بزرگ صنعتی، ما سعی میکنیم تا حد امکان وابستگیها (Dependencies) را کاهش دهیم. استفاده درست از Interface و Abstract Class باعث میشود کدهای ما انعطافپذیر باشند. به قولی: "برنامهنویسی برای اینترفیس، نه برای پیادهسازی".
۲. مدیریت پکیجها و جلوگیری از تداخل
پکیجبندی حرفهای فقط برای نظم نیست؛ بلکه برای کنترلِ Visibility است. با استفاده درست از سطوح دسترسی (مثل protected و default) در سطح پکیج، میتوانید از دسترسیهای غیرمجاز به متدهای داخلی کلاسها جلوگیری کنید.
۳. ترکیب به جای وراثت (Composition over Inheritance)
وراثت (Inheritance) ابزار قدرتمندی است، اما استفاده بیش از حد از آن باعث ایجاد "زنجیرههای سفتوسخت" (Tight Coupling) میشود. در بسیاری از موارد، استفاده از ترکیب (داشتنِ یک شیء داخل شیء دیگر) راهحل منعطفتری برای گسترشِ کدهای شماست.
نکته تکمیلی: متدها و فیلدها در Enum 🚀💎
در جاوا، Enum فقط یک لیست ساده نیست، بلکه یک کلاس است. شما میتوانید برای آن فیلد و سازنده تعریف کنید. مثلاً برای یک انومِ Size، میتوانید فیلدی به نام code داشته باشید که مقدار عددیِ هر سایز را نگه دارد. همچنین انومها میتوانند اینترفیسها را پیادهسازی کنند. این قابلیت باعث میشود انومها در جاوا بسیار قدرتمندتر از سایر زبانها باشند و بتوان از آنها برای پیادهسازی الگوهایی مثل Singleton استفاده کرد.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک enum به نام Status با مقادیر PENDING و DONE بسازید. در main مقدار DONE را در متغیری ذخیره و چاپ کنید.
enum Status {
PENDING,
DONE
}
public class Main {
public static void main(String[] args) {
Status s = Status.DONE;
System.out.println(s);
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.