Clean Code — Quick Best Practices

Jilham Luthfi
6 min readMay 4, 2021

--

Programmer yang profesional tidak hanya mementingkan bagaimana software yang dibuatnya bisa berjalan, tapi juga memiliki semangat software craftmanship. Salah satu aspek software craftmanship adalah bagaimana menulis source code dengan baik sehingga software dapat maintainable dan mudah dikembangkan untuk jangka panjang. Yuk, kita cari tahu bagaimana code yang baik itu.

Apa itu clean code?

“Truth can only be found in one place: the code.”
― Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship

Source: https://blog.knoldus.com/clean-code-robert-c-martins-way/

Clean code adalah code yang disusun dengan baik dan rapi serta dengan format yang benar sehingga mudah dibaca, dimengerti, dan ditelusuri oleh siapa pun yang mengaksesnya atau dikostumisasi jika terjadi perubahan. Ada beberapa alasan penerapan clean code, diantaranya untuk membantu orang lain membaca kode yang dibuat dan agar arsitektur kode menjadi lebih elegan sehingga lebih mudah untuk dilihat dalam waktu lama, dimodifikasi dan dikembangkan. Selain itu, penerapan clean code juga dapat menghemat waktu dan biaya saat harus melakukan maintenance terhadap sistem.

Ada tiga prinsip yang cukup terkenal pada clean code.

  • KISS: Keep It Simple Stupid. Prinsip desain yang berasal dari Angkatan Laut AS yang sudah ada sejak 1960. Prinsip ini mendorong programmer untuk menulis code sesederhana mungkin dan menghindari implementasi yang kompleks. Dengan beragam bahasa yang bisa dipakai, programmer harus aktif bertanya pada diri sendiri apakah ada implementasi yang lebih sederhana.
  • DRY: Don’t Repeat Yourself. Closely, terkait erat dengan KISS dan filosofi desain minimalis. Fungsi pada clean code harus mengerjakan hanya satu tugas dalam keseluruhan sistem.
  • YAGNI: You Aren’t Gonna Need It. Programmer sebaiknya hanya memperkenalkan fungsi tambahan ke code jika diperlukan. Programmer harus memprogram arsitektur software dalam langkah-langkah kecil agar dapat beradaptasi terhadap masalah secara dinamis dan individual.

Prinsip-prinsip lainnya bisa dilihat di sini.

Kelebihan dalam implementasi Clean Code

  1. Clearness, merupakan faktor yang penting dalam proyek kolaborasi. Terkadang code yang dibuat oleh satu programmer belum tentu bisa dimengerti dengan mudah oleh programmer lain. Oleh karena itu, penting untuk menjaga code yang dibuat sebersih dan sejelas mungkin.
  2. Easy to test, karena code yang dibuat menjaga kesederhanaannya. Dengan begitu, mendorong programmer mengimplementasikan TDD yang merupakan cara efektif untuk meningkatkan kualitas kode, meningkatkan kecepatan jangka panjang tim, dan mengurangi jumlah kerusakan perangkat lunak.
  3. Maintenance, karena berkaitan dengan poin 2. Membuat code lebih mudah daripada memahami code yang diberikan. Jika hal tersebut mulai dirasakan, maka sudah sebaiknya untuk merevisi implementasi code. Jadi, dengan membuat code yang dapat dipelihara akan mengoptimalkan sebagian besar waktu dan biaya pemeliharaan kode.
  4. Cost savings, karena dari poin 2 dan 3 bisa ditarik kesimpulan bahwa penerapan clean code bisa menghemat waktu dan biaya dalam mengembangkan proyek.
  5. Best practice, menjadi salah satu hal yang terbayarkan karena memenuhi hal-hal yang diperlukan pada pengembangan software saat ini seperti melakukan unit testing, TDD, CI/CD, dan masih banyak lagi.

Penerapan Clean Code

Meaningful Names

Memilih nama yang baik membutuhkan waktu tetapi bisa menghemat pengerjaan di masa yang akan datang. Setiap orang yang membaca kode Anda (termasuk Anda) akan lebih senang jika Anda melakukannya. Dalam memberikan penamaan, Anda perlu menanyakan tiga hal ini dalam diri Anda:

  • Mengapa itu ada?
  • Apa yang dilakukan?
  • Bagaimana menggunakannya?

Programmer harus menghindari petunjuk palsu yang mengalihkan arti kode. Anda sebaiknya tidak menggunakan informasi tipe data dalam nama, misalnya -List.

Contoh penamaan yang baik

Functions

Aturan pertama dari function adalah bahwa function harus berukuran kecil. Aturan kedua dari fungsi adalah bahwa mereka harus lebih kecil dari itu. Semakin kecil dan lebih fokus suatu fungsi, semakin mudah memilih nama deskriptif. Selain itu, argumen pada function juga harus seminimal mungkin.

  • Avoid output arguments. Apapun yang diubah sebisa mungkin dikembalikan oleh suatu function.
  • Side Effects are lies! Sangat penting untuk memberikan nama yang representatif terhadap apa yang dilakukan oleh suatu function karena bisa jadi terhadap fungsi yang tersembunyi. Hal tersebut bisa menimbulkan misleading.
  • Do one thing! Keep it simple silly (KISS) jika Anda masih ingat.
Contoh penerapan fungsi yang sederhana

Comments

Idealnya, kode kita harus cukup jelas sehingga bisa memberikan gambaran apa yang dilakukan dan kita bahkan tidak memerlukan komentar apa pun. Comment bukan bertujuan untuk memperbaiki bad code. Namun, terkadang tidak mungkin untuk mengekspresikan sesuatu hanya dengan menggunakan kode. Maka dari itu, gunakanlah comment di saat yang tepat dan diperlukan, misalnya pada case penggunaan regex.

Beberapa contoh comment yang baik adalah legal comment (terkait lisensi), comment yang informatif, dan peringatan adanya konsekuensi. Sementara itu, beberapa contoh comment yang buruk adalah mumbling, redundant, atau misleading comment.

Contoh comment yang baik (informative comment)

Formatting

Format juga salah satu hal yang penting terkait tata letak dari code yang dibuat. Dengan formatting yang baik, code yang dibuat akan semakin mudah dan enak dilihat. Aturan formatting tiap bahasa pemrograman berbeda-beda, sehingga sesuaikan dengan bahasa yang kalian gunakan. Aturan formatting biasanya terkait indentasi, penamaan, jarak antar item, dan masih banyak lagi. Salah satu formatting yang digunakan pada bahasa pemrograman Python adalah PEP 8. Contoh implementasi bisa dilihat pada bagian code di sini.

Objects & Data Structures

Pembuatan struktur data disarankan untuk menyembunyikan implementasi(abstraction) agar programmer bisa leluasa mengostumisasi. Abstraksi itu tidak hanya berfokus pada hal semacam fungsi “getter dan setter” akan tetapi berfokus untuk membentuk abstract interface yang memungkinkan penggunanya untuk memanipulasi tanpa harus tahu implementasinya.

Contoh penerapan abstraksi dalam pembuatan struktur data

Selain itu, modul seharusnya tidak perlu tahu bagian dalam dari objek yang dimanipulasi. Fokus law of demeter adalah untuk meningkatkan decouple objek. Isi dari law of demeter adalah sebagai berikut.

  1. Objects in class parameter
  2. An object in function parameter
  3. An object in class members
  4. Objects created inside the function body
Contoh penerapan law of demeter

Error Handling

Error handling hanyalah salah satu dari hal-hal yang harus kita lakukan ketika kita memprogram. Input bisa tidak normal dan program bisa gagal. Singkatnya, bisa saja terjadi kesealahan, dan sebagai programmer, Anda bertanggung jawab untuk memastikan bahwa kode kami melakukan apa yang perlu dilakukan. Dalam best practice, biarkan code dijalankan dan jika bertemu dengan error, baru diatasi. Perlu diingat, sebaiknya jangan mengembalikan atau melewatkan null pada error handling.

Contoh implementasi error handling dalam mendaftarkan admin

Jejak Penulis

Saran dari penulis untuk bacaan lebih lanjut dan memperdalam topik yang sedang dibahas :)

Referensi

--

--

No responses yet