记宋宝华老师两天培训所得

本文记录了宋宝华老师关于代码设计的培训内容,强调了函数参数设计、异常处理、函数命名、注释原则、提交代码的注释规范、代码可读性、全局变量使用以及空间与时间的权衡。建议将布尔参数改为独立函数,异常参数应抛出异常,注释应解释为何而非如何,提交代码时注释需详细,代码注重可读性和高内聚低耦合,尽量避免全局变量,适时用空间换取时间效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司在11.1-11.2两天请来了宋宝华老师来为我们培训,虽然讲的都是基于C语言的有关Linux内核的知识,我听不太懂,不过一些设计相关的常识技巧还是挺适用的。用自己的语言理解记录一下。

1.函数参数类型是boolean的,改为两个函数

我经常会写出一个类似show(boolean isShow)函数,传入一个boolean类型的参数判断显示或者隐藏。

这样对于程序逻辑性来说并不好,函数名称既然叫show,那么这个函数就应该只做show的事,隐藏的事就再写一个hide()函数去完成。

如果非要传入boolean变量,可以把参数名改成showOrHide(boolean isShow)。在Android源码中也可以看到view.setEnabled(boolean enabled),我们知道传入一个值可以改变enabled属性,可是如果把函数名改成view.enabled(boolean enabled),会不会觉得很奇怪?既然函数名是enabled,为什么还可以传一个参数使得函数变成了完全相反功能的disabled。就是这个道理。

2.如果有异常参数,抛崩溃异常,而不是由函数内部处理。

我经常写函数的第一句话就是判断传入的参数是否为空,如果为空直接return;或者赋给一个缺省值。如果参数是int型的,还会判断是否小于0或者大于最大范围值,如果超过了值域范围,我还会“强行”把参数的值“拉回”正确的范围内。

这样其实是错误的处理方式!

如果出现异常数据,说明程序到这已经错了,应该尽早报告出来,哪怕是程序崩溃,所谓早死早超生。我们经常会遇到一个问题,崩溃的地方就是原因所在,也就是“所见即所得”,这样的问题一般很容易解决;我们有时候还会发现出问题的地方没有一点错误,即不是问题发生的地方,也就是“所见不是所得”。我们可以假设一下,前面运行了很多步,到了我们写的这个函数,已经出现了错误的参数,可是我们对异常的参数进行了强行转换,然后用正确范围的参数继续下面的步骤,这中间发生了很可怕的事有木有!就是不对接!

举个例子,就好像领导给了你一个文件让你给张三(通过了很多层传到你这了),文件名称是《To张三》。可是公司并没有张三这个人,你心里就琢磨,不可能给一个不存在的人发文件呀,后面没法传呀,但是你知道有个人叫张四,于是自己把名称改为了《To张四》,然后又往别的部门传。最后出状况了,前面有人不小心把《To张王》写成了《To张三》,而张王没有收到领导的文件,领导怪罪下来,罚了传文件的每一个人,可是问题在他们么?不在,问题在于你偷偷改了文件名,并且把错误的文件发下去了。而正确的做法我们应该抛出异常告诉领导,你给我的文件名字好像有点问题,是不是前面传递资料的时候有什么地方出了差错?

还需要注意一点就是异常处理和错误处理的差别。异常要抛出,而错误我们要有相应的处理措施。在写函数的时候,只有我们自己知道什么是异常,什么是错误。

我再举个例子,比如一个打开文件的函数openFile(path),内部我们判断如果找不到path路径,就抛出异常;而错误处理是我们在准备调用openFile(path)函数的时候,先调用isFileExist(path)来判断path是否存在,不存在在else中写错误处理逻辑。这样既保证了函数的单一性,又强化了逻辑性。

3.函数名字和所做事情要匹配

这个和第一点有点像,就是说你函数做了什么事,你函数名就要体现出做的事,如果做了两件事(比如”开”和”关”),就要有两个动词体现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值