Enums

Enum (อีนัม) เป็นประเภทข้อมูลที่ให้คุณสามารถกำหนดชื่อให้กับค่าคงที่ได้ โดยค่าของ Enum นั้นจะใช้กับชุดของข้อมูลแบบจำนวนเต็ม แต่เราสามารถอ้างถึงค่าคงที่นั้นได้ผ่านตัวอักษร

ในการใช้ Enum จะทำให้เราสามารถทำงานกับค่าคงที่เหล่านั้นได้สะดวกขึ้น เช่น การใช้ชื่อแทนการใช้ค่าคงที่โดยตรง ซึ่งจะช่วยให้ลดความผิดพลาดได้ในการเขียนโปรแกรมได้ นี่เป็นรูปแบบของการประกาศ Enum ใน ภาษา Visual Basic

Enum Name
    [Members]
End Enum

Enum นั้นสามารถประกาศได้ในคลาสหรือโมดูลเท่านั้น และ Enum ไม่สามารถประกาศในฟังก์ชันหรือเมธอดได้ ในการประกาศจะใช้คำสั่ง Enum และสิ้นสุดด้วยคำสั่ง End Enum และมันสามารถกำหนดระดับการเข้าถึงแบบ Public Protected Friends หรือ Private

การใช้งาน Enum

หลังจากที่ Enum ได้ถูกประกาศแล้ว เราสามารถถึงค่าของ Enum โดยชื่อของมันและตามด้วยสมาชิกในรูปแบบ EnumName.Member ต่อไปมาดูตัวอย่างการใช้ Enum ในภาษา Visual Basic

Module EnumExample

    Public Enum Days
        Sunday
        Monday
        Tueday
        Wednesday
        Thursday
        Friday
        Saturday
    End Enum

    Sub Main()

        Dim d As Integer = Days.Tueday

        Console.WriteLine(d)
        Console.WriteLine(Days.Tueday)
        Console.WriteLine(5 = Days.Friday)

    End Sub

End Module

ในตัวอย่างเราได้สร้าง Enum ที่ชื่อว่า Days และกำหนดสมาชิกให้กับ Enum เป็น literal ของวันในสัปดาห์ ในการกำหนดสมาชิกให้กับ Enum ภาษา Visual Basic จะกำหนดค่าคงที่ให้กับสมาชิกเริ่มจาก 0 1 2 3 ... ไปจนถึงสมาชิกตัวสุดท้ายของ Enum

นั้นหมายความว่าค่าคงที่ 0 นั้นมีค่าเท่ากับ Sunday ค่าคงที่ 1 มีค่าเท่ากับ Monday ไปตามลำดับจนถึงสมาชิกตัวสุดท้าย นั่นหมายความว่าเราสามารถใช้ค่าของ Enum แทนที่ค่าคงที่เหล่านี้หรือใช้ทดแทนกันได้

Dim d As Integer = Days.Tueday

ในโมดูลหลักเป็นการใช้งาน Enum เราได้กำหนดค่าของ Enum ให้กับตัวแปร d เพราะว่าค่าของ Enum นั้นเป็นค่าของ Integer อยู่แล้ว

Console.WriteLine(d)
Console.WriteLine(Days.Tueday)
Console.WriteLine(5 = Days.Friday)

เราได้ทำการแสดงผลค่าของตัวแปร d และค่าคงที่ Days.Tueday ซึ่งจะได้ผลลัพธ์เป็น 2 และทำการเปรียบเทียบค่าของ Enum กับ 5 จะได้ผลลัพธ์เป็น True เพราะว่า Enum สามารถแสดงได้ในรูปของเลขจำนวนเต็มและตัวอักษรมันจึงมีค่าเท่ากัน

2
2
True

นี่เป็นผลลัพธ์ของโปรแกรมของตัวอย่างการใช้ Enum

การใช้ Enum กับค่าที่กำหนดเอง

โดยปกติแล้ว Enum จะกำหนดค่าคงที่ให้กับสมาชิกเริ่มจาก 0 และเพิ่มที่ละ 1 สำหรับตัวแปรถัดไป ในภาษา Visual Basic เราสามารถกำหนดค่าแบบกำหนดเองให้กับ Enum โดยที่ไม่ต้องเรียงลำดับได้ โดยค่านั้นสามารถเป็นค่าบวกหรือลบได้ และสำหรับจำนวนเต็มใดๆ ในประเภทของ Byte Short Integer หรือ Long

Module HttpRequestExample

    Public Enum NetworkState
        SUCCESS = 200
        TEMPORARY_REDIRECT = 301
        NOT_FOUND = 404
        SERVER_ERROR = 500
        UNKNOWN
    End Enum

    Public Sub ResponseState(ByVal state As Integer)
        If state = NetworkState.SUCCESS Then
            Console.WriteLine("Connect to server success")
        ElseIf state = NetworkState.NOT_FOUND Then
            Console.WriteLine("Page request not found")
        ElseIf state = NetworkState.TEMPORARY_REDIRECT Then
            Console.WriteLine("Page is redireced to another URL")
        ElseIf state = NetworkState.SERVER_ERROR Then
            Console.WriteLine("Server encountered error")
        ElseIf state = NetworkState.UNKNOWN Then
            Console.WriteLine("Response code is unknown")
        End If
    End Sub

    Sub Main()

        ResponseState(200)
        ResponseState(500)
        ResponseState(501)

    End Sub

End Module

ในตัวอย่างเป็นการใช้ Enum ในการกำหนดค่าสถานะของการตอบสนองการร้องขอของหน้าเว็บเพจที่อยู่ในเลขจำนวนเต็ม 3 หลัก โดยเราได้สร้าง Enum NetworkState ขึ้นมาและกำหนดค่าแบบกำหนดเองให้กับสมาชิกใน Enum และสำหรับ UNKNOWN เราไม่ได้กำหนดค่าตัวเลขให้ ซึ่งในภาษา Visual Basic จะใช้ค่าที่เพิ่มจากก่อนหน้าไป 1 คือ 501

ข้อควรระวังถ้าคุณได้กำหนดค่าของ SUCCESS เป็น 501 คอมไพเลอร์พยายามจะเพิ่มค่าของ UNKNOWN ไป 1 ทำให้ซ้ำกับค่าที่มีอยู่ก่อนแล้ว จะทำให้มันถูกเพิกเฉยจากการเป็นสมาชิกของ Enum ในการกำหนดค่าแบบกำหนดเองคุณต้องตรวจสอบให้แน่ใจว่ามันจะไม่ซ้ำกัน

Connect to server success
Server encountered error
Response code is unknown

และนี่เป็นผลลัพธ์ของโปรแกรมของเรา

ในบทนี้เราได้พูดถึงเกี่ยวกับ Enum และคุณได้เรียนรู้ถึงวิธีการประกาศและใช้งานกับค่าคงที่ ซึ่งมันมีประโยชน์ในการทำให้ค่าคงที่ของเรามีความหมายโดยการกำหนดชื่อให้กับมัน