بررسی نوع داده‌ی enum و کاربرد آن در توسعه‌ی بازی

زمان تقریبی موردنیاز برای مطالعه: ۶ دقیقهنوع داده‌ی enum (که کوتاه‌شده‌ی عبارت Enumeration Type است و اینام خوانده می‌شود) در ساده‌ترین تعریف خود پرسشی است که پاسخ آن تنها می‌تواند یکی از گزینه‌هایی باشد که از قبل برای آن پرسش تعریف شده است. پس از تعریف یک enum، می‌توان از روی آن متغیرهایی تعریف کرد که می‌توانند یکی از گزینه‌های پاسخ را به عنوان مقدار در خود ذخیره کنند.

به عنوان مثال یک enum به نام Today را در نظر بگیرید که قصد داریم شماره‌ی روز امروز را در آن قرار دهیم. متغیر این enum که وظیفه‌ی ذخیره‌ی یک روز از هفته را بر عهده دارد تنها می‌تواند یکی از مقادیر شنبه، یک‌شنبه، دوشنبه، سه‌شنبه، چهارشنبه، پنج‌شنبه یا جمعه را در خود ذخیره کند. بدیهی است که روز هفته تنها یکی از گزینه‌های محدود ذکر شده است و حالت دیگری وجود ندارد. در چنین مواردی از نوع داده‌ی enum استفاده می‌کنیم.

 

(نمایشی بصری از مفهوم enum؛ این نوع داده بسیار پراستفاده و کاربردی است و به احتمال زیاد تا قبل از آشنایی با enum سروکار زیادی با این نوع داده در برنامه‌های مختلف داشته‌ایم. تصویر فوق یک متغیر enum است که در Inspector یونیتی سریالایز شده است.)

نکته نوع داده‌ی enum از نوع value type است.

 

تعریف یک enum جدید

برای تعریف یک enum جدید پس از نوشتن کلمه‌ی کلیدی enum و انتخاب یک نام برای آن، تمام گزینه‌های ممکن برای پاسخ را بین آکلاد نوشته و آن‌ها را با ویرگول از هم جدا می‌کنیم. به عنوان مثال برای تعریف enum روزهای هفته چنین می‌کنیم:

نکته در تعریف گزینه‌های یک enum از دابل کوتیشن ” در دو طرف آن استفاده نمی‌کنیم (همانند کاری که هنگام نوشتن یک string در کد انجام می‌دادیم). همچنین در هنگام تعریف enum از عملگر تخصیص (=) استفاده نمی‌شود و گذاشتن سمی کالن در آخر تعریف نیز اختیاری است.

طبق قراردادهای نامگذاری، نامگذاری enum باید به صورت PascalCase و به صورت مفرد باشد (مگر در enum های بیتی که از اسم جمع استفاده می شود).

بهتر است در صورتی که گزینه ها اولویت خاصی نسبت به یکدیگر ندارند به ترتیب حروف الفبا نوشته شوند. چرا که در هر صورت اعضای enum در IntelliSense به ترتیب حروف الفبا نمایش داده می شوند که ممکن است گاهی گیج کننده شود.

 

ایجاد متغیر از روی enum از قبل ساخته شده

در نهایت برای ایجاد متغیر از روی enum ساخته شده و مقداردهی آن از بین گزینه‌های پاسخ (مثلاً گزینه‌ی Sunday در این مثال) از چنین کدی استفاده می‌کنیم:

همانطور که مشاهده می‌کنید دسترسی به یک گزینه از بین گزینه‌های ممکن برای پاسخ یک enum با نوشتن نام enum و عملگر نقطه (dot operator) و سپس نوشتن نام گزینه امکان‌پذیر است.

 

کاربرد enum در یونیتی

این نوع داده در توسعه‌ی بازی کاربردهای فراوانی دارد؛ از جمله استفاده از switch caseها و مواردی که هوش مصنوعی بازی باید از بین چندین الگوریتم یکی را انتخاب کند (مثل یک دشمن NPC که چندین روش حمله به بازیکن برای آن نوشته شده و بسته به شرایط موجود باید یکی از آن‌ها را انتخاب کند).

همچنین فریمورک یونیتی نیز به کرات از این نوع داده استفاده کرده است. برای مثال اینام KeyCode که اختصاصی یونیتی بوده و در آن تمام دکمه‌های صفحه‌کلید و کنترلر کنسول‌ها لیست شده است و در هنگام کدنویسی برای صحبت از یک دکمه‌ی خاص باید از این enum استفاده کرد:

برگه‌ها : 1 2