2006/12/27

Err, Boolean, MemPtr

把函数的返回值设计成Boolean或者MemPtr在使用的时候是非常方便的。而且也容易理解,返回true就是成功或真, false就是失败或假。返回指针的时候,如果返回空指针就是失败了,如果是实指针就是需要的地址。

但是这两种情况就不能处理错误,除非使用C++的异常处理机制。如果把返回值设计成Err,那么错误终归是可以处理的,但是这样使用的时候不方便,而且需要处理多少错误也是个问题。

通常,私有函数可以偷偷懒,因为你很清楚这些函数在什么地方会被调用,可以约定参数都是有效的(看看参数的来源,不要有从公有函数传递过来的外部参数,否则就不能做这样的假定),这样可以用Boolean或者MemPtr这样易用的形式;但是对于公有函数,在写这个类的时候没法预料将来会怎样被调用,所以假定所有可能的参数比较好,考虑所有的错误发生情况并返回正确的错误信息。

如果用了Boolean或者MemPtr这样的形式,要看看函数内部资源失败的时候会有什么后果(比如Malloc),是否会导致数据不一致,包括内存对象和存储对象。如果会,那还是不要偷懒,否则因为小几率事件导致数据损坏的时候就追悔莫及了。

No comments: