全文共1960字,预计学习时长6分钟
图源:Unsplash
犯错乃人之常情。
然而,开发人员所犯的许多错误是可以避免的。如果能避免本文提到的这些常见错误,就能写出更好、更简洁的代码。
这不仅于自身有利,对那些需要查看代码的其他开发人员也有利。所以避开常见错误不仅仅是为自己——也是帮了团队一个大忙。
综上所述,小芯这次为大家整理了一系列应避免的常见错误:
1. 变量的非描述性命名
好的变量名称非常重要,再怎么强调也不为过。很多时候,你不是唯一一个项目开发人员,其他开发人员也需要了解你编写的代码。
选择好的名字需要时间,但可以节省更多的时间。
2. 幻数和字符串
图源:Unsplash
接着上文变量的非描述性命名,跳到下一项,该项关于不给变量赋值,也被称为幻数或魔法字符串。
维基百科定义:
幻数是唯一值,具有无法解释的意义且多次出现,可以而且应该被命名常量替换。
来看看下面的代码片段:
for ($i = 1; $i <= 52; $i++) { ...}
该例中的数字52就是一个幻数。没有人明白为什么有52这个数字及其代表什么。为什么是52?为什么不能是64?这些是一年中的星期总数吗?
更明晰的方法是:
$cardDeckSize = 52;for ($i = 1;$i <= $cardDeckSize; $i++) { ...}
现在每个人都会明白这是在循环一副纸牌。该代码给其他开发人员提供了语境。除此之外,更改数值更容易,因为值只在变量中存储一次,不会重复。
幻数经常在程序的不同位置多次使用,因此容易出错。
对于字符串来说也是如此,可采用同种方法:
if (userPasswordIsValid($user,"6yP4cZ".$password)) { ...}
6yP4cZ是什么?似乎非常随意。
$salt = "6yP4cZ";if(userPasswordIsValid($user, $salt.$password)) { ...}
啊哈,现在就说得通了!
3. 代码格式混乱
图源:Unsplash
混淆代码的格式通常是那些没有丰富编程经验的人才会犯的。如果问有着多年经验的开发人员,问他们是否认识一个测试人员或数据科学家混淆过代码格式,他们可能都会点头。这是由于缺乏经验——除非使用像Python这样的编程语言,可以避免很多此类失误。
解决格式混乱最常见的方法是使用linter(应用代码校验)。现代集成开发系统(IDEs)也都有可能解决这个问题。有时需要安装一个插件,有时也可以直接完成。
4. 在一个函数中进行太多内容
根据单一职责模式,一个函数只应负责做一件事,只有一件事。笔者看到过太多函数集结了获取、处理并呈现数据三个功能。把这个函数分开处理才是好的编程,一个函数获取数据,一个函数处理数据,另一个函数显示数据。
一个函数只关注一个内容之所以重要,是因为这能让其运行更稳健。比如说,从API(应用程序接口)中获取数据。如果API有变动——例如,出现了一个新版本——那么如果处理代码同属一个函数,那么处理代码过程中断的风险就会更大,这很可能会导致数据显示也被中断。
5. 硬编码
硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发行为,而不是从外部获取数据或在运行时生成数据。
硬编码的值不允许更改;它们是固定值。硬编码被看作是一种反模式,或者至少是意味着一种坏代码。
硬编码最多的东西,不管是什么(有时甚至有效)原因,都是密码和文件位置。
人们看到的很多硬编码密码场景是用于外部服务或API的身份验证。这些证书往往被硬编码,但并不是最佳做法。
如果发现自己硬编码了很多东西,真的应该仔细审视自己写的代码,因为大多数时候这都不是解决问题的最好方法。
6. 注释掉代码
人们看到过包含多个函数的代码块被注释掉。没人知道为什么它还在那里,而且没人知道这段代码是否还有意义。但是,没人会删除这段代码,而这是开发人员真正应该做的事情。之所以没人删除这段代码,是因为每个人都认为其他人可能会用到。
只需删除那段注释掉的代码即可。即使代码不在最新版本中,如果有人想使用,该代码仍然可以在版本控制中使用。
不过这只是笔者的个人看法。
图源:Unsplash
祝大家避免雷区,代码愉悦~
推荐阅读专题
留言 点赞 发个朋友圈
我们一起分享AI学习与发展的干货
编译组:刘露敏、余昊烨
相关链接:
https://medium.com/better-programming/common-coding-mistakes-you-should-avoid-441f9e51faea
如需转载,请后台留言,遵守转载规范
推荐文章阅读
ACL2018论文集50篇解读
EMNLP2017论文集28篇论文解读
2018年AI三大顶会中国学术成果全链接
ACL2017 论文集:34篇解读干货全在这里
10篇AAAI2017经典论文回顾
长按识别二维码可添加关注
读芯君爱你