16.12.10

"Clean" Programming Check-List

Alhamdulillah, masih bisa mempertahankan (at least) one post per month...

Kali ini, seperti yang tertulis di judul, saya akan sedikit membahas mengenai checklist memprogram, atau dalam bahasa Bu Inge-nya, "Sudah seberapa 'bersih'-kah kamu memprogram?" Saya "berani" membawa topik "kebersihan" program karena, meski ada tulisan tentang Why can't programmers program, saya cukup yakin bahwa pembaca blog ini terdiri "hanya" dari dua tipe saja:
  1. Teman/saudara/kerabat/handai Taulan (TSKHT) saya
    • TSKHT saya yang pernah berurusan dengan dunia pemrograman. Anda pasti bisa memprogram!
    • TSKHT saya yang memang tidak berurusan dengan dunia pemrograman (kayanya sebentar lagi bakal nutup tab ini deh :( )
  2. Orang "lewat"... Jika Anda masuk kategori ini, saya yakin Anda bisa memprogram... Soalnya kalo nggak, gimana caranya bisa nyasar ke blog ini... Wong Page Rank-nya aja cuma 3/10...

Dengan asumsi demikian, Anda pasti bisa memprogram atau tidak pernah berurusan dengan dunia pemrograman... Oleh karena itu, tidak ada salahnya memeriksa kebersihan kode seseorang yang memprogram (!= programmer). Berikut ini daftar yang "dikeluarkan" oleh Bu Inge dalam memprogram: (dalam kasus ini, saya menggunakan Java)

  1. Tidak pernah menggunakan break ataupun continue, so instead of doing something like this:
    int ans = -999;
    for(int i = 0; i < strArr.length; i++){
        if(strArr[i].equals("elvi")){
            ans = i;
            break;
        }
    }
    akan jauh lebih baik jika memperbaikinya menjadi begini:
    int ans = -999;
    {
        boolean found = false;
        for(int i = 0; i < strArr.length && !found; i++){
            if(strArr[i].equals("elvi")){
                ans = i;
                found = true;
            }
        }
    }
    Ini memang "ujian" paling berat, apalagi dari segi panjangnya kode, kode kedua lebih panjang
  2. Tidak memberi return lebih dari satu di satu fungsi, so instead of doing something like this:
    if(i == 2)
        return i;
    return i+1;
    akan jauh lebih baik jika memperbaikinya menjadi begini:
    int ans;
    if(i == 2)
        ans = i;
    else
        ans = i+1;
    return ans;
    
    atau untuk memendekkan kodenya, menjadi seperti ini:
    int ans = i;
    if(i != 2)
        ans++;
    return ans;
    
  3. Tidak memberi return di prosedur (void), so instead of doing something like this:
    public void voidA(int x){
        if(x == 2) return;
        else {
            // do something
        }
    }
    akan jauh lebih baik jika memperbaikinya menjadi begini:
    public void voidA(int x){
        if(x != 2) {
            // do something
        }
    }
  4. Tidak melakukan kesalahan-kesalahan "konyol" memprogram, so instead of doing something like this:
    int i = 0;
    boolean found = false;
    while(!found){
        // do something
        if(/* something happened*/) found = true;
        i++;
    }
    i--;
    or this:
    int i = someFunction();
    if(i == 1){
        // doing something that doesn't change the value of i
    }
    if(i == 2){
        // doing something
    }
    akan jauh lebih baik jika bagaimana? Saya serahkan kepada pembaca untuk menjawabnya...
  5. Tidak cetak-cetek pulpen :D
    Karena cetak-cetek bulpen adalah awal dari kegilaan dunia... Hehehe...
Mungkin banyak, termasuk saya, terutama yang sudah masuk di dunia "nyata" mempertanyakan pentingnya "kebersihan" dari program, tapi saya sendiri sampai saat ini melihat hal diatas sebagai keindahan pemrograman... Meski sama sekali tidak menutup kemungkinan saya melakukan satu (atau lebih) kesalahan diatas, terutama saat kepepet dikejar deadline(eniwei, istilah yang bener untuk batas akhir pengumpulan (tugas, dkk) adalah deadline bukan dateline)


Terakhir... Pesan yang selalu disampaikan oleh Bu Inge kepada anak didiknya "Anakku, jadilah orang waras di dunia yang sudah gila ini"