Studi Kasus: Minus(12)

Minus

5+2+4-3+10-2=?

20 + 30

1 + 1 + 1

10 + 20 + 30 + 40 + 51

Minus

Object ratusan

Eksepsi jika tidak ada ekspresi yang bersesuaian

Penjumlahan telah kita selesaikan dengan baik. Untuk pengurangan pastinya lebih mudah. Pertama-tama kita harus membuat komposisi dari operasi minus. Mencontek dari test komposisi plus, berikut ini adalah test untuk komposisi minus.

[Test] 
public void KomposisiMinus() 
{ 
	IExpression puluhan=Number.CreateNewNumber("2"); 
	IExpression satuan=Number.CreateNewNumber("0"); 
	IExpression asal=new Puluhan(puluhan,satuan); 
	IExpression pengurang=Number.CreateNewNumber("1"); 
	IExpression minus=new Minus(asal, tambahan); 
	Assert.AreEqual("20 - 1",minus.Expression); 
	Assert.AreEqual(19,minus.Value); 
}

Disini kita ingin mengurangi 1 dari 20. Agar test bisa dikompile kita harus membuat class Minus. Mencontek dari class Plus, test diatas langsung green.

public class Minus:IExpression 
{ 
	private IExpression m_asal; 
	private IExpression m_pengurang; 
	public Minus(IExpression asal, IExpression pengurang) 
	{ 
		this.m_asal= asal; 
		this.m_pengurang = pengurang; 
	} 
	public string Expression { 
		get { 
			return String.Format("{0} - {1}",this.m_asal.Expression,this.m_pengurang.Expression); 
		} 
	} 
	public object Value { 
		get { 
			return (int)this.m_asal.Value - (int)this.m_pengurang.Value; 
		} 
	}
}

Langkah berikutnya adalah membangun ekspresi minus, jadi kita harus bisa mengkonversi “20 -1”. Berikut ini adalah test hasil contekan dari test ekspresi plus.

[Test] 
public void EkspresiMinus(){ 
	string input="1 - 1"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("1 - 1",ex.Expression); 
	Assert.AreEqual(0,ex.Value); 
}

Pesan yang muncul : Expression – not supported. Good! Memang minus belum kita support. Todo that…. gampang tambahkan sesuatu di method getOperator.

private IExpression getOperator(string ekspresi,IExpression exp1, IExpression exp2) 
{ 
	int oprIndex=getOperatorPosition(1,ekspresi); 
	string opr=ekspresi.Substring(oprIndex,1); 
	 
	if(opr.Equals(PLUS.ToString())) 
		return new Plus(exp1,exp2); 
	else if(opr.Equals(MINUS.ToString())) 
		return new Minus(exp1,exp2); 
	else 
		throw new ApplicationException(String.Format("Expression {0} not operator",opr)); 
}

Perhatikan blok kedua dari if. Sesimpel itu. Semua test kita menjadi green. Bagaiman dengan 20-1 dan 1-20? Ok. Mari kita buat test,

public void Kurangkan1dari20(){ 
	string input="20 - 1"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("20 - 1",ex.Expression); 
	Assert.AreEqual(19,ex.Value); 
} 
[Test] 
public void Kurangkan20dari1(){ 
	string input="1 - 20"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("1 - 20",ex.Expression); 
	Assert.AreEqual(-19,ex.Value); 
}

Tak ada yang perlu diaubah, semuanya green. Bagaimaan dengan 10-20-30-40-51? Ayo kita buat testnya,

[Test] 
public void OperatorMinusLebihDari3(){ 
	string input="10 - 20 - 30 - 40 - 51"; 
	IExpressionConverter exConverter=new ExpressionConverter(); 
	IExpression ex=exConverter.Convert(input); 
	Assert.AreEqual("10 - 20 - 30 - 40 - 51",ex.Expression); 
	Assert.AreEqual(-131,ex.Value); 
}

Tetap OK. Tidak ada masalah. Kita coret task kita.

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: