【云驻共创】你不知道的代码之美
代码如字
为什么说需要好代码,正所谓字如其人。古人云见字如面,一个人的字好不好看,在一定程度上反映了一个人的形象,。如下图,当你没有看到真人时,看到他字的第一眼,就会给你留下不好的印象。对于程序员来说,写代码就是在写字,代码的格式是否规范,是否易读,这一定程度上反映了一个程序员的代码水平,一段易读的代码,能够让团队人员一眼就能够读懂,给项目开发节约时间,降低成本。
下图的代码用了很多if嵌套,很难很快的分析清楚,并且后期如果需要修改,也会是比较麻烦的,就像右图胖胖的老虎,代码易读性差,很难维护。
理想很美好,现实很骨感。有时候设想中的写出项目代码就像左边的凉亭,看上去是如此的优美,而现实中一些项目完成后,却如右图中的凉亭一样,毫无优美可言。后期对它进行维护、完善也是很难的。
书同文车同轨
秦始皇统一七国之前,各国的文字都是不一样的,货币也不一样,阻碍各国之间的交流,影响文化和经济的发展,统一后,统一文字和货币,发展迅速。代码也是这样,每个人如果都坚持自己的代码风格,那么团队之间相互交流就会产生影响,别人就很难读懂,只有团队内部达成一致,才能够更方便的进行交流,提高效率。
代码风格统一分为目录风格统一、命名风格统一、注释风格统一和异常处理风格统一。
目录为工程目录,一个项目不能把所有的代码都放在一个文件里,这样会很影响代码的阅读。并且有些代码可能会被经常使用,因此需要对代码分类放置,比如common文件,可以放置会被经常调用的代码。基本上团队内部都会有统一的工程目录格式。
命名统一包括变量名和常量名。常用的命名方式分为大驼峰、小驼峰和蛇形命名。大驼峰指的是每个单词的首字母都要大写,基本用来写类名和接口的命名。小驼峰指的是除了第一个单词的首字母要小写外,其他的首字母都要大写,一般用来变量名和函数名的书写。蛇形命名指的是单词和单词之间用下划线间隔开,经常用在python爬虫行业使用。
起名意图没有表明清楚是常见的错误起名现象,有些函数名或者变量名不能让人直观理解,还有一些的起名,有限定条件,会受限。比如name_list,这个变量命名意思是可以接受姓名列表,但是后期传进来个元组的类型,算法要求也能运行,那么这个命名方式就不是很合适,所以具体的命名方式还要根据实际应用场景来定。函数名一般使用动词来表示,类名一般采用名词来命名。
注释的作用不言而喻,在函数开始前用注释写明每个参数的含义,其次还有函数的功能,也要做相应的描述,每个函数都应该加个注释,因为程序员的水平不一样,注释就是为了把函数的意图和功能描述清楚。
在进行异常处理时,有可能需要打印日志或者跳转到上面,只有风格统一,别人才能很轻松读懂,明白你的代码表示意图。
高屋建瓴
面向业务编程,代码会基本上会集中分析问题,然后进行代码编写,完成之后测试整理上线。这样的流程导致没有经过架构、模式设计之间编写代码,代码体现的没有条理,后期项目维护会很困难。
我们推荐下图的操作流程,拿到需求分析完后,根据分析得到的信息设计合适的架构、选择合适的模式、兼顾稳定性、可扩展性。整体架构的设计,可以帮助我们对于项目整体把握,代码编写,才不会显得比较乱,做好设计,方可编写代码。
写代码时,遵循一些规则能够让你的代码看上去更加友好、可读。
单一职责原则,把一个复杂函数,按照功能拆分成多个单一功能的简单函数,这样如果某个功能出现了问题,可以直接定义到相关的函数,对功能进行修改,而无需对其他的代码进行修改,有利于后期的维护。如果一个函数包含所有功能,后期阅读、修改会相当麻烦,甚至可能需要从头读到尾。
开放封闭原则,把功能封装到接口,使用时直接调用,这样可以有利于代码的整洁与规范。
用例图来绘制项目的流程和实践,通过用例图来进行绘制,我们可以能够建立良好的一个框架,一个良好用例图可以帮助我们对项目有整体的把握。它是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。
其次还要注意的时,引用库要分层,如果将库罗列在一起,很难让阅读者分不清这个其中的关系,难以阅读。注释应该放在函数里面,不要放在函数的外面比如函数名的上面。
兵马未动,粮草先行
在进行面向接口编程时,双方应该先约定好输入输出,以及设计到的数据类型,正所谓高屋建瓴,自上而下,先设计好相关的模式和架构,只有有个整体架构,我们才能在此之上进行具体代码的编写。
写的好的代码可以规避很多问题,减少程序员之间因为读不懂代码而进行的不必要的交流和讨论,节约时间,有利于缩短项目开发周期。
通过责任链,我们可以对文章开头提到的多个if嵌套的问题,我们可以设计多个链条,将它们通过链条连接,根据条件可以与不同的链条进行连接。
总之,一个良好代码书写习惯的养成不是一朝一夕,需要不断的练习,不断的发现问题,解决问题,才能提高自己的代码书写水平。
- 点赞
- 收藏
- 关注作者
评论(0)