高质量的代码:容错处理能力,规范性,完整性。尽量展示代码的可扩展型和可维护性。
容错处理能力:特别的输入和处理,异常,资源回收。
规范性:清晰的书写,清晰的布局,合理的命名。
完整性:功能测试,边界测试,负面测试。
三种错误处理方法:
1.返回值。eg:很多Windows API,返回为0正确,不为0对应各种错误。
缺点:不能把计算结果赋值给其他变量或作为参数传递给其他函数。
2.出错时设置全局变量。此时我们可以在返回值中传递计算结果。eg:Windows很多API运行出错后,会设置全局变量,可通过GetLastError分析错误的全局变量。
缺点:调用者容易忘记检查全局变量,调用出错时,很容易忘记做错误处理。留下安全隐患。
3.异常。函数运行出错抛异常。不同出错原因定义不同的异常类型。并且做相应的处理。c不支持,c#强烈推荐。
缺点:抛异常时候程序的执行会打乱正常的顺序,影响性能。
题目:实现函数double Power(double base,int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。
思路:用一个全局变量g_InvaildPut来表示出错时的情况,当g_InvaildPut为true时,返回0.0,表示出错。当exponent<0的时候absExponent=-exponent.
result=1.0/result;其中result的值通过double PowerWithExponent(double base,int exponent)返回。这个函数用到了一个公式如下:
#include<iostream>
using namespace std;
bool g_InvaildPut=false;
bool equal(double a,double b)
{
double c=a-b;
if(c<0.000000001&&c>-0.00000001)
{
return true;
}
else
return false;
}
double powerWithUnsignedExponent(double base, unsigned int exponent)
{
if(exponent==0)
return 1.0;
if(exponent==1)
return base;
double result=powerWithUnsignedExponent(base,exponent>>1);
result*=result;
if(exponent&1==1)
result*=base;
return result;
}
double Power(double base,int exponent)
{
if(equal(base,0.0)&&exponent<0)
{
g_InvaildPut=true;
return 0.0;
}
unsigned int absExponent=(unsigned int) exponent;
if(exponent<0)
absExponent=(unsigned int)(-exponent);
double result=powerWithUnsignedExponent(base,absExponent);
if(exponent<0)
result=1.0/result;
return result;
}
void main()
{
double p=Power(2,-7);
cout<<p<<endl;
}
Java代码:
public class BaseExponent { public boolean equal(double a,double b){ double c=a-b; if(c>-0.00000001&&c<0.00000001) return true; else return false; } public double powerWithExponent(double a, int exponent){ if(equal(a,0.0)&&exponent<0) return 0.0; if(exponent==0) return 1; if(exponent==1) return a; int absExponent=exponent; if(exponent<0) absExponent=-exponent; double result=powerWithExponent(a,absExponent>>1); result*=result; if((exponent&1)==1) result=result*a; if(exponent<0) result=1/result; return result; } public static void main(String[] args){ BaseExponent be=new BaseExponent(); double result=be.powerWithExponent(2,-3); System.out.println(result+" "); } }