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:
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)
Terakhir... Pesan yang selalu disampaikan oleh Bu Inge kepada anak didiknya "Anakku, jadilah orang waras di dunia yang sudah gila ini"
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:
- 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 :( )
- 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)
- 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 - 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;
- 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 } }
- 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...
- Tidak cetak-cetek pulpen :D
Karena cetak-cetek bulpen adalah awal dari kegilaan dunia... Hehehe...
Terakhir... Pesan yang selalu disampaikan oleh Bu Inge kepada anak didiknya "Anakku, jadilah orang waras di dunia yang sudah gila ini"
Kyaaa~ Kyaaa~ nais post!
ReplyDeleteanyway, setelah dipikir2, kesalahan "konyol" bagian 1 tampak tidak begitu konyol (malah jadi bagus) kalo diliat dari sisi performansi doang sepertinya ya (jika dibandingkan dengan kode yang "seharusnya")
ReplyDeletehummm
ReplyDelete4.1 found = *something happened*
4.2 else if kalo boleh, atau tuker posisi kalo boleh :D
@anonymous: untuk 4.1, masih kurang tepat... itu tidak menghilangkan "kekonyolan" yang ada, hanya memperpendek kode sedikit...
ReplyDeleteUntuk nomer dua, jika fungsi memiliki balikan nilai, bisa disingkat sbb:
ReplyDeletereturn ((i == 2) ? i : i+1);
Satu lagi pesan bu Inge, Keledai yang bodoh sekalipun tidak akan jatuh pada lubang yang sama dua kali.
Nomor 1 pun break nya bisa dihilangkan sbb:
ReplyDeleteint ans = -999;
for(int i = 0; i < strArr.length; i++){
if(strArr[i].equals("elvi")){
ans = i;
i = strArr.length;
}
}
Nomor 4.1 itu harusnya pakai do..while kan ya?
4.1. sebenernya "kesalahan" utama adalah, adanya i-- setelah ada i++ di loop, which should not be there :) (masa baru di-increment langsung di-decrement lagi)
ReplyDeleteLha itu habis di-assign
ReplyDeletefound = false
lalu dicek lagi
while(!found)
:D
oh iya... that can be considered as "salah" juga (see? I am the same stupid), well, berarti di 4.1 ada dua "kesalahan" :D
ReplyDeleteora dong blassssss
ReplyDelete@Lila: well... kamu masuk kategori teman yang masuk kategori orang yang gak bisa dan gak pernah berurusan dengan dunia pemrograman...
ReplyDeletekalo baca semua contoh kodenya, daku malah ga tau kok ada yang program ga bersih kayak gitu. hahahaha
ReplyDeleteselama ini koding bersih terus berarti* >:)
Malah saya mau tanya di blogspot bisa buat code snippet rapi begitu bagaimana caranya ?
ReplyDeleteTermasuk mau tanya kalau tahu cara menambahkan huruf Arab di blogspot.
Terima kasih ya :-)
1. SyntaxHighlighter, silakan dicari :)
ReplyDelete2. Saya belum pernah menggunakan huruf Arab di blog juga, jadi silakan cari tahu sendiri :)
Sama2
baca buku CleanCode ko. Di situ penulisnya bilang: praktek baik seperti Bu Inge sarankan itu hanya berlaku untuk method yang panjang, dimana method ga bisa dilihat sekilas, sehingga kalau ada return di banyak tempat jadi puyeng bacanya, kala ada break jadi bingung bacanya.
ReplyDeleteNah si penulis menyarankan... kalo panjang method maksimal 5 line saja. Kalau 5 line, semua praktek yang ga baik itu terkurangi nilai ga baiknya, karena semua terbaca dalam sekilas.
Tapi masalahnya... 5 line? Bu Inge aja ga pernah punya saran seperti itu.... Yakin bisa buat semua method sependek itu?