15 Mei 2009

Oh switch!

switch adalah perintah yang sangat primitif. Untuk programmer pemula pada setiap case diwajibkan menuliskan breakA demi keselamatan dan kemudahan analogi penulisan sintaks dengan deretan if-then-else.

Namun di dunia nyata, programmer yang sebenarnya akan menggunakan switch pada kemampuan aslinya. Perhatikan kode berikut, dimana break tidak digunakan:

int main(int argc, char** args){
  int a=atoi(args[1]);
  printf("%s",args[1]);
  switch(a){
   case 0:
     printf("0");
   case 1:
     printf("1");
   case 2:
     printf("2");
   default:
     printf("def");
  }
  return 0;
}


Untuk mengerti hal ini sedikit diperlukan sedikit "sejarah".
Pada pemograman assembly atau bahasa buruk lainnya(fortran, basic, c juga) ada perintah goto ke suatu label. Inilah sebenarnya yang terjadi terhadap switch dan case. switch adalah goto dan case adalah label. Oleh karena semantik switch yang mirip goto itulah maka semantik ini jarang/tidak diajarkan buat programmer pemula.

Jadi sekali switch menemukan case yang sesuai, kode-kode case dibawahnya akan dieksekusi seperti biasa. Dalam kata lain case yang cocok adalah awal eksekusi program. Karena itu diperlukan break agar setelah satu case selesai dieksekusi program langsung keluar dari switch.