Enums

11 February 2016

Enum คืออะไร

Enum เป็นประเภทข้อมูลที่เป็นชุดของตัวเลขจำนวนเต็ม มันใช้กำหนดกลุ่มของค่าคงที่ที่ทำให้มีความหมายและเข้าใจได้ง่ายขึ้นในการเขียนโปรแกรม โดยค่าที่ใช้ในการประกาศ enum นั้นจะเป็น String literal ใดๆ โดยค่าเหล่านี้ถือว่าเป็นค่าคงที่ของจำนวนเต็ม รูปแบบการใช้ enum ในภาษา C# เป็นดังนี้:

enum Name{ Value1, Value2, ... };

โดยคำสั่ง enum นั้นจะใช้สำหรับการสร้าง enum และ Name เป็นชื่อของ enum ที่สร้างขึ้น และภายในวงเล็บ {} นั้นจะเป็นชุดค่าของ enum โดยมาสามารถเป็น literal ใดๆ ที่ C# อนุญาติให้ทำได้ ค่าของ enum สามารถมีได้ตั้งแต่หนึ่งหรือหลายค่า โดยแต่ละค่านั้นจะคั่นด้วยเครื่องหมาย Commas

ต่อไปมาดูตัวอย่างการสร้างและใช้งานของ enum ในภาษา C# ซึ่งเราจะเขียนโปรแกรมโดยการใช้ enum เก็บค่าคงที่วันในสัปดาห์

using System;

namespace EnumExample
{
    class Program
    {
        enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

        static void Main(string[] args)
        {
            int a = (int)Days.Sunday;
            int b = (int)Days.Monday;
            Console.WriteLine("Sunday is number #" + a);
            Console.WriteLine("Monday is number #" + b);
        }
    }
}

ในตัวอย่าง เราได้ประกาส enum ของวันขึ้นมา โดยค่าของมันจะเรียงจาก Sunday ถึง Saturday ซึ่งมันแทนได้กับค่าจำนวนเต็มที่เริ่มจาก 0 Monday นั้นมีค่าเป็น 1 Tuesday มีค่าเป็น 2 ซึ่งค่าจะเพิ่มขึ้นทีละหนึ่งไปเรื่อยๆ จนถึง Saturday ซึ่งจะมีค่าเป็น 6

int a = (int)Days.Sunday;
int b = (int)Days.Monday;

ในการเปรียบเทียบหรือกำหนดค่าในภาษา C# นั้น ประเภทของข้อมูลต้องจะต้องตรงกันเสมอ นั้นคือเราต้องทำการ casting ข้อมูลก่อนทุกครั้ง ในตัวอย่างเราได้แปลงค่าของ enum ให้เป็น Integer และข้างล่างนี้คือผลของการรันโปรแกรมนี้

Sunday is number #0
Monday is number #1

นี่เป็นผลลัพธ์ในการทำงานของโปรแกรม เราได้แสดงค่าจากตัวแปร enum ทีไ่ด้ผลลัพธ์ในรูปแบบของ Integer ซึ่งหมายความว่า เราสามารถอ้างถึงค่าของ 0 ด้วย Sunday หรือค่าของ 1 ด้วย Monday

นอกจากนี้เรายังสามารถสร้างตัวแปรประเภท Enum เพื่อที่จะนำมาเก็บข้อมูล และ casting ข้อมูลเป็นในรูปแบบของ enum ได้

using System;

namespace EnumExample
{
    class Program
    {
        enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

        static void Main(string[] args)
        {
            Days weekend = Days.Monday;

           if (weekend == Days.Sunday || weekend == (Days)6) {
                Console.WriteLine("This is week end.");
           } 
           else
           {
                Console.WriteLine("This is week day.");
           }
        }
    }
}

จากตัวอย่าง เราได้สร้างตัวแปร enum คือ weekend มาเก็บข้อมูล มันสามารถนำไปเปรียบเทียบกับข้อมูลประเภท enum ได้เลยหรือตัวเลขก็ได้

ต่อไปมาดูตัวอย่างเพิ่มเติมเกี่ยวกับการใช้งาน enum ในภาษา C# โดยเราจะเขียนโปรแกรมในการแสดงตัวเลขประเภทต่างๆ โดยการใช้ enum เป็นตัวกำหนดเงื่อนไข

using System;

class EnumExample
{

    enum Number { Positive, Negative, Odd, Even };

    static void Main(string[] args)
    {
        ShowNumber(Number.Positive, 10);
        ShowNumber(Number.Odd, 10);
        ShowNumber(Number.Negative, 5);
    }

    static void ShowNumber(Number n, int number)
    {

        if (n == Number.Positive)
        {
            Console.WriteLine("Positive number");
            int c = 1;
            for (int i = 0; i < number; i++)
            {
                Console.Write(c + ", ");
                c++;
            }
            Console.WriteLine();
        }

        if (n == Number.Negative)
        {
            Console.WriteLine("Negative number");
            int c = -1;
            for (int i = 0; i < number; i++)
            {
                Console.Write(c + ", ");
                c--;
            }  
            Console.WriteLine();
        }

        if (n == Number.Odd)
        {
            Console.WriteLine("Odd number");
            int c = 1;
            for (int i = 0; i < number; i++)
            {
                Console.Write(c + ", ");
                c += 2;
            }
            Console.WriteLine();
        }

        if (n == Number.Even)
        {
            Console.WriteLine("Even number");
            int c = 2;
            for (int i = 0; i < number; i++)
            {
                Console.Write(c + ", ");
                c += 2;
            }
            Console.WriteLine();
        }

    }

}

ในตัวอย่าง เป็นโปรแกรมในการแสดงตัวเลข 4 ประเภทคือ จำนวนเต็มบวก จำนวนเต็มลบ จำนวนคู่ และจำนวนคี่ โดยการใส่ประเภทตัวเลขและจำนวนที่ต้องการในเมธอด ShowNumber() โดยในพารามิเตอร์แรกของเมธอดนั้นเป็นประเภท enum ที่หมายถึงประเภทของตัวเลขที่คุณต้องการแสดง

ShowNumber(Number.Positive, 10);
ShowNumber(Number.Odd, 10);
ShowNumber(Number.Negative, 5);

ในการเรียกใช้งานเมธอด เราสามารถส่งค่าของ enum ได้ในทันที คุณจะเห็นได้ว่าในการใช้ enum นั้นจะทำให้โปรแกรมของเราเข้าใจได้ง่ายขึ้นในการใช้งาน enum ถูกใช้อย่างหลากหลายในการเขียนโปรแกรม แม้ประทั่งในไลบรารี่ของ .NET framework เอง

Positive number
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
Odd number
1, 3, 5, 7, 9, 11, 13, 15, 17, 19,
Negative number
-1, -2, -3, -4, -5,

นี่เป็นผลลัพธ์การทำงานของโปรแกรมในการกำหนดเงื่อนไขด้วย enum

Custom enum indexes

นอกจากนี้ ในภาษา C# ยังมีความสามารถที่จะให้เรากำหนดค่าให้กับ enum เองได้ โดยปกติค่าของ enum จะเริ่มจาก 0 และเพิ่มขึ้นทีละ 1 สำหรับสมาชิกตัวต่อไป คุณสามารถกำหนดค่าให้กับ enum เพื่อให้การเขียนโปรแกรมนั้นมีความหมายมากขึ้น มาดูตัวอย่างของ enum ที่กำหนดค่าเอง ซึ่งเป็นโปรแกรมในการควบคุมการทำงานของรถยนต์ เราใช้ enum ในการเก็บสถานะการทำงานแบบต่างๆ

using System;

namespace EnumExample
{
    class Program
    {    
        enum CarStatus {
            Poweroff = 0,
            Runing = 5,
            Stoped = 2,
            Overhead = 10,
            Runing_backward = 9
        }; 

        static void Main(string[] args)
        {
            int[] schedul = { 5, 5, 10, 2, 0 };

            for (int i = 0; i <schedul.Length; i++) {
                Console.WriteLine("Step " + (i + 1) + ": " + (CarStatus)schedul[i]);
            } 
        }
    }
}

ในตัวอย่าง เราได้ใช้ enum ในการเก็บ state ของรถยนต์ เราได้เก็บขั้นตอนการทำงานของรถยนต์ในรูปแบบ Integer ในอาเรย์ schedul และเราใช้คำสั่ง for loop ในการวนอ่านค่า และแสดงค่าของ enum ในรูปแบบของ String โดยการใช้วิธี Casting ข้อมูลไปเป็นประเภทของ enum และข้างล่างเป็นลัพธ์ของโปรแกรม

Step 1: Runing
Step 2: Runing
Step 3: Overhead
Step 4: Stoped
Step 5: Poweroff

โปรแกรมนั้นมีการทำงานทั้งหมด 5 ขั้นตอน การการกำหนดการทำงานไว้ในอาเรย์

ในบทนี้ คุณจะได้รู้จักและเรียนรู้วิธีการใช้ enum ในภาษา C# ซึ่งมันสามารถนำไปประยุกต์ใช้ได้ในหลายสถานะการณ์ และการสร้าง enum ด้วยการกำหนดค่าเอง

บทความนี้เป็นประโยชน์หรือไม่?Yes·No