آموزش برنامه نویسی جاوا - قسمت ۴۶: بررسی دستور enum در قالب پروژه نتایج تیم های پیروزی و استقلال
چهارشنبه 2 بهمن 1392 12:14 PM
همانطور که پیش از این توضیح داده شد، متغیری از جنس boolean زمانی مورد استفاده قرار می گیرد که دو حالت بیشتر پیش روی ما وجود نداشته باشد. حال اگر ما در شرایطی قرار بگیریم که بیش از دو حالت پیش روی ما باشد مسلماً از این نوع متغیر نخواهیم توانست استفاده کنیم و از همین رو است که طراحان زبان برنامه نویسی جاوا ساختاری تحت عنوان Enumeration را در این زبان شیئ گرا گنجانده اند. معادل فارسی واژه Enumeration برابر است با "شمارش" و این در حالی است که در زبان برنامه نویسی جاوا این واژه به صورت خلاصه درآمده و به شکل enum نوشته می شود. چنانچه بخواهیم موارد استفاده enum را برشمریم به لیست بلندی از کاربردهای این دستور برخواهیم خورد که در ادامه به برخی از مثال ها اشاره خواهیم کرد.
یک چراغ راهنمایی دارای سه حالت سبز، قرمز و زرد است. روزهای هفته شنبه، یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنج شنبه و جمعه را شامل می شود. یک کشور می تواند توسعه یافته، در حال توسعه و عقب افتاده باشد! اینها مثال هایی هستند که اگر بخواهیم برنامه ای در رابطه با آنها بنویسیم ناگزیر می بایست از enum ها استفاده کنیم.
در ابتدا طبق روال گذشته یک سناریو تعریف کرده و بر اساس آن برنامه ای می نویسیم.
یک مسابقه فوتبال می تواند سه نتیجه متفاوت داشته باشد: حالت اول اینکه تیم الف برنده و تیم ب بازنده است، حالت دوم اینکه تیم ب برنده و تیم الف بازنده است، حالت سوم اینکه نتیجه مسابقه مساوی می شود (البته در برخی مواقع حالت چهارمی هم وجود دارد مبنی بر اینکه بازیکنان شروع به زد و خورد کرده و داور مسابقه را لغو می کند.)
برای شروع کار پروژه ای تحت عنوان 46th Session ایجاد کرده و کلاسی تحت عنوان FootballMatch به معنی "بازی فوتبال" در آن ایجاد می کنیم.
حال می بایست کد ما به شکل زیر باشد:
از آنجا که نیاز داریم تا این امکان را به کاربر بدهیم تا بتواند نتیجه بازی را وارد برنامه کند، به استفاده از کلاس Scanner پرداخته و کد خود را به شکل زیر تکمیل می کنیم:
همانطور که در کد فوق ملاحظه می شود، شیئی تحت عنوان keyboardInput به معنی "ورودی کیبورد" ایجاد کرده ایم(به منظور آشنایی بیشتر با کلاس Scanner به آموزش های یازدهم و دوازدهم مراجعه نمایید). اکنون به صورت زیر اقدام به ساخت enum این برنامه می کنیم:
همانطور که در کد فوق مشاهده می شود، پیش از کد مربوط به متد main اقدام به نوشتن کد مربوط به enum می کنیم به این صورت که اول کلید واژه enum را نوشته سپس نامی دلخواه برای آن در نظر می گیریم که در این مثال نام WhoWins به معنی "چه کسی برنده می شود" انتخاب شده است. سپس یک علامت { قرار داده و اقدام به نوشتن حالتهای مد نظر خود می کنیم به این صورت که آنها را با یک علامت کاما از یکدیگر جدا می سازیم و در نهایت یک علامت } قرار داده و پس از آن یک ; قرار می دهیم(لازم به ذکر است که به هر تعداد حالت که بخواهیم می توانیم برای enum خود در نظر بگیریم). در این مثال سه حالت پرسپولیس، استقلال و برابر را در نظر گرفته ایم. اکنون نیاز داریم تا از کاربر بخواهیم که نتیجه تیم پرسپولیس را وارد کند. برای این منظور کد فوق را به شکل زیر تکمیل می کنیم:
همانطور که در کد فوق مشاهده می شود با استفاده از دستور System.out.println جمله ای را به معنی "لطفاً تعداد گل های تیم پرسپولیس را وارد نمایید: " در پنجره Console نمایش خواهیم داد. سپس متغیری از جنس int تحت عنوان perspolisScore به معنی "امتیاز پرسپولیس" ایجاد کرده و مقدار آن را معادل با شیئ ساخته شده از روی کلاس Scanner به علاوه متدی برای گرفتن اعداد صحیح از کیبورد که همان nextInt است قرا می دهیم. حال به صورت زیر همین مراحل را برای تیم استقلال تکرار می کنیم:
به طور خلاصه مجدد با استفاده از دستور System.out.println عبارتی به معنی "لطفاً تعداد گل های تیم استقلال را وارد نمایید: " را روی صفحه مانیتور به نمایش درآورده سپس متغیری از جنس int تحت عنوان esteghlalScore به معنی "امتیاز استقلال" ایجاد کرده و مقدار آن را معادل با شیئ ساخته شده از روی کلاس Scanner به علاوه متدی برای گرفتن اعداد صحیح از کیبورد که همان nextInt است قرا می دهیم. اکنون برنامه را اجرا می کنیم:

همانطور که در تصویر فوق ملاحظه می شود، جمله اول به نمایش درآمده که از طریق کیبورد می توانیم عددی برای آن در نظر بگیریم و به محض وارد کردن عدد اول و فشردن دکمه Enter جمله دوم به نمایش در آمده و خواهیم توانست عددی برای آن در نظر بگیریم. به طور کلی می توان گفت که enum یک نوع Class است که تغییر شکل داده است(اگر توجه کرده باشیم، خواهیم دید که نحوه نامگذاری آن هم بی شباهت به نامگذاری کلاس ها نیست چرا که با حرف بزرگ آن را نامگذاری کرده ایم). حال به منظور مقایسه کردن نتایج هر دو تیم اقدام به استفاده از دستورات شرطی if می کنیم:
به طور کلی به منظور دسترسی به یکی از داده های enum که در این مثال WhoWins نام دارد، اول WhoWins را نوشته و پس از قرار داده یک نقطه نام یکی از داده های داخل enum را می نویسیم. به طور خلاصه به صورت زیر می توان به یکی از داده های enum دست پیدا کرد:
در اولین عبارت شرطی قید کرده ایم که اگر امتیاز پرسپولیس از استقلال بالاتر بود دستور System.out.println مقدار WhoWins.Perspolis را نمایش دهد، و اگر امتیاز استقلال از پرسپولیس بالاتر بود دستور System.out.println مقدار WhoWins.Esteghlal را نمایش دهد و در غیر اینصورت دستور System.out.println مقدار WhoWins.Equal را نمایش دهد. اکنون سه بار اقدام به اجرای برنامه می کنیم:

در اجرای اول امتیاز پرسپولیس را 4 در نظر گرفته و امتیاز استقلال را 2 که پس از فشردن دکمه Enter خواهیم دید که عبارات شرطی اقدام به نمایش گزینه ای از مقادیر enum می کنند که مرتبط با پرسپولیس است.

در اجرای دوم امتیاز پرسپولیس را 2 در نظر گرفته و امتیاز استقلال را 4 که پس از فشردن دکمه Enter خواهیم دید که عبارات شرطی اقدام به نمایش گزینه ای از مقادیر enum می کنند که مرتبط با استقلال است.

در اجرای سوم امتیاز پرسپولیس را 0 در نظر گرفته و امتیاز استقلال را 0 که پس از فشردن دکمه Enter خواهیم دید که عبارات شرطی اقدام به نمایش گزینه ای از مقادیر enum می کنند که مرتبط با برابری هر دو تیم است.
مدیر تالار های: