Code Smell

Assignment vs addition

Umumnya, operasi dalam pemograman adalah operasi assignment, di mana sebuah nilai di-set ke dalam sebuah variable tertentu. Contoh: player.setHealth(100); = 100. Operasi tersebut me-set HP dari pemain menjadi 100.

Sementara addition (atau subtraction, multiplication, etc), adalah pengubahan nilai sebuah variable dengan nilai yang ada saat ini sebagai acuannya. Contoh: player.removeHealth(50); = - 50. Operasi ini mengurangi HP pemain sebanyak 50 dari jumlah HP yang ada. Perlu diketahui dalam operasi addition, tidak diketahui berapa nilai variable saat itu dan tidak diketahui nilai variable barunya. Yang diketahui adalah berapa besar perubahan nilai antara variable yang baru dengan nilai sebelumnya.

Assignment atau addition

Dalam beberapa kasus, ada beberapa function yang tidak jelas apakah operasi tersebut melakukan assignment atau addition. Contoh: function run(Direction direction, int step);, 10). Function tersebut tidak jelas apakah player akan bergerak ke kanan sebanyak 10 langkah dari posisinya, atau dari titik nol.

Bila kita ubah sedikit nama functionnya, misalnya menjadi function runTo(Direction direction, int step); player.runTo(Direction.Right, 10). Function tersebut cukup jelas bahwa operasinya merupakan assignment, yang mana akan me-set posisi pemain sebanyak 10 step ke arah kanan dari posisi nol.

Function seperti function resize(int height, int width); function resizeTo(int height, int width); function enlarge(int height, int width);. Function resize tidak terlalu jelas apakah merupakan assignment atau addition, sementara resizeTo dan enlarge dapat digunakan untuk memperjelas operasinya.


Apabila dalam me-desain sebuah function, pastikan nama function tersebut jelas operasinya. Apabila dalam menggunakan sebuah function yang nama operasinya tidak jelas, test dulu dengan beberapa kode snippet untuk mempermudah debugging.

Code Smell : Stringly Typed

This is a reposted article from the old blog.

This term “Stringly Typed” were coined from codinghorror site here. It is described as “an implementation that needlessly relies on strings when programmer & refactor friendly options are available”. Now, have you ever think that you can replace almost every data type, even functions / methods with string? If not, then you can see it here.


Code Smell : Array-based Data Model

This is a reposted article from the old blog.

In OOP, you have classes to define your data model. Your class can be passed between methods and even other classes as well, making it very flexible to be used, and at the same time still keeping the data structure. It is nice isn’t it? Unfortunately, there are a group of programmers who like array-based data model more rather than modeling using classes.

If you find those group working for medium-high complexity projects, quickly demoted them, and exclude them from the socialization. If you find yourself doing the same thing, quickly go to nearest worship place and atone your sin, then begin to start a new life. Is it that bad? Yes it is. Why? Here we go: