Bagikan melalui


Enumerasi

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

Sintaksis

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

Komentar

Enumerasi mirip dengan union berpembedaan yang memiliki nilai sederhana, tetapi nilai tersebut dapat ditentukan. Nilai biasanya adalah bilangan bulat yang dimulai pada 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, misalnya, Anda dapat menggunakan literal dengan akhiran, seperti , , 1udan sebagainya2u, untuk jenis bilangan bulat (uint32) yang tidak ditandatangani.

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 serikat pekerja yang didiskriminasi. 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 mendasar dengan menggunakan operator yang sesuai, seperti yang ditunjukkan dalam kode berikut.

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

Jenis enumerasi dapat memiliki salah satu jenis yang mendasar berikut: sbyte, byte, int16, uint16, int32, uint32, int64, uint64, dan char. Jenis enumerasi diwakili dalam .NET Framework sebagai jenis yang diwarisi dari System.Enum, yang pada gilirannya diwarisi dari System.ValueType. Dengan demikian, tipe nilai ini terletak di tumpukan atau dalam garis objek yang memuatnya, dan nilai apa pun dari jenis dasarnya adalah nilai yang valid dari enumerasi. Ini signifikan ketika mencocokkan pola pada nilai enumerasi, karena Anda harus memberikan pola yang menangkap nilai yang tidak terdefinisi.

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

let col2 = enum<Color> (3)

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

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

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

Selain itu, kasus untuk enum selalu dihasilkan sebagai public. Ini agar selaras dengan C# dan platform .NET lainnya.

Untuk mengaktifkan pencocokan lengkap hanya untuk kasus enum yang ditentukan, Anda dapat menekan peringatan FS0104 menggunakan direktif #nowarn "104". Ini memungkinkan pengkompilasi untuk memperlakukan hanya nilai enum yang dinyatakan sebagai valid selama pencocokan pola, menghindari kebutuhan akan kasus catch-all - berguna ketika Anda yakin semua nilai tercakup.

Peringatan FS0104 (Enums may take values outside known cases.) ada karena enum dapat diberi nilai dasar semena-mena, misalnya, secara langsung atau sebagai akibat dari operasi bitwise.

Lihat juga