8评论

随笔:如何写出好的代码?

Mitty 2019-02-10 2.8k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏开发行业精英群711501594

近三个月的工作是对CP的项目进行二次开发,赶上最近的读书计划是设计模式相关的,也就想到了这个话题,这里结合我的经验来分享一些看法,时间有限,很难全面,后面想到会再补充上来

规范的命名规则,详细的注释,模块流程图,可供测试的代码

能够简短明确的表述其含义,就像翻译一样,其实是比较难的,英语不是我们的母语,一个好的命名需要认真仔细的思考,通过多读优秀的源码有助于我们更好的进行命名。

比如在使用对象池的时候,我要获取一个可用的对象,你可以使用GetXXX,因为从中文的角度是这样翻译过来的,但更好的命名是SpawnXXX,这就需要通过多读源代码来进行学习

注释,如果你写过的代码没有添加注释,不需要太久,可能1个月后,你再去看某一段没有注释的代码,可能就想不起来当时为什么要这么写,是为了解决什么问题,尤其是当你接手的是别人项目的时候,为了能够让
对方更快的熟悉代码,注释是非常关键且必要的,没有注释,或是注释不够明确,会增加代码的阅读难度,我在公司接手CP项目进行二次开发的时候,感受颇深,没有注释想搞懂一段代码,非常辛苦

所以,添加注释是必须的,方便自己也方便他人,不要嫌麻烦,自己写的代码更要加,需求总是变来变去,BUG也会层出不穷,你不知何时就得回查之前写过的代码,时间久了,就容易淡忘,如果英语表述得不够理想和明确,我们直接中文注释就好了,最好也加上日期并明确写出当时要解决的问题

模块流程图,如果再细腻一些,时序图也可以有,但通常,有流程图是必要的,同样,有流程图可以提高代码的阅读效率,方便我们更快的理解特定的模块,在接手二次开发的项目当中,因为加载部分的代码并没有流程图,那里就看了很久的时间,代码在不同的类之间来回的跳转,这里自己也要做好笔记,相当于自己花出一套代码的时序图,具象化的东西更有助于我们解决问题,比如项目当中,游戏加载地图时,要根据地图的名称进行加载,后来新添加一个模式以后,原有的代码就无法满足条件了,我就
新增了一个针对相关模式的地图变量,但在QA过程中,总会莫名其妙的
出现地图无法加载的情况,即错误的读取了原有的变量和新增的变量,
如果通过流程图,通过具象化去查看这个问题,就会很容易找出更有效的
解决方案。

所以,模块的流程图要画出来,必要时提供时序图,将关键的变量等做标记,通常我们不会去了解一个类的功能,而是与某个模块相关的一系列类,有流程图或时序图,都会极大的提高我们的效率,当然,也不是什么模块都需要流程图,一些核心的功能,复杂的模块是必不可少的

可供测试的代码,举个例子,在我们接手的这款项目中,我需要打开某些UI或使用某些道具等功能模块(注:游戏是基于Unity开发),CP都有提供测试代码,并不需要我们要去具体的功能点才能触发,在类中所有以[ContextMenu(“xxxx”)]特性定义的地方,均是CP提供的测试代码,这方便我直接去调用相应的接口,因为这些代码均提供的是测试数据,也有助于你理解不同的参数含义(良好注释是前提),在编辑器模式或是运行中,我可以随时的通过测试数据来测试这些模块功能,很方便,我印象深刻的一点是我要了解游戏中一处核心地图的生成,我需要知道核心管理
地图图块的代码,我就是通过CP提供的测试代码找到的,可以说是节省了大量的时间。

2.良好的架构设计

这里不讲复杂的全局架构,我们只说模块,其实上我们大部分人在做的就是模块的功能,当接手一个新的或是对已有的模块进行修改的时候,就会面临“设计”问题,就要解决类与类,对象与对象之间的交互。

从设计模式的角度,好的设计应该具备:

1.复用性
2.扩展性
3.灵活性
4.便于理解和移植

不针对每一点进行细讲,还包括设计模式里讲到一些几大原则,这些点,我认为是在解决“设计”问题的时候,贯穿整个周期的。比如你写的代码,如果添加或是修改一个新的功能,会影响到其它”无辜“的代码,这就破坏了原则,就需要重构进行更好的设计。

在”设计”的时候,有了这些规则标准,会帮助我们设计出更好的代码。

3.容错处理

这是最后一点,一代好的代码,应该能够处理各种异常或边界的情况,有时候输入的值并不总是正确的,就像递归一样,你没有终止条件就会栈溢出,我们设计的代码也是如此,涉及到引用,就要处理好空指针,数组,就需要防止越界,运算就要防止数值溢出,除0等异常,IO异常,文件不存在,参数不合法等等,都需要做好处理,并给出错误的详情日志

好的代码是在不断的迭代的过程中慢慢变好的,在我们使用的过程中,能够更有心的去处理他们,会极大提高我们的工作效率,万事万物皆有规则,无规不成方圆,更何况程序又是一门很严谨的设计呢

(说一些题外话,此时此刻,我正在北京清华长庚住院,说来话长,我在不到1个月的时间内要做2次全麻手术,明天早上就要做第2次全麻了,第2次要比第1次要复杂,2次全麻,2次不同的手术,全麻手术总是有风险的,当事人不管内心多坚强都还是会担忧,尤其是一些只能在术中去确认的问题,我想说的是,活着真的很美好,每天能够睁开眼睛,感受呼吸是一件很幸福的事儿,人生值得快乐值得感恩的时刻,远远要多于痛苦,生活上很多的压力,焦虑,那些让你不开心,解不开的的事儿,在这时候,都不算什么了,我其实很喜欢现在这种状态,向死而生,什么都不怕,也许明天我就不在了呢,但回顾过往,那个犹豫纠结,墨墨迹迹,没有勇气,不自信,胆小懦弱的人,反而辜负了一直很努力的自己,辜负了曾经那么美好的时光,辜负了能够感受呼吸的每一秒……

我相信我的手术会一切顺利,但我希望,我不再是以前那个让我瞧不起的自己,向死而生!

王欢 2019年2月10日 北京清华长庚医院9A20C

本文作者

Mitty

欢迎关注我的技术分享微信公众号:PaddingtonCoder (Paddington帕丁顿熊,很喜欢这个名字,第一次出国就是英国,很意外的机会,了解了一点英国的历史,知道了帕丁顿熊,看了帕丁顿熊的电影,来到了伦敦的帕丁顿地铁站,随处可见肥肥的鸽子总是抢镜......很有趣儿)

腾讯游戏学院公众号