如何遵循函数内部实现规则,提高函数质量?

提高程序的质量,可以在函数体的“入口处”和“出口处”从严把关。

规则1:在函数体的“入口处”,对参数的有效性进行检查。(很多程序的错误都是由非法参数引起的,我们应该充分理解并正确使用“断言”(assert)来防止此类错误)

规则2:在函数体的“出口处”,对return语句的正确性和效率进行检查。

如果函数有返回值return应注意如下事项:

(1)return语句不可返回指向“堆栈内存”的“指针”或者“引用”,因为该内存单元在函数体结束时被自动释放(不过可以指向存放在静态数据区的长量,如const char * char);

(2)搞清楚返回的究竟是“对象的值”、“对象的指针”,还是“对象的引用”;

(3)如果函数返回值是一个对象,要考虑return语句的效率。例如:

return String(s1 +s2);

这是临时对象的构造函数语法,表示“创建一个临时对象并返回它”。

String result(s1+s2);

return result;

而此两行代码与上述完全不同,此代码讲做三件事情:首先,result对象被创建,同时调用相应的构造函数完成初始化;然后,调用拷贝构造函数,把result拷贝到保存返回值 的外部存储单元中;最后,result在函数结束时被销毁(调用析构函数)。

而创建一个临时对象并返回它的过程则不同,编译器可以直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构的开销,提高了效率。

建议1:函数的功能要单一,函数体规模要小,尽量控制在50行代码内;

建议2:不仅要检查输入参数的有效性,还要检查通过其他途径进入函数体内的变量的有效性,例如全局变量、文件句柄等。

建议3:用于出错处理的返回值一定要清楚,让使用者不容易护士或误解错误情况。

建议4:尽量避免函数带有“记忆”功能。相同的输入应当产生相同的输出。带有“记忆”功能的函数,其行为可能是不可预测的,因为它的行为可能取决于某种“记忆状态”。这样的函数即不易于理解又不利于测试和维护。在C++/C语言中,函数的static局部变量时函数的“记忆”存储器。建议尽量少用static局部变量,除非必须,例如,static局部变量可以实现。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值