Spiga

一天一个重构方法(20):以测试取代异常

2009-07-30 13:19:11

Replace Exception with Test:以测试取代异常

面对一个调用者可预先加以检查的条件,你抛出了一个异常,请修改调用者,使它在调用函数之前先做测试。

public int GetValueForPeriod(int periodNumber)
{
	try
	{
		return _values[periodNumber];
	}
	catch (Exception)
	{
		return 0;
	}
}

加入条件判断后代码

public int GetValueForPeriod(int periodNumber)
{
	if(periodNumber >= _values.Length)
		return 0;
	return _values[periodNumber];        
}

异常的出现是程序语言的一大进步。异常可协助我们避免很多复杂的错误处理逻辑。但是,异常也会被滥用。异常只应该被用于异常的、罕见的行为,也就是那些产生意料之外的错误行为,而不应该成为条件检查的代替品。如果你可以合理期望调用者在调用函数之前先检查某个条件,那么你就应该提供一个测试,而调用者应该使用它。