Bagian 5. Dollar

Sampai disini kita telah melakukan perjalanan begitu jauh. Tapi kok rasanya malah semakin menjauh dari tujuan utama, yaitu test pertama dalam list. Selain rupiah dalam test pertama yang penting juga diperhatikan adalah dolar.

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Equals()

GetHashCode()

Jenis object?

Null?

$10*2=$20

Kita tahu bahwa Dollar juga matauang. Sehingga semestinya berperilaku sama dengan Rupiah. Langkah termudah untuk membuat test adalah dengan meng-copy-paste-edit test Rupiah menjadi Dollar.

[Test]
public void DollarMultiplication(){
		Dollar sepuluhDollar=new Dollar(10);
		Assert.AreEqual(new Dollar(20),sepuluhDollar.Times(2));
		Assert.AreEqual(new Dollar(30),sepuluhDollar.Times(3));
		Assert.AreEqual(new Dollar(50),sepuluhDollar.Times(5));
}

Sekarang kira-kira langkah apa yang bisa membuat test ini green (jalan)? Copy and paste (copas) class Rupiah kemudian diedit manjadi Dollar. Benar itulah caranya.
Sebentar. Bukankah itu melanggar aturan Clean Code? Copas, bukankah pertanda bad smell? Benar. Perlu Anda ingat sekarang kita menempuh jalan yang berbeda. Perhatikan kembali siklus kita:
1.Buat sebuah test.
2.Buat test tersebut bisa dicompile.
3.Jalankan untuk melihat test tersebut gagal.
4.Buat test tersebut sukses/jalan.
5.Hapus duplikasi.

Setiap jalan mempunyai tikunganya sendiri-sendiri. Jalan ini bukan berarti mengizinkan Anda untuk melegalkan bad design. Sama sekali tidak. Yang terpenting dijalan ini adalah kecepatan. Anda harus bisa mempertahankan kecepatan. Langkah 1 sampai 3 harusnya sangat cepat. Langkah ke 5 adalah langkah-langkah kita menuju Good Design.

public class Dollar{
		private int m_amount;
		public Dollar(int amount){
			this.m_amount=amount;
		}
		public Dollar Times(int multiplier){
			return new Dollar(this.m_amount *multiplier);
		}
		public override bool Equals(object obj){
			Dollar dollar=(Dollar)obj;
			return this.m_amount==dollar.m_amount;
		}
	}

Setelah saya copas dan edit, test berjalan mulus. Ok. Sekarang kita masuk langkah 5, menghapus duplikasi.
Coba tebak dimana duplikasi itu? Dalam dollar dan rupiah. Benar. Kok kayak cerdas cermat. Pertanyaan berikutnya, langkah apa agar duplikasi-nya hilang? Tentu saja buat class yang lebih umum, sehingga bisa dipakai kedua-duanya, kan keduanya mempunyai perilaku yang sama.
Apa yang mau disamakan? Apa kamu gak lihat, orang semuanya sama kecuali kata dolar dan rupiah. Equality bisa dibuat lebih umum demikian juga dengan method Times. Marah ni ye….Seratus untuk Anda. Tetapi maaf ya, kita sudahi dulu sampai disini. Kita masukkan pertanyaan-pertanyaan atau ide-ide tadi kedalam list dulu ya. Besok kita lanjutkan.

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Equals()

GetHashCode()

Jenis object?

Null?

$10*2=$20

Duplikasi dolar dan rupiah

Equality yang lebih umum

Method Times() yang lebih umum

Hei, pak kenapa kita menunda-nunda masalah. Ada duplikasi tidak kita bereskan malah cepat-cepat pulang. Kebiasaan yang buruk.
Anda tidak capek? Ok deh. Perjanjian, mulai sekarang tidak boleh ada yang pulang sebelum semua duplikasi hilang!
Elu sih….
` Hus…itu aturan…mau menguasai TDD gak?
(Pak guru yang tadinya mau melanggar aturan, sekarang menjadi pahlawan pembela kebenaran…ajaib)

Iklan

There are no comments on this post.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: