C++ Enum คืออะไร?
Enumerated type (enum) คือชนิดข้อมูลที่ผู้ใช้กำหนดเอง (user-defined) ซึ่งสามารถกำหนดค่าได้เพียงค่าเดียวจากช่วงค่าที่กำหนดไว้ล่วงหน้า
Enums ใช้เมื่อต้องการให้ตัวแปรเก็บค่าได้เพียงค่าเดียวจากชุดค่าเฉพาะ เช่น ต้องการให้ตัวแปรเก็บได้แค่วันในสัปดาห์ การใช้ enumeration จะช่วยให้ชัดเจนและปลอดภัย
บทช่วยสอนนี้จะสำรวจพื้นฐาน enumerations ใน C++ วิธีประกาศ และวิธีใช้งาน พร้อมตัวอย่าง จนจบคุณจะเชี่ยวชาญการใช้ enums ใน C++
การประกาศ Enum ใน C++
ชนิดข้อมูล enumerated (enum type) ใช้สร้างชนิดข้อมูลเฉพาะที่มีช่วงค่าที่เป็นไปได้คงที่ Enumeration เป็นชนิดข้อมูลที่ผู้ใช้กำหนด
ใช้คำสั่ง enum เพื่อประกาศ enum ใน C++ รูปแบบไวยากรณ์:
enum name { firstValue, secondValue, thirdValue, fourthValue };
อธิบายองค์ประกอบ:
- enum: บอกคอมไพเลอร์ว่าจะสร้าง enumeration
- name: ชื่อที่ตั้งให้ enumeration
- firstValue, secondValue, ...: ค่าที่กำหนดให้ enumeration วางอยู่ในวงเล็บปีกกา
{}
นอกจากนี้ยังเปลี่ยนค่าเริ่มต้น (default value) ของ enum class ได้ หากต้องการให้ค่าใดมีชื่อเฉพาะ ให้กำหนดค่าเริ่มต้นใหม่:
enum name { firstValue = 0, secondValue = 1 }
ในตัวอย่าง enum มี 2 ค่า firstValue = 0, secondValue = 1
Enums มีประโยชน์เพราะช่วยกำหนดชัดเจนว่าตัวแปรสามารถเก็บค่าได้อะไรบ้าง เช่น ต้องการให้ตัวแปรเก็บได้แค่วันในสัปดาห์ การประกาศ enum จะทำให้โค้ดชัดเจนว่าตัวแปรตัวนั้นรับได้แค่วันในสัปดาห์
การประกาศ Enum (Declare an Enum)
สมมติสร้างแอปให้พนักงานขายโดนัทบันทึกรายการและคำนวณราคา ร้านขายโดนัทรสจำกัด จึงต้องการให้พนักงานบันทึกได้เฉพาะรสที่มีในสต็อก: Raspberry, Strawberry, Powdered, Chocolate, Cinnamon
กรณีนี้เหมาะกับ enum จำกัดโปรแกรมให้ประมวลผลเฉพาะรสดังกล่าว โค้ดประกาศ enum:
enum flavors { Raspberry, Strawberry, Powdered, Chocolate, Cinnamon }
โค้ดประกาศ enum ชื่อ flavors มี 5 ค่าที่เป็นไปได้ ตอนกำหนดค่าให้ตัวแปรจาก enum นี้ ตัวแปรจะรับค่าได้เฉพาะ 5 ค่านี้เท่านั้น
หากต้องการประกาศตัวแปรที่รับค่าได้เฉพาะจาก enum flavors:
enum flavors orderFlavor;
ตัวแปร orderFlavor จะเก็บค่าได้เฉพาะค่าใน enum flavors
การใช้งาน Enum (Using an Enum)
หลังประกาศ enum แล้ว สามารถนำไปใช้ในโค้ดได้ กลับไปที่ตัวอย่างร้านโดนัท: พนักงานรับออเดอร์โดนัทรส Raspberry ต้องการสร้างออเดอร์ในโปรแกรม:
#include <iostream>
using namespace std;
enum flavors { Raspberry, Strawberry, Powdered, Chocolate, Cinnamon }
int main() {
enum flavors orderFlavor;
orderFlavor = Raspberry;
cout << "Donut ordered: 1x " << orderFlavor;
}
ผลลัพธ์:
Donut ordered: 1x Raspberry
อธิบาย: ประกาศ enum flavors เก็บรสโดนัท ประกาศตัวแปร orderFlavor ติดตามรสที่สั่ง ตัวแปรกำหนดได้เฉพาะค่าใน enum flavors กำหนดค่า Raspberry ให้ orderFlavor พิมพ์ข้อความตามด้วยค่าที่เก็บในตัวแปร
การใช้ enum ทำให้โค้ดอ่านง่าย ชัดเจนว่า orderFlavor รับค่าได้แค่ใน enum flavors ในโปรแกรมซับซ้อน ประโยชน์จะชัดเจนยิ่งขึ้น
การเปลี่ยนค่าเริ่มต้นของ Enum (Changing Default Enum Values)
สามารถกำหนดค่าเริ่มต้นเฉพาะให้ enum ได้ สมมติสร้างโปรแกรมคืนราคาโดนัทแต่ละรส เนื่องจากรสจำกัด จึงใช้ enum เก็บรสและราคา:
#include <iostream>
using namespace std;
enum prices { Raspberry = 2.00, Strawberry = 2.00, Powdered = 1.75, Chocolate = 1.90, Cinnamon = 2.20 }
int main() {
enum prices orderPrice;
orderPrice = Raspberry;
cout << "Donut price: $" << orderPrice;
}
ผลลัพธ์:
Donut price: $2.00
ในตัวอย่าง กำหนดค่าเริ่มต้นให้แต่ละค่าใน enum เมื่ออ้างอิงค่าใน enum จะคืนค่าเริ่มต้นแทนชื่อค่า เช่น อ้างอิง Chocolate ได้ 1.90, Cinnamon ได้ 2.20
ใน main ประกาศตัวแปร orderPrice ใช้ enum prices จำกัดค่าที่เป็นไปได้ กำหนดค่า Raspberry ให้ orderPrice พิมพ์ข้อความราคาตามด้วยค่าที่เก็บ ลูกค้าสั่ง Raspberry ราคา $2.00 จึงได้ผลลัพธ์ดังกล่าว
สรุป
ชนิดข้อมูล enum ใช้สร้างชนิดข้อมูลที่เก็บค่าได้เฉพาะชุดค่าที่กำหนดไว้คงที่ เช่น enum เก็บฤดูกาล จะมีแค่ spring, summer, autumn, winter Enums มีประโยชน์เมื่อตัวแปรควรเก็บค่าได้เพียงค่าเดียวจากชุดค่าเฉพาะ
บทช่วยสอนนี้อธิบายการสร้าง enum ใน C++ การใช้งาน และการเปลี่ยนค่าเริ่มต้น ตอนนี้คุณพร้อมใช้ enums ใน C++ แล้ว!