函数是软件产品的细胞。如何写好一个命名规范,功能清晰,鲁棒性强的函数,是一个合格程序员的基本素养。
条例1: 一定要对非法输入做错误处理。
写函数最忌讳的就是不对非法输入做错误处理。调用malloc等可能出错的函数不判断返回值。这样的函数放到一个庞大复杂的系统中将是灾难。不是宕机就是出core或者各种错误的结果。曾经看过一篇文章,说是cpu感触的1纳秒,就相当于人类感触的1秒。一次宕机的时间,对于cpu来说,相当于一个文明的终结。
if判断,assert假设,都是很好的校验手段。
条例2:对各种边界情况做自测
自测花的时间,比如不自测导致返工的时间,要少的多。编程珠玑 里面就提到了脚手架测试方法。你可以注意到 leetcode 里面的习题 atoi 通过率是很低的。自己写一个经得起各种边界测试的 atoi 试试 ?
条例3:明确输入和输出的映射关系
函数的功能尽可能单一,这样才能保证函数的返回值简单可靠。system函数我觉得就是一个反例,因为你很难通过这个函数的返回值做进一步的错误处理。
条例4:将函数的复杂性往设计层面隐藏,函数实现要尽可能简短明了。
一个例子就是 编程之美 里面的 “1 的数目” 这个试题。咋一看,实现的代码很明了,虽然知道里面各变量正在做什么,但是不知道为什么要以这种流程去做。这就是将实现的功能原理给隐藏起来了,但是代码却简洁高效,不易出错。