Enumerasi

Enumerasi, juga dikenal sebagai enum, adalah jenis integral di mana label ditetapkan ke subset nilai. Anda dapat menggunakannya sebagai pengganti literal untuk membuat kode lebih mudah dibaca dan dipertahankan.

Sintaks

type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...

Keterangan

Enumerasi terlihat seperti gabungan yang didiskriminasi yang memiliki nilai-nilai sederhana, tetapi nilai-nilainya dapat ditentukan. Nilai biasanya bilangan bulat yang dimulai dari 0 atau 1, atau bilangan bulat yang mewakili posisi bit. Jika enumerasi dimaksudkan untuk mewakili posisi bit, Anda juga harus menggunakan atribut Flags.

Jenis enumerasi yang mendasar ditentukan dari literal yang digunakan, sehingga Anda dapat menggunakan literal dengan akhiran, seperti 1u, 2u, dan sebagainya, untuk jenis bilangan bulat (uint32) yang tidak bertanda.

Ketika Anda merujuk ke nilai bernama, Anda harus menggunakan nama jenis enumerasi itu sendiri sebagai kualifikasi, yaitu, enum-name.value1, bukan hanya value1. Perilaku ini berbeda dari gabungan yang didiskriminasi. Hal ini karena enumerasi selalu memiliki atribut RequireQualifiedAccess.

Kode berikut menunjukkan deklarasi dan penggunaan enumerasi.

// Declaration of an enumeration.
type Color =
    | Red = 0
    | Green = 1
    | Blue = 2
// Use of an enumeration.
let col1: Color = Color.Red

Anda dapat dengan mudah mengonversi enumerasi ke jenis yang mendasarinya dengan menggunakan operator yang sesuai, seperti yang ditunjukkan pada kode berikut.

// Conversion to an integral type.
let n = int col1

Jenis terbilang dapat memiliki salah satu jenis yang mendasar berikut: sbyte, byte, int16, uint16, int32, uint32, int64, uint64, dan char. Jenis enumerasi direpresentasikan dalam .NET Framework sebagai jenis yang diwarisi dari System.Enum, yang pada gilirannya diwarisi dari System.ValueType. Dengan demikian, jenis tersebut adalah jenis nilai yang terletak di tumpukan atau sebaris dalam objek isi, dan nilai apa pun dari jenis yang mendasarinya adalah nilai yang valid dari enumerasi. Hal ini penting ketika pencocokan pola pada nilai enumerasi, karena Anda harus memberikan pola yang menangkap nilai yang tidak bernama.

Fungsi enum dalam pustaka F# dapat digunakan untuk menghasilkan nilai enumerasi, bahkan nilai selain salah satu nilai bernama yang telah ditentukan sebelumnya. Ggunakan fungsi enum sebagai berikut.

let col2 = enum<Color> (3)

Fungsi default enum berfungsi dengan jenis int32. Oleh karena itu, fungsi tidak dapat digunakan dengan jenis enumerasi yang memiliki jenis mendasar lainnya. Sebagai gantinya, gunakan fungsi berikut.

type uColor =
    | Red = 0u
    | Green = 1u
    | Blue = 2u

let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

Selain itu, kasus untuk enum selalu dipancarkan sebagai public. Hal ini agar selaras dengan C# dan platform .NET lainnya.

Lihat juga