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

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

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

image
图源:Unsplash

犯错乃人之常情。

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

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

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

1. 变量的非描述性命名

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

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

2. 幻数和字符串

image
图源: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. 代码格式混乱

image
图源:Unsplash

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

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

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

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

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

5. 硬编码

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

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

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

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

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

6. 注释掉代码

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

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

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

image
图源:Unsplash

祝大家避免雷区,代码愉悦~

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

原文发布时间:2020-01-30
本文作者:读芯术
本文来自:“读芯术”,了解相关信息可以关注“读芯术

相关文章
|
人工智能 运维 Linux
可移植性在Python中的优势
可移植性在Python中的优势
364 1
|
机器学习/深度学习 分布式计算 并行计算
MaxCompute-udf用于torch离线模型批量推理
odps-udf用于torch离线模型的批量推理实现以及踩坑
|
存储 安全 关系型数据库
CentOS7 如何离线安装PostgreSQL数据库
如果CentOS所在的服务器限于安全原因,客户并未给我们配置访问外网的权限,那么如何安装PostgreSQL数据库呢?本文将通过具体步骤来详细讲解如何在CentOS7 系统上离线安装PostgreSQL12数据库。
4616 0
CentOS7 如何离线安装PostgreSQL数据库
ly~
|
12月前
|
安全 生物认证 数据库
有哪些常见的身份验证错误和漏洞?
本文介绍了常见的网络安全问题,包括弱密码、密码重用、身份验证流程缺陷、会话管理问题和社会工程学攻击。具体涉及简单密码易被破解、多平台使用同一密码、缺乏多因素认证、身份验证绕过、会话劫持与固定、钓鱼攻击和伪装攻击等。这些问题可能导致用户信息泄露和系统安全风险。
ly~
1243 5
|
自然语言处理 算法 开发者
通义XR实验室文生3D模型开源,魔搭社区最佳实践来啦!
通义实验室XR实验室重磅开源文生3D新模型,能够从一句文本描述构建3D模型及对应纹理,目前已经在Github面向外界开源!与该项技术一起开源的,还有通义实验室推出的Text-to-ND(文本生成深度、法向图)、Text-to-ND-MV(文本生成多视角的深度、法向图)两个大模型。我们先来直观感受一下这两个大模型的魔法能力:
|
9月前
|
人工智能 算法 搜索推荐
云端问道11期方案教学-创建专属AI助手-阿里云百炼产品能力分享
阿里云百炼产品能力分享旨在帮助用户深入了解百炼的核心功能,并快速将大模型与系统结合。主要内容包括:1. 百炼的产品定位和能力简介,涵盖模型推理、应用搭建等;2. 知识检索RAG智能体的应用能力和优势,介绍其高效构建知识库的步骤及常见问题;3. 最佳落地案例实践,如宠物行业AI助手和产业分析类互联网企业的Copilot机器人。通过这些内容,用户可以全面掌握百炼在实际业务中的应用方法和效果。
299 0
|
开发工具 Android开发 git
Android实战之组件化中如何进行版本控制和依赖管理
本文介绍了 Git Submodules 的功能及其在组件化开发中的应用。Submodules 允许将一个 Git 仓库作为另一个仓库的子目录,有助于保持模块独立、代码重用和版本控制。虽然存在一些缺点,如增加复杂性和初始化时间,但通过最佳实践可以有效利用其优势。
161 3
|
存储 数据挖掘 关系型数据库
数仓学习---6、数据仓库概述、 数据仓库建模概述、维度建模理论之事实表、维度建模理论之维度表
数仓学习---6、数据仓库概述、 数据仓库建模概述、维度建模理论之事实表、维度建模理论之维度表
|
小程序 API 开发者
微信小程序授权登录流程以及应用到的API
微信小程序授权登录流程以及应用到的API
763 0
|
网络协议 安全 Unix
VSFTP超详细安装教程
VSFTP超详细安装教程