Friday, 21 December 2012

VISUAL C# No.11: [Beginner] Apa itu enum, Apa itu Attributes?

Advertisement


Kemarin kita telah membahas kode dalam C# yang ber-keyword ‘class’, kemudian juga yang ber-keyword ‘delegate’ dan juga yang ber-keyword ‘interface’, sekarang pada tutorial ini kita akan membahas yang ber-keyword ‘enum’. Apa sebetulnya enum??




Enum bisa dibilang merupakan type constant yang berupa symbolic untuk mewakili sebuah nilai/value. Enum memiliki nilai sendiri yang tidak dapat diwariskan dan bukan pula berasal dari pewarisan (inherited). Biasanya anda akan menemukan ‘enum’ dan ‘Enum’ dalam pemrograman C# (huruf kecil dan huruf besar). ‘enum’(huruf kecil) merupakan C# type, sedangkan ‘Enum’ (huruf besar) merupakan BCL type (Base Class Library). Luh, apa hubungan keduanya???

‘enum’ (C# type) menurunkan Base Class Library (BCL) ‘Enum’, sehingga, anda dapat menggunakan ‘enum’ (huruf kecil) untuk mendefinisikan enum yang baru, dan anda pun dapat menggunakan ‘Enum’ (huruf besar) untuk mengimplementasikan ‘static enum method’.

Bingung ya, istilah bahasa inggrisnya tetap saya tuliskan agar tidak ternyadi ambigu bahasa.
Mari kita lihat contoh enum berikut ini, saya ambil dari csharp-station.com,



Saya yakin kode di atas ini sangat mudah sekali untuk dibaca dan dimengerti. Kita mendeklarasikan sebuah kode dengan sebuah ‘enum’ keyword dan identifier ‘Volume’, serta kita memberikan beberapa value yang di pisahkan dengan tanda koma. Inilah enum, lalu bagaimana penggunaannya? Anda dapat memperhatikan kode berikutnya.

Kita kemudian membuat sebuah contoh class yaitu EnumSwitch, dan kemudian membuat sebuah instance dari enum kita pada main method. Kita pun dapat membuat switch statement setelah membuat instance, dapat anda lihat pada kode di atas.

Apakah hanya sampai di sini? Tidak, enum memiliki ‘base type’ dan ‘member values’ yang dapat KITA MODIFIKASI. ‘Base Type’ untuk enum diantaranya adalah byte, sbyte, short, ushort, int, uint, long, and ulong. Secara default, ‘base type’ nya adalah int. Sedangkan default untuk ‘Member Values’ PERTAMA adalah nol. Kita pun dapat mengedit default value ini. Coba perhatikan kode berikut ini:

public enum Volume : byte
{
Low = 1,
Medium,
High
}

Di atas, kita mengganti ‘Base Type’ enum dari default int ke type byte. Dan kita pun juga mengubah nilai default dari ‘Member Values’ pertama menjadi 1. Dengan demikian maka nilai untuk Medium adalah 2, dan 3 untuk High.

Mari kita mempelajari enum lebih dalam lagi, , ,

Kita pun dapat juga mengkonvert antar type data dengan enum. Berikut merupakan contoh kode untuk konversi tersebut, saya ambil dari csharp-station.com, perhatikan dan cobalah untuk membaca kode ini, sangat simple sekali :)



Perhatikan bahwa kita memiliki 3 method/fungsi selain main method yaitu GetEnumFromUser, ListEnumMembersByName, and ListEnumMembersByValue.

Kita juga dapat melihat masing-masing fungsi ini memiliki peran dalam peng-konvert-an type data. Misalnya pada fungsi GetEnumFromUser:

Terlebih dahulu kita membuat sebuah console dimana user dapat memasukan input sesuai dengan pilihan pada console kita. Nah, saat user memilih, maka pilihan ini akan disubmit ke dalam console dalam bentuk type string,



Nah, karena enum Volume kita dalam bentuk int (type int) maka kita pun harus meng-konvert type string ke dalam int, anda dapat melihat kode di atas kita membuat variable volInt yang merupakan peng-konvert-an dari type string volString.

Mudah bukan??? Untuk method ListEnumMembersByName dan ListEnumMembersByValue juga sama :)

ATTRIBUTES

Untuk anda yang sering berkecipung di bidang komputer dan web pasti sudah familiar dengan Attributes. Apa sebetulnya attributes? Attributes dalam C# ini agak berbeda dengan attributes dalam web atau bahasa pemrograman lain.

Attributes adalah sebuah element dalam C# yang dapat kita gunakan untuk menambahkan informasi tambahan / declarative information pada program kita. Declaratives information ini sangat berguna pada saat proses run time program dan development program. Attributes juga digunakan untuk menambahkan metadata / assembly pada program saat proses compile.

Ada beberapa contoh attributes misalnya :
•[DllImportAttribute] yang akan membuat program kita dapat berkomunikasi dengan win32 libraries.
•[ObsoleteAttribute] yang mampu menampilkan warning saat compile-time
•Dan juga Attributes lain yang dapat digunakan dalam pembuatan windows form application.

Attributes dideklarasikan dengan ‘square brackets’ [] sebagai contoh adalah [ObsoleteAttribute].

Perlu diperhatikan pada attribute di atas, kata ‘Attribute’ ini adalah opsional, jadi dapat ditambahkan dapat tidak. Sehingga [ObsoleteAttribute] sesungguhnya sama dengan [Obsolete].

Nah, sebagai contoh, mari kita lihat kode berikut ini, saya masih mengambil dari csharp-station.com:



Pada contoh di atas, kita memiliki 3 attributes yaitu Obsolete, ObsoleteAttribute, dan Obsolete dengan ‘parameter’. Untuk attribute pertama dan kedua adalah sama, sedangkan untuk attribute yang terakhir nanti compiler akan menampilkan parameter yang tercantum dalam attribute tersebut. Hasil dari compile kode di atas adalah seperti berikut ini:

BasicAttributeDemo.cs(29,3): warning CS0612:
'BasicAttributeDemo.MyFirstdeprecatedMethod()' is obsolete
BasicAttributeDemo.cs(30,3): warning CS0612:
'BasicAttributeDemo.MySecondDeprecatedMethod()' is obsolete
BasicAttributeDemo.cs(31,3): warning CS0618:
'BasicAttributeDemo.MyThirdDeprecatedMethod()' is obsolete: 'You
shouldn't use this method anymore.'


Kita dapat lihat pada hasil compiler, parameter dari attribute ditampilkan sebagai pesan. Nah, didalam kode ada attribute lain yaitu [STAThread]. Apakah fungsi dari attribute ini? Attribute ini biasanya diletakkan sebelum static main method yang berfungsi untuk menunjukkan bahwa program harus berkomunikasi dengan ‘unmanaged COM’ code dengan menggunakan STA (Single Threading Apartment). Kita memang perlu untuk menggunakan attribute ini karena terkadang kita tidak tau kapan library dari pihak ketiga yang kita gunakan akan berkomunikasi dengan COM.

Kembali ke attribute yang ada parameternya tadi, ternyata parameter dalam attribute itu bermacam-macam, coba perhatikan contoh berikut ini:

[Obsolete("You shouldn't use this method anymore.", true)]
[DllImport("User32.dll", EntryPoint="MessageBox")]

Parameter Boolean true dalam attribute absolete akan memaksa compiler untuk menampilkan ERROR, bukan hanya WARNING, bila tanpa true maka yang tertampil hanyalah warning saja.

Sebetulnya ada dua jenis parameter dalam attributes, yaitu ‘positional parameter’ dan ‘named parameter’. Sebagai contoh pada attribute DllImport, terdapat dua parameter yaitu sebagai positional adalah “User32.dll”, dan named adalah EntryPoint=”MessageBox”.

Nah, demikian penjelasan simple mengenai attribute. Sebetulnya masih banyak lagi yang dapat kita gali dari attribute yang ada pada .NET framework, tapi sesuai dengan title, saya menyisipkan ‘[Beginner]’ jadi ya tulisan tentang attribute harus cukup sampai disini. Anda dapat membuka MSDN untuk informasi lebih lanjut tentang attribute ini.


EmoticonEmoticon