همانطور که در آموزش آشنایی با روشهای نامگذاری متغیرها در زبان برنامهنویسی جاوا توضیح دادیم، دیتا تایپ boolean
به منظور تعریف شرایطی مورد استفاده قرار میگیرد که در آن بیش از دو حالت نداشته باشیم و مسلماً اگر در شرایطی قرار بگیریم که بیش از دو حالت پیش روی ما باشد، به طور قطع از این دیتا تایپ نخواهیم توانست استفاده کنیم که طراحان زبان برنامهنویسی جاوا برای چنین شرایطی enum
را در این زبان شیئگرا گنجاندهاند.
در واقع، کیورد enum
از واژۀ Enumeration به معنای «شمارش» گرفته شده است که در زبان برنامهنویسی جاوا به منظور تعریف شرایطی با بیش از دو حالت مورد استفاده قرار میگیرد که به عنوان چند مثال از دنیای واقعی میتوان چراغهای راهنمایی را نام برد که دارای سه حالت سبز، قرمز و زرد هستند یا روزهای هفته که شنبه، یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنج شنبه و جمعه را شامل میشوند. به علاوه، یک کشور میتواند توسعه یافته، در حال توسعه و یا عقب افتاده باشد!
به طور کلی، میتوان گفت که ساختار enum
یک نوع کلاس در زبان جاوا میباشد که از چند مقدار کانستنت تشکیل شده است و مثالهای فوقالذکر مواردی از دنیای واقعی هستند که اگر بخواهیم برنامهای در رابطه با آنها بنویسیم، ناگزیر میباید از ساختار enum
استفاده کنیم.
در همین راستا، به منظور درک بهتر ساختار enum
ابتدا یک سناریو تعریف کرده و آن را پیادهسازی مینماییم. برای مثال، یک مسابقۀ فوتبال را مد نظر قرار میدهیم که سه نتیجۀ متفاوت میتواند داشته باشد که عبارتند از تیم «الف» برنده بوده و تیم «ب» بازنده است، در حالت دوم تیم «ب» برنده و تیم «الف» بازنده است و در حالت سوم نیز نتیجۀ مسابقه مساوی میباشد. بنابراین برای شروع کار پروژهای تحت عنوان Enum ایجاد کرده و کلاسی تحت عنوان FootballMatch
در آن میسازیم و در ابتدای کار کد مربوط به این کلاس به صورت زیر خواهد بود:
public class FootballMatch {
public static void main(String[] args) {
}
}
در این مرحله نیاز داریم تا امکانی را برای کاربر فراهم کنیم تا بتواند نتیجۀ بازی را وارد برنامه کند و برای این منظور نیز از کلاس Scanner
استفاده کرده و کد فوق را به صورت زیر تکمیل میکنیم:
import java.util.Scanner;
public class FootballMatch {
public static void main(String[] args) {
Scanner keyboardInput = new Scanner(System.in);
}
}
همانطور که در کد فوق ملاحظه میکنیم، آبجکتی تحت عنوان keyboardInput
از روی کلاس Scanner
ایجاد کردهایم و با استفاده از دستور System.in
امکان دسترسی سیستم به ورودی آیدیای را فراهم نمودهایم سپس به صورت زیر اقدام به تعریف ساختار enum
در برنامه میکنیم:
import java.util.Scanner;
public class FootballMatch {
enum WhoWins {
Perspolis, Esteghlal, Equal
};
public static void main(String[] args) {
Scanner keyboardInput = new Scanner(System.in);
}
}
همانطور که در کد فوق مشاهده میکنیم، پیش از کد مربوط به متد ()main
اقدام به نوشتن کد مربوط به enum
میکنیم بدین صورت که کلیدواژۀ enum
را نوشته سپس نامی دلخواه همچون WhoWins
برای آن در نظر میگیریم. در ادامه، داخل بلوک مربوط به enum
یا به عبارتی داخل علائم { }
حالتهای مد نظر خود را نوشته و آنها را با علامت ,
از هم جدا میکنیم (توجه داشته باشیم که با مد نظر قرار دادن نیاز مسئله میتوانیم به تعداد دلخواه حالات مختلف تعریف نماییم.)
در سناریوی مطرحشده در این آموزش، سه حالت تیم برندۀ پرسپولیس، تیم برندۀ استقلال و حالت مساوی را در نظر میگیریم. در همین راستا، در ادامه نیاز داریم تا از کاربر بخواهیم که امتیاز هر یک از تیمها را وارد برنامه کند تا بتوانیم با مقایسۀ امتیازهای آنها تیم برنده را مشخص نماییم که برای این منظور کد فوق را به شکل زیر تکمیل میکنیم:
import java.util.Scanner;
public class FootballMatch {
enum WhoWins {
Perspolis, Esteghlal, Equal
};
public static void main(String[] args) {
Scanner keyboardInput = new Scanner(System.in);
System.out.print("Please enter the score of Perspolis: ");
int perspolisScore = keyboardInput.nextInt();
keyboardInput.close();
}
}
در کد فوق، ابتدا استرینگ «:Please enter the score of Perspolis» را در پنجرۀ کنسول نمایش میدهیم تا به کاربر اطلاع دهیم که امتیاز تیم پرسپولیس را وارد برنامه کند سپس با استفاده از دیتا تایپ int
متغیری تحت عنوان perspolisScore
ایجاد کرده و مقدار حاصل از فراخوانی متد ()nextInt
روی آبجکت ساختهشده از روی کلاس Scanner
را بدان منتسب میکنیم. بنابراین دیتای مربوط به امتیاز تیم پرسپولیس توسط متد ()nextInt
خوانده شده و در متغیر perspolisScore
نگهداری میشود. حال به صورت زیر همین مراحل را برای دریافت امتیاز تیم استقلال تکرار میکنیم:
import java.util.Scanner;
public class FootballMatch {
enum WhoWins {
Perspolis, Esteghlal, Equal
};
public static void main(String[] args) {
Scanner keyboardInput = new Scanner(System.in);
System.out.print("Please enter the score of Perspolis: ");
int perspolisScore = keyboardInput.nextInt();
System.out.print("Please enter the score of Estghlal: ");
int esteghlalScore = keyboardInput.nextInt();
keyboardInput.close();
}
}
در کد فوق، ابتدا استرینگی در کنسول نمایش میدهیم تا کاربر امتیاز تیم استقلال را وارد برنامه کند سپس مشابه آنچه که در بالا توضح دادیم، مقدار ورودی را خوانده و آن را به متغیر esteghlalScore
منتسب میکنیم. اکنون برنامه را اجرا میکنیم و در خروجی خواهیم داشت:
Please enter the score of Perspolis: 2
Please enter the score of Estghlal: 2
همانطور که ملاحظه میکنیم، استرینگ اول چاپ شده و در ادامه از طریق کیبورد میتوانیم عدد مربوط به امتیاز تیم پرسپولیس را وارد کنیم که به محض وارد کردن عدد اول و فشردن دکمۀ اینتر، استرینگ دوم به نمایش درآمده و میتوانیم عدد مربوط به امتیاز تیم استقلال را وارد کنیم. حال جهت مقایسۀ نتایج هر دو تیم، اقدام به استفاده از دستوراتی شرطی از جنس if
میکنیم (جهت کسب اطلاعات بیشتر در این مورد، به آموزش آشنایی با دستور شرطی if در زبان برنامهنویسی جاوا مراجعه نمایید.) حال برای تعریف دستورات شرطی مورد نظر، کد فوق را به صورت زیر تکمیل مینماییم:
import java.util.Scanner;
public class FootballMatch {
enum WhoWins {
Perspolis, Esteghlal, Equal
};
public static void main(String[] args) {
Scanner keyboardInput = new Scanner(System.in);
System.out.print("Please enter the score of Perspolis: ");
int perspolisScore = keyboardInput.nextInt();
System.out.print("Please enter the score of Estghlal: ");
int esteghlalScore = keyboardInput.nextInt();
if (perspolisScore > esteghlalScore) {
System.out.print(WhoWins.Perspolis + " is the Winner.");
} else if (esteghlalScore > perspolisScore) {
System.out.print(WhoWins.Esteghlal + " is the Winner.");
} else {
System.out.print(WhoWins.Equal);
}
keyboardInput.close();
}
}
در کد فوق، از دستورات شرطی تودرتو استفاده کردهایم بدین صورت که چنانچه مقدار منتسب به متغیر perspolisScore
بزرگتر از esteghlalScore
باشد، دستور شرطی برقرار بوده و دستورات مرتبط با آن مبنی بر چاپ مقدار Perspolis
از ساختار enum
تحت عنوان WhoWins
به همراه استرینگ «.is the Winner» اجرا میشوند و در غیر این صورت مجدداً در دستور else if
بررسی میکنیم که چنانچه مقدار اختصاصیافته به متغیر esteghlalScore
بزرگتر از مقدار متغیر perspolisScore
باشد، مقدار Esteghlal
به همراه استرینگ مربوطه در کنسول چاپ گردد و در صورت برقرار نبودن هیچ یک از این شروط نیز دستورات مرتبط با else
اجرا شده و دیتای Equal
در کنسول چاپ میشود (توجه داشته باشیم که برای دسترسی به هر یک از مقادیر ساختار enum
ابتدا نام آن را نوشته سپس یک علامت .
قرار داده و در ادامه نام دیتای مورد نظر جهت دستیابی به آن را درج میکنیم.) اکنون برنامه را اجرا کرده به طوری که در خروجی خواهیم داشت:
Please enter the score of Perspolis: 4
Please enter the score of Estghlal: 2
Perspolis is the Winner.
در اجرای اول، امتیاز تیم پرسپولیس را 4 در نظر گرفته و امتیاز استقلال را 2 وارد کردهایم که پس از فشردن دکمۀ اینتر میبینیم که شرط اول برقرار بوده و مقدار Perspolis
در کنسول چاپ میشود. در ادامه مجدداً برنامه را اجرا کرده و این بار امتیاز تیم استقلال را عددی بالاتر وارد میکنیم به طوری که داریم:
Please enter the score of Perspolis: 2
Please enter the score of Estghlal: 4
Esteghlal is the Winner.
در اجرای دوم، امتیاز تیم پرسپولیس را 2 در نظر گرفته و امتیاز استقلال را 4 وارد کردهایم که در این صورت دستور else if
برقرار بوده و از همین روی مقدار Esteghlal
در کنسول چاپ میگردد. در این مرحله، برنامه را یک بار دیگر اجرا کرده و امتیازی برابر برای هر دو تیم وارد میکنیم به طوری که در خروجی خواهیم داشت:
Please enter the score of Perspolis: 0
Please enter the score of Estghlal: 0
Equal
همانطور که میبینیم، در اجرای سوم امتیاز تیم پرسپولیس را 0 در نظر گرفته و امتیاز استقلال را هم معادل عدد 0 وارد کردهایم که هیچ یک از شرایط برنامه برقرار نبوده و دستورات مرتبط با else
اجرا میشوند و از همین روی دیتای Equal
از ساختار WhoWins
در کنسول نمایش داده شده است.