C# Public Property vs Public Attribute

Well, setelah cukup lama bermain dengan C#, ada beberapa hal yang terkesan 'lucu' dalam pembelajaran. Hal tersebut adalah property vs attribute.
Dalam mendeklarasi class di C#, ada beberapa cara untuk merepresentasikan attribut, di antaranya adalah:
  • Public attribute, yaitu dengan mendeklarasi attribute dengan access modifier public, sehingga mudah dapat digunakan oleh class lain
  • Property, yaitu mendeklarasi public attribute dengan accessor get; dan/atau set;
  • Function getter setter, cara ini digunakan umum oleh java
Sekilas, public attribute dan property tidak banyak berbeda, terkecuali get/set accessor yang dapat di-inject oleh potongan syntax. Namun ternyata setelah banyak menggunakan dua hal ini, ada perbedaan yang cukup jelas, yaitu public attribute tidak akan tampil untuk data yang di-binding, baik itu WPF binding, winform binding ataupun Asp.Net binding. Karenanya, biasakan untuk menggunakan property dan bukan public attribute.

Try / Catch, The Double-edged Sword

Try/catch, untuk mayoritas programmer (terutama java) pasti tidak asing lagi dengan syntax tersebut. Syntax tersebut memiliki kemampuan yang hebat dan sangat membantu dalam melakukan pengembangan.

Namun, penggunaan try/catch yang tidak hati-hati dan sembarangan dapat membuat celah dalam sistem. Salah satu celah yang paling umum adalah tidak adanya error message (isi catch kosong). Celah tersebut membuat debugging menjadi susah karena exception tidak menghasilkan error box.

Jadi, apa saja yang harus diperhatikan dalam penggunaan try/catch? Berikut adalah beberapa hal yang sepengalaman saya harus diperhatikan:

1. Penanganan Exception dalam catch.
Object Exception memiliki property Message yang membawa pesan error yang terjadi. Salah satu penanganan exception yang paling mudah adalah menggunakan MessageBox (desktop app) atau Response.Write (asp). Penanganan lebih 'advanced' dapat berupa refresh data, kalkulasi autonomous, dan lainnya sesuai dengan tujuan.

2. Object Exception memiliki turunan
Object Exception memiliki turunan sesuai dengan error yang ada. Misalnya seperti FormatException pada .Net yang dihasilkan dari penggunaan format yang berbeda (misalnya ada karakter ketika parsing ke int, umumnya terjadi ketika parse). Ada juga NullReferenceException dimana program berusaha mendapatkan dan memproses variable yang bernilai null. Penanganan yang berbeda untuk tiap-tiap jenis Exception yang berbeda dapat membantu mempercepat development.

3. Pastikan tidak ada proses bersangkutan yang berjalan setelah ada Exception. Ingat, proses tetap berjalan setelah try/catch.
Misalkan anda memiliki int angka yang didapat dari parsing tbox1.Text. Anda men-'trap' proses parsing tersebut ke dalam try/catch. Kemudian angka tersebut akan digunakan untuk memasukkan data ke dalam database. Proses input data tersebut akan tetap berjalan walaupun ada Exception tanpa penanganan.

Proses yang salah:

int angka=0;
try{
  angka = int.Parse(tbox1.Text);
}
catch(Exception e){
  //show message here
}
//insert process, nilai angka adalah 0


Salah satu cara untuk menghindarinya:

int angka=0;
try{
  angka = int.Parse(tbox1.Text);
  //insert process
}
catch(Exception e){
  //show message here
}