The Dispensable

Bad Code Smell
Code Reengineering

The Dispensable

Smell ini berarti sesuatu yang tidak berguna dan tidak diperlukan. Jika bagian ini tidak ada akan membuat code lebih jelas, efisien, dan mudah dimengerti

Comments

Comments terjadi ketika pada sebuah code terdapat banyak comment untuk penjelasan. Sebuah code yang bagus harus memiliki nama yang self-explain dan flow yang jelas sehingga tidak memerlukan adanya comment. Jika sebuah code masih memerlukan comment untuk menjelaskannya, maka code tersebut mungkin perlu diperbaiki agar dapat memiliki nama atau flow yang lebih jelas. Comments dapat ditangani dengan menghapus comment tersebut jika code sudah jelas, jika comment digunakan untuk menjelaskan sebuah bagian dari code maka dapat dilakukan extract method pada bagian tersebut dan nama dari method dapat diambil dari comment itu sendiri, tetapi jika method tersebut telah di-extract dan masih diperlukan comment untuk menjelaskan flow, maka dapat dilakukan rename method untuk mendapatkan self-explain nama.

Before

After

Pada contoh code di atas, sebelumnya terdapat comment untuk menjelaskan fungsi dari method yaitu menghitung luas persegi panjang dan memberi output hasilnya, dimana nama dan alur dari kedua method tersebut sebenarnya sudah jelas.

Kemudian dilakukannya refactoring, yaitu dengan menghapus comment yang tidak diperlukan karena code tersebut sudah jelas.

duplicate Code

Duplicate Code terjadi ketika terdapat dua atau lebih bagian code yang identik atau mirip. Hal tersebut dapat terjadi karena seringnya dilakukan copy paste dalam membuat code atau terdapat dua programmer yang mengerjakan code tersebut. Hal ini dapat menyebabkan kerumitan dalam mengelola code kedepannya. Duplicate Code dapat ditangani dengan extract method apabila class berada dua subclass pada level yang sama atau extract superclass jika code terdapat di dua class berbeda.

Before

After

Pada contoh code di atas, sebelumnya terdapat dua class yaitu Employee1 dan Employee2 yang memiliki data dan fungsi yang sama yaitu menghitung bonus yang didapatkan employee, satu-satunya hal yang membedakan kedua class tersebut ialah persentase bonus yang didapatkan.

Kemudian dilakukannya refactoring, yaitu dengan menyatukan class menjadi Employee dan menambahkan variable percentage agar masing-masing employee dapat memiliki persentase bonus yang berbeda-beda.

Lazy Class

Lazy Class terjadi ketika terdapat class yang memiliki sedikit atau bahkan tidak ada fitur/metode yang diimplementasikan. Hal ini dapat terjadi setelah dilakukannya refactoring agar fitur-fitur code terbagi, tetapi malah menghasilkan class yang memiliki fungsi minim. Lazy class dapat ditangani dengan menambahkan metode yang berkaitan ke dalam class tersebut atau menyatukannya dengan class lain.

Before

After

Pada contoh code di atas, sebelumnya terdapat tiga class Lazy Class, yaitu class Square yang hanya bertugas set dan get data variable side, class AreaSquare dan PerimeterSquare yang masing-masing hanya memiliki satu fitur.

Kemudian dilakukannya refactoring, yaitu dengan menggabungkan fitur-fitur dari tiga class tersebut di class Square sehingga lebih efektif.

Data Class

Data Class terjadi ketika terdapat sebuah class yang hanya terdiri dari data serta constructor, setter, dan getter untuk data tersebut. Jadi, class ini berisi data yang akan dipakai atau diakses oleh class lain, tidak mengandung fitur atau fungsionalitas lain. Smell ini sering terjadi pada awal proses pembuatan class, tetapi seiring dengan berkembangnya sebuah class haruslah memiliki fungsionalitas. Data Class dapat ditangani dengan melakukan review pada class-class lain yang menggunakan data dari Data Class dan mencari method yang dapat dipindahkan ke Data Class.

Before

After

Pada contoh code di atas, sebelumnya class Employee merupakan Data Class karena hanya berisi data dari seorang employee serta constructor, setter, dan getter.

Kemudian dilakukannya refactoring, yaitu dengan menambahkan method yang berhubungan dengan data-data yang ada, yaitu method untuk validasi checkingAge() dan checkingEmail() sehingga sekarang class Employee tidak hanya berisi data.

Dead Code

Dead Code terjadi ketika terdapat variable, parameter, field, method, atau class yang tidak dipakai lagi atau tidak tersentuh ketika code dijalankan. Hal ini sering terjadi seiring berkembangnya code, terdapat bagian code yang tidak lagi digunakan dan tidak dihapus sehingga membuat code tidak relevan. Dead Code dapat ditangani dengan menghapus code yang sudah tidak digunakan lagi atau jika bagian tersebut dibutuhkan maka melakukan implementasi agar saat code dijalankan bagian tersebut akan berfungsi.

Before

After

Pada contoh code di atas, sebelumnya bagian if else tidak akan tersentuh ketika code dijalankan karena code akan return sebelum sampai bagian if else, sehingga hanya akan menghasilkan jumlah dari penambahan angka.

Kemudian dilakukannya refactoring, yaitu dengan menghilangkan return dan mengganti jenis method menjadi void, sehingga ketika code dijalankan akan menghasilkan output hasil dari penjumlahan serta apakah hasil tersebut merupakan bilangan positif atau negatif.

Speculative Generality

Speculative Generality terjadi ketika terdapat variable, parameter, field, method, atau class yang dibuat bertujuan untuk persiapan jika akan dibutuhkan di masa depan. Hal ini terjadi karena programmer berspekulasi bahwa bagian tersebut akan digunakan tetapi ternyata saat code dijalankan setelah beberapa lama, bagian tersebut tidak dibutuhkan. Speculative Generality dapat ditangani dengan mengahpus variable, parameter, field, method, atau class yang memang tidak diperlukan.

Before

After

Pada contoh code di atas, sebelumnya programmer berspekulasi bahwa akan ada premium user, tetapi pada akhirnya interface PremiumUser tidak digunakan.

Kemudian dilakukannya refactoring, yaitu dengan menghilangkan interface PremiumUser karena hanya ada satu jenis user yang akan digunakan.