常见的编码错误,再不避免就完了

作者: 读芯术 2020-01-30 18:00:18

 犯错乃人之常情。

然而,开发人员所犯的许多错误是可以避免的。如果能避免本文提到的这些常见错误,就能写出更好、更简洁的代码。

这不仅于自身有利,对那些需要查看代码的其他开发人员也有利。所以避开常见错误不仅仅是为自己——也是帮了团队一个大忙。

综上所述,小芯这次为大家整理了一系列应避免的常见错误:

1. 变量的非描述性命名

好的变量名称非常重要,再怎么强调也不为过。很多时候,你不是唯一一个项目开发人员,其他开发人员也需要了解你编写的代码。

选择好的名字需要时间,但可以节省更多的时间。

2. 幻数和字符串

接着上文变量的非描述性命名,跳到下一项,该项关于不给变量赋值,也被称为幻数或魔法字符串。

维基百科定义:

幻数是唯一值,具有无法解释的意义且多次出现,可以而且应该被命名常量替换。

来看看下面的代码片段:

  1. for ($i = 1; $i <= 52; $i++) { 
  2.  
  3. ... 
  4.  

该例中的数字52就是一个幻数。没有人明白为什么有52这个数字及其代表什么。为什么是52?为什么不能是64?这些是一年中的星期总数吗?

更明晰的方法是:

  1. $cardDeckSize = 52;for ($i = 1;$i <= $cardDeckSize; $i++) { 
  2.  
  3. ... 
  4.  

现在每个人都会明白这是在循环一副纸牌。该代码给其他开发人员提供了语境。除此之外,更改数值更容易,因为值只在变量中存储一次,不会重复。

幻数经常在程序的不同位置多次使用,因此容易出错。

对于字符串来说也是如此,可采用同种方法:

  1. if (userPasswordIsValid($user,"6yP4cZ".$password)) { 
  2.  
  3. ... 
  4.  

6yP4cZ是什么?似乎非常随意。

  1. $salt = "6yP4cZ";if(userPasswordIsValid($user, $salt.$password)) { 
  2.  
  3. ... 
  4.  

啊哈,现在就说得通了!

3. 代码格式混乱

混淆代码的格式通常是那些没有丰富编程经验的人才会犯的。如果问有着多年经验的开发人员,问他们是否认识一个测试人员或数据科学家混淆过代码格式,他们可能都会点头。这是由于缺乏经验——除非使用像Python这样的编程语言,可以避免很多此类失误。

解决格式混乱最常见的方法是使用linter(应用代码校验)。现代集成开发系统(IDEs)也都有可能解决这个问题。有时需要安装一个插件,有时也可以直接完成。

4. 在一个函数中进行太多内容

根据单一职责模式,一个函数只应负责做一件事,只有一件事。笔者看到过太多函数集结了获取、处理并呈现数据三个功能。把这个函数分开处理才是好的编程,一个函数获取数据,一个函数处理数据,另一个函数显示数据。

一个函数只关注一个内容之所以重要,是因为这能让其运行更稳健。比如说,从API(应用程序接口)中获取数据。如果API有变动——例如,出现了一个新版本——那么如果处理代码同属一个函数,那么处理代码过程中断的风险就会更大,这很可能会导致数据显示也被中断。

5. 硬编码

硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发行为,而不是从外部获取数据或在运行时生成数据。

硬编码的值不允许更改;它们是固定值。硬编码被看作是一种反模式,或者至少是意味着一种坏代码。

硬编码最多的东西,不管是什么(有时甚至有效)原因,都是密码和文件位置。

人们看到的很多硬编码密码场景是用于外部服务或API的身份验证。这些证书往往被硬编码,但并不是很好的做法。

如果发现自己硬编码了很多东西,真的应该仔细审视自己写的代码,因为大多数时候这都不是解决问题的好方法。

6. 注释掉代码

人们看到过包含多个函数的代码块被注释掉。没人知道为什么它还在那里,而且没人知道这段代码是否还有意义。但是,没人会删除这段代码,而这是开发人员真正应该做的事情。之所以没人删除这段代码,是因为每个人都认为其他人可能会用到。

只需删除那段注释掉的代码即可。即使代码不在新的版本中,如果有人想使用,该代码仍然可以在版本控制中使用。

不过这只是笔者的个人看法。

编程语言 软件 人工智能
上一篇:重大疫情面前,机器人能够做什么? 下一篇:别再认为人工智能是金融行业的旁观者
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

四种使用物联网和人工智能加速获取价值的有效方法

最近,话题转向企业如何才能更快,更有效地获取和利用物联网计划的见解。物联网和人工智能的结合为企业实现这一预期成果提供了途径。实际上,这两种技术是相辅相成的,应该紧密相连。

佚名 ·  1天前
AIoT:漫谈

什么是AIoT,它能做什么?这些就是我们今天这篇文章要解决的问题。

iothome ·  1天前
干货!从0到1教你打造一个令人上瘾的聊天机器人?

几千年来,我们一直都是直接通过对话来解决问题的。聊天机器人(Chatbots)的出现实际上是回归到了最简单的岁月。

火火酱 ·  2天前
治愈大脑,人机共生,马斯克为“脑机接口”辩护

随着今年年初特斯拉中国工厂正式开始交付特斯拉 model3 型号电动汽车,特斯拉的股值不断飙升,与此同时特斯拉和马斯克也在新闻媒体上赚足了眼球。

学术君 ·  2天前
英伟达将展示6款机器人:真人大小,力举千斤……

除了显卡之外,老黄近几年也越来越关注AI与机器人,在下月举行的GTC 2020上,英伟达宣布将至少展示6款机器人,它们高矮胖瘦各不同,具备不同的功能。

佚名 ·  2天前
戴口罩难以刷脸支付 刷手行不行?

人工智能技术日益深入生活的同时,公众的隐私担忧也越来越甚。人脸作为生物识别特征数据的一种,与其他识别方式相比具有更容易暴露、难以更改的特性,公众对相关的收集使用活动就更为敏感。那么,有没有其他支付方式?

佚名 ·  2天前
从TensorFlow到Theano:横向对比七大深度学习框架

最近,来自数据科学公司 Silicon Valley Data Science 的数据工程师 Matt Rubashkin(UC Berkeley 博士)为我们带来了深度学习 7 种流行框架的深度横向对比,希望本文能对你带来帮助。

AI小师弟 ·  2天前
AI驱动的网络安全团队致力于人类强化

在很多其他行业,流程自动化和AI预示着工作机会的减少,但与之不同的是,威胁情报的未来是强化人类,而不是取代人类。在这方面,我们的研究发现以下三个主要原因。

邹铮 ·  2天前
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载