Catatan Kecil tentang Clean Code

Evando Wihalim
5 min readMar 21, 2021
Sumber : https://manifesto.softwarecraftsmanship.org/

Gambar di atas merupakan manifesto mengenai pembuatan perangkat lunak secara lebih profesional. Pada nilai pertama yang diajukan di manifesto ini tertulis bahwa perangkat lunak tidak hanya bekerja/berfungsi melainkan juga merupakan perangkat lunak yang dibuat dengan baik. Menurut saya, salah satu cara implementasi dari hal tersebut adalah dengan membuat kode yang bersih.

Clean Code

Secara harfiah clean code berarti kode yang bersih. Menurut saya, kebersihan yang dimaksud dari sebuah kode adalah kode tersebut elegan, mendukung produktivitas, dan mudah dimengerti oleh orang lain. Sebenarnya definisi kode yang bersih juga kembali ke pribadi masing-masing programmer. Dikarenakan adanya banyak definisi mengenai kode yang bersih, oleh sebab itu biasanya suatu bahasa pemrograman memiliki konvensinya masing-masing. Sebut saja bahasa pemrograman python yang memiliki PEP 8 sebagai panduan untuk menulis dalam bahasa tersebut. Adanya panduan seperti ini tentunya dapat menjadi standar dalam kebersihan kode sehingga banyak orang dapat menulis maupun mengerti kode yang ditulis oleh orang lain.

Berikut ini saya coba lampirkan beberapa cara untuk membuat kode yang bersih berdasarkan buku Clean Code yang ditulis oleh Robert C. Martin.

Meaningful Names

Ketika menulis nama, baik itu untuk variabel maupun untuk fungsi atau class, gunakanlah nama yang memiliki arti.

# Orang akan sulit mengetahui arti dari i pada variabel di bawah ini
i = 100
# Orang akan dengan mudah mengetahui bahwa variabel di bawah ini digunakan untuk menyimpan nilai maksimum jumlah orang
MAX_PERSON = 100
Contoh implementasi Meaningful Names

Pada kode di atas dapat terlihat dengan jelas bahwa fungsi itu digunakan untuk mengambil cart.

Functions Only Do One Thing

Setiap fungsi hanya digunakan untuk menyelesaikan satu pekerjaan.

Contoh:
Ada sebuah fungsi yang digunakan untuk login sekaligus untuk menampilkan halaman profil pengguna. Sebaiknya kedua pekerjaaan tersebut (login dan menampilkan halaman profil pengguna) dipisah. Hal ini dapat mempermudah pengembangan perangkat lunak ke depannya.

Implementasi nyata Functions Only Do One Thing:

Fungsi pertama khusus untuk meminta data.
Fungsi kedua khusus untuk mengubah data.

Kedua fungsi di atas, memiliki tujuannya masing-masing. Fungsi get dikhususkan hanya untuk mengambil data sedangkan fungsi patch dikhususkan hanya untuk mengubah data tertentu.

D.R.Y (Don’t Repeat Yourself)

Misalkan ada sebuah fungsi yang ditugaskan untuk menampilkan halaman profil pengguna. Selain itu adapula fungsi yang ditugaskan untuk memasukkan barang ke keranjang pengguna. Kedua fungsi tersebut membutuhkan autentikasi. Daripada kita menulis kode untuk autentikasi berulang kali di masing-masing fungsi, buat saja sebuah fungsi baru yang gunanya untuk melakukan autentikasi bagi pengguna. Fungsi baru ini yang nanti akan dipanggil di setiap fungsi yang membutuhkan autentikasi.

Untuk memperjelas, berikut ini saya berikan contoh penerapan D.R.Y.

Fungsi helper yang digunakan berulang kali

Fungsi di atas adalah fungsi yang sering digunakan oleh method request yang saya implementasikan di bawah. Jika saya tidak memisahkan kode tersebut, saya harus berulang kali mengetikkan kode yang sama. Hal ini tentunya akan menyulitkan apabila terjadi kesalahan pada kode yang digunakan berulang kali tersebut.

Fungsi pertama yang menggunakan fungsi helper.
Fungsi kedua yang menggunakan fungsi helper.

Dengan adanya penerapan D.R.Y., apabila fungsi helper bernama “get_cart” mengalami kesalahan, saya cukup mengganti di dalam fungsi itu tanpa perlu menyentuh fungsi get dan patch sama sekali.

Good Comment

Dokumentasi yang baik adalah dokumentasi yang ditulis hanya jika dirasa perlu dan disampaikan dengan singkat namun jelas. Dokumentasi tidak harus ditulis untuk setiap baris kode. Contoh: ada sebuah fungsi yang kompleks dan sulit dimengerti oleh orang lain dalam satu kali baca. Fungsi ini perlu diberikan dokumentasi berupa komentar yang singkat namun jelas. Namun ada pula fungsi sederhana dan dari namanya saja sudah diketahui kegunaan dari fungsi tersebut. Fungsi seperti inilah yang tidak perlu dituliskan dokumentasinya.

Kode yang sudah jelas hanya merupakan implementasi model.

Pada gambar di atas, dapat terlihat dengan jelas bahwa itu adalah definisi sebuah model atau table pada database. Kode seperti ini menurut saya tidak perlu diberikan komentar sebab tujuannya memang hanya untuk mendefinisikan model.

Unit Test

Penulisan test untuk setiap kode yang kita tulis dapat memastikan bahwa kode yang akan kita implementasi dapat berhasil. Unit test ini digunakan utamanya pada pengembangan perangkat lunak yang menggunakan prinsip TDD (Test Driven Development). Unit test juga dapat memberitahu kita apabila kode yang akan kita tambahkan berpotensi merusak kode yang sudah terimplementasi.

Apabila kode yang selama ini kita tulis belum bersih, kita dapat membersihkannya dengan cara melakukan refactor. Refactoring adalah proses untuk membersihkan kode yang sudah berfungsi namun belum bersih atau masih ada smell code.

Berikut ini saya lampirkan contoh dari unit test untuk fungsi delete.

Contoh unit test

Sedangkan gambar di bawah ini adalah implementasi dari unit test di atas.

Implementasi unit test

Dari contoh di atas, pemrogram tentu akan dapat memahami kode dengan lebih baik sebab dari unit test di atas, kita dapat melihat adanya test untuk berbagai macam kondisi beserta hasil yang diharapkan, seperti: fungsi test_delete_product_no_auth yang berarti test untuk menghapus produk. Test tersebut melakukan perbandingan (assertEqual) dengan response status HTTP_401_UNAUTHORIZED. Hal ini berarti, pengguna yang belum terautentikasi atau tidak memiliki autorisasi, tidak akan dapat menghapus produk. Dengan demikian dapat disimpulkan bahwa pemrogram selanjutnya akan dengan lebih cepat dan mudah memahami maksud dan harapan pemrogram sebelumnya. Hal ini dapat berarti unit test dapat membuat kode menjadi lebih bersih sebab pemrogram selanjutnya akan dengan mudah memahami kode dari pemrogram sebelumnya.

Demikian catatan kecil saya mengenai clean code, semoga catatan ini dapat memberikan sedikit gambaran kepada pembaca mengenai clean code.

Referensi:

  1. Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin.
  2. PEP 8 — Style Guide for Python Code

--

--