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

作者: 读芯术 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. 注释掉代码

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

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

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

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

更多资讯推荐

MIT提出Liquid机器学习系统,可像液体一样适应动态变化

麻省理工学院(MIT)的研究者开发出了一种新型的神经网络,其不仅能在训练阶段学习,而且还能持续不断地适应。

机器之心 ·  3天前
规划智慧城市时,别忘了无障碍通行

要想成为一个智慧城市甚至一个智慧世界,虽然可能需要时间和有针对性的规划,但我们必须以人为本。

蒙光伟 ·  3天前
2021关于人工智能的五大趋势

数字化变革,比过去10年更多,这主要是由于远程工作的规模,以及企业迅速部署了必要的技术,尤其是与网络安全相关的技术。那,2021关于人工智能的五大趋势会是如何的呢?

Lichu ·  3天前
使数据中心更智能:人工智能如何发挥作用?

随着数据成为维持几乎所有业务运营以获取洞察力和业务成果的先决条件,数据中心正处于这种数字化转型的关键。

Cassie ·  3天前
IBM拟出售Watson Health后,AI医疗还能不能碰

医疗服务仍然是一块商业上尚未被完全发掘的市场,看病难/看病贵、医疗资源紧缺、医疗资源不平均等痛点问题长期存在,对应的市场空间理应是巨大的。而Watson Health作为IBM曾寄予厚望的业务方向,为何要在此时萌生退意?它的故事给业界带来哪些启发?眼下的AI医疗市场,究竟是一副什么样的局面呢?

物联传媒 ·  3天前
抛弃归一化,深度学习模型准确率却达到了前所未有的水平

我们知道,在传递给机器学习模型的数据中,我们需要对数据进行归一化(normalization)处理。

机器之心 ·  4天前
华人博士生首次尝试用两个Transformer构建一个GAN

最近,CV 研究者对 transformer 产生了极大的兴趣并取得了不少突破。这表明,transformer 有可能成为计算机视觉任务(如分类、检测和分割)的强大通用模型。

Yifan Jiang ·  4天前
无监督训练用堆叠自编码器是否落伍?ML博士对比了8个自编码器

柏林工业大学深度学习方向博士生 Tilman Krokotsch 在多项任务中对比了 8 种自编码器的性能。

Tilman Krokotsch ·  4天前
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载