Refactoring, Sederhanakan Syntaxmu!
Halo fellas, Kiddy disini dan pada kesempatan kali ini saya awalnya bingung mau membagikan apa, libur cuti bersama sampe hari senin gini bikin mager ngapa-ngapain yekan pengennya rebahan mulu, tapi tetep aja ya harus produktif dan belajar hal baru, soalnya nih buat kamu yang masih muda, jangan sampe kamu nyesel nanti kalo telat belajar xixixi.
Cielah mana header saya kali ini baru yakan? Namun masih menggunakan topeng saya yang sama hahahaha.
Dikarenakan saya belom pernah berbagi insight mengenai cara-cara membuat kodingan lebih indah, makanya saya putuskan untuk membagikan hal ini deh
Nah pada kesempatan kali ini, saya ingin berbagi kesempatan untuk memberikan insight mengenai refactoring ke teman-teman semuanya.
Nah saya sebenernya udah lama ngeliat salah satu website ini, yaitu website yang menuliskan hal-hal refactoring dan design pattern di programming.
Apabila kamu berkenan mampir silahkan aja karena website itu cukup bagus untuk belajar hal-hal yang agak advance soal programming, dan apabila kamu suka jangan lupa support untuk membeli produknya ya!
Dukungan kamu sangat berarti bagi siapapun yang membagikan ilmu secara gratis.
INGAT ILMU ITU GRATIS, YANG MAHAL ITU USAHA ORANG YANG MEMBAGIKANNYA! MAKA JANGAN LUPA HARGAI JASA MEREKA! ^^
Bagi yang sudah memiliki pengalaman coding dan pernah mencoba membuat projek atau produk sendiri, tentunya pernah mengalami code yang gendut seiring dengan pengembangan fitur.
Ya, tentu dong, semakin code berkembang, semakin fitur bertambah, tentunya codingan juga makin banyak.
Nah seiring dengan pengembangan fitur yang makin banyak, codingan makin nambah juga, perlu dilakukan sebuah teknik yang namanya refactoring.
Nah apa sih refactoring?
Refactoring is a systematic process of improving code without creating new functionality that can transform a mess into a clean code and simple design.
- Refactoring Guru
Kalo diartiin dengan bahasa mudahnya adalah:
Refactoring adalah sebuah proses peningkatan kode program sehingga menghasilkan kode yang lebih rapih & sederhana.
Kenapa harus Refactoring?
Nah salah satu alasan mengapa harus refactoring adalah karena tidak menjamin kode yang kamu tulis akan selalu kamu lanjutkan, dan akan mempermudah orang yang melanjutkan untuk maintenance.
Pernah liat projek yang super duper ruwet dan dikerjain asal-asalan? Pasti banyak. Nah developer yang “kurang baik”, biasanya ngoding asal-asalan, alias cuma tuhan dan dia yang tau itu baris code seperti apa.
Sedangkan developer yang baik adalah developer yang bisa membuat developer lainnya ngerti code yang dia tulis, tanda kutip developer ini juga punya experience yang sama ya, kalo kode refactor saya untuk projek gede dikasih ke anak newbie untuk dibaca juga keder anak itu ngeliatnya.
Nah dengan refactor, semua kode dibuat lebih simplfy dan tidak buang-buang baris kode. Pernah liat temenmu bangga banget liat kodingan yang dia tulis sampai 1000 baris dalam satu file? 1000 baris itu bisa jadi bukan 1000 baris yang layak, melainkan banyak kode yang tidak efektf.
Refactor ini banyak banget bentuknya, dan sebenernya saya sendiri juga belom pernah liat sih paguyuban software engineer ngumpul di hotel Aston misalnya, diskusiin standar refactoring, namun ada beberapa hal dasar yang biasa dterapin sama software engineer.
PS: Kode akan ditulis dalam bahasa Python.
Kembali ke tujuan awal, intinya adalah simplify code dan membuat kodingan kamu jadi lebih indah dan enak diliat. Mau tau contoh sederhana? Coba liat code ini, terlihat sederhana kan? Sebenernya bisa disimplify loh.
Nah kenapa ngga buat fungsi baru aja?
“Loh ngapain ribet-ribet bang?”
Ya biar lebih gampang dong, karena keduanya memiliki algoritma yang sama yaitu:
Variabel 1 * variabel 2 * variabel 3 + variabel 4
Sehingga, refactor aja biar lebih sederhana, toh hasilnya sama kok. Tujuan lainnya adalah kalo berubah, efeknya akan ke semuanya sekaligus~
Aturan dasar membuat refactor:
- Kalo hanya ada satu, it’s ok.
- Kalo udah ada dua algoritma yang outputnya sama persis, kamu mulai harus mikirin refactoring.
- Kalo udah ada tiga, segera refactoring, atau mati. (hehe canda ._.)
Nah masih banyak lagi hal sederhana lainnya yang bisa kamu lakukan untuk memperindah code kamu.
Pernah denger Indentation Hell?
“Apaan tuh? Neraka indentasi?”
Betul, neraka indentasi, ini biasanya terjadi kalo program kamu banyak kondisi.
Nah jadinya kaya gini, serem banget kan? HAHAHAHA
Indentation hell itu adalah nerakanya engineer dimana saking banyaknya kondisi sampe harus kekanan terus, sampe bisa digeser sama shinku hadokennya ryu HAHAHA.
Ini terjadi karena terlalu banyaknya kondisi dan tidak dibuat sederhana, makanya bisa sekacau ini.
Ada contoh sederhana, wah ini kalo kondisinya makin kedalem, makin indentation hell deh, banyak elsenya pula. Gimana kalo kita sederhanain?
Paham kenapa ditulis seperti code di atas?
Jadi gini, pada gambar bagian pertama if a > 10 ada dua kondisi dimana b harus 10, dan c harus 20, instead of kita menulis b == 10 lalu membuat kondisi didalamnya lagi yaitu c == 20 kenapa kita tidak kembalikan atau buat error nilai yang != 10? Karena ekspektasi kita kan nilai == 10, kalau 11 ya pasti tidak sama dengan 10 dong? Maka dari itu daripada membuat kondisi cek b == 10, buat saja b != 10, karena kalau bukan 10 ya pasti dianggap true dan masuk ke dalam kondisi tersebut!
Jadi apabila b != 10 dia pasti akan memprint “Nah” dan mengembalikan false (Tidak melanjutkan code), namun apabila b = 10, tentu kode itu akan masuk ke pengecekan kedua yaitu c != 20, dan ini sama saja seperti penjelasan saya diatas, kalau c == 20 pasti tidak akan masuk ke kondisi tersebut, melainkan lanjut kebawah hingga sampai “Yeah”.
Cara ini ada pro dan consnya, tergantung gimana algoritma kalian xixi.
Pros
- Kamu bisa membuat kondisi-kondisi berbeda di setiap kondisi yang tidak cocok.
- Kamu bisa lebih cepat mengembalikan fungsi, karena bisa jadi dicegat di bagian pertama.
- Secara performa lebih cepat sepersekian milisekon (asumsi saya aja sih, ngga tau deh tanya aja anak yang biasa lomba computer algorithm).
Cons
- Menulisnya jelek, karena harus return False di setiap fungsi untuk dikembalikan.
Lebih banyak pros-nya ya? hahaha tentukan saja pilihanmu.
Nah ada cara lain lagi nih, yaitu:
Menggunakan flag! Flag itu semacam variable penanda yang akan jadi acuan kita, biasanya pake boolean karena enak diolah. Flag ini biasanya digunakan dalam membuat validasi, jadi kalau ada satu kondisi yang tidak sesuai maka akan dimasukkan ke dalam array pesannya, itu dia mengapa di Laravel kita bisa melihat pesan error bertumpuk, karena menggunakan flag dan ditumpuk hasil kembaliannya kedalam sebuah array.
Flag yang awalnya kita set true, apabila bertemu kondisi yang tidak sesuai kita akan set false. Pada akhir program, kita cek variabel si flag, kalo false ya akan kita kembalikan sesuai keinginan kita.
Cara ini juga ada pros and consnya:
Pros
- Code sederhana, karena hanya membuat flag sederhana dan mencegatnya di akhir program.
- Masih bisa dikostumisasi pada setiap kondisi yang tidak sesuai.
Cons
- Lebih lambat sepersekian milisekon karena harus mengecek semua kondisi.
- Menimpa isi variable yang sudah ada dengan isi yang sama.
Masih banyak cara untuk ngebuat baris kode kita lebih “sederhana” dan enak dibaca, tujuannya selain masalah performa kode kamu, faktor lainnya yaitu masalah maintenance program juga. Pasti kamu pernah baca code sendiri dan bingung ini baris ngapain kan? Ya jelas, toh ketika ngoding kamu masuk sage mode, tetiba nulis kode kaya kerasukan jin koding sehingga cuma kamu dan tuhan yang tau. Giliran 2 minggu lagi ngeliat kode itu, bahkan yang nulis pun bingung, tinggal tuhan deh yang tau.
Inget, kalo kamu ngoding sendirian sih ngga apa, misal untuk projek pribadi, tapi kalo kamu akan team-up sama programmer lainnya, kurang-kurangin deh ngoding asal-asalan, nanti bikin programmer lain kesel, terutama senior engineer kamu.
Programmer yang baik itu yang bisa nulis kode dan dimengerti oleh komputer itu sendiri dan programmer lainnya, kalo programmer lainnya aja ngga paham maksud kodemu, hadeh siap-siap ditampar ya hahaha.
Perlu temen-temen inget, engineering itu berproses, makanya salah satu tugas lead software engineer itu biasanya refactoring. Code-code yang ditulis sama anggota tim akan diperiksa kembali dan dikomentari bagian mana yang bisa di enhance.
Karena seiring perkembangan fitur, tentu code jadi makin lebih gendut, dan biasanya ketika lagi dikejar waktu rilis fitur, beberapa software engineer professional ngerjainnya ngebut dan ngga rapih-rapih amat, karena dikejar deadline. Inget, ngga rapih-rapih amat lho bukan berantakan.
Eh… ini mah rafi ahmad bukan rapih amat.
Oke sekian aja ya artikel kali ini, semoga bisa menambahkan insight untuk kalian yang sedang belajar programming. Next saya akan sharing untuk belajar mengenai data struktur.