应避免的常见编程缺陷

人们天生就容易犯错误。 但是,可以避免许多开发人员特有的缺点。 如果程序员能够摆脱本文将要讨论的常见错误,那么他将能够编写更好,更简洁的代码。



消除代码中的缺陷不仅有益于消除这些缺陷的人,也有益于那些必须阅读此代码的程序员。 结果,我们可以说,团队合作并努力改进其代码的人不仅为自己,而且为与他们一起工作的人这样做。

这是程序员应避免的一些常见缺陷。

1.函数中的动作过多


根据唯一责任原则,职能应仅对任何一项操作的执行负责。 而且这应该只是一项操作。 我看到太多的功能可以执行某些数据的加载,处理和表示。 据信,这种动作的执行最好在几个功能之间分配。 一个功能加载数据,另一功能加载数据,第三功能负责其表示。

之所以写专注于解决单个问题的功能之所以重要,是因为这种方法使代码更可靠。 假设在上述情况下,数据是从某个API加载的。 如果此API发生更改,例如,如果发布了新版本,则很可能整个功能将停止工作。 加载数据的代码将加载错误的内容,这将影响数据的处理和表示。 要解决该问题,您首先必须找到它,找出失败的原因,然后编辑一个大型函数的代码。 如果将数据的加载,处理和表示划分为多个功能,则解决此类问题将更加容易。

2.项目已注释代码


每个人都看到了该代码,其中包括包含某些功能的大片段被注释掉了。 但是,没人知道为什么这些片段仍然没有从代码库中删除。 如果没有注释,没人知道这些代码是否会起作用。 但是同时它们不会被删除。 并且您需要删除它们。 该代码污染项目的原因是,每个人都建议有人可能需要此代码。

此类代码片段应简单删除。 而且,如果在最新版本的代码中不存在这些远程片段,而同时又有人真正需要它们,则可以在版本控制系统中找到它们。 我注意到这只是我对这个问题的看法。

3.错误的变量名


有一次我写了一篇文章 ,介绍选择良好变量名称的简单规则。 定性变量名称非常重要。 事实是程序员通常不会单独处理项目。 他们的同事需要了解他们编写的代码。 友好的变量名有助于改善对他人代码的理解。

我重复上述材料中的内容:“选择好的变量名需要花费时间,但是节省的时间却要多得多。”

4.“魔术数字”和字符串


如果继续讨论晦涩的变量名问题,我们可以想到在程序中使用某些值,“幻数”或根本没有名字且没有写入任何变量的字符串的想法。

您可以从Wikipedia上了解到,当在源文本中找到数值时,“幻数”被称为不良编程习惯,而其含义并不明显。

看下面的代码示例:

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)) {    ... } 

但是现在,一切都变得更加清晰了。

5.不正确的代码格式


对于新手程序员而言,不整洁的代码格式是一个“疾病”。 当被问到他们是否认识到测试人员或数据科学家对代码的格式不正确时,许多有一定经验的开发人员倾向于表示赞同。 原因是缺乏经验。 唯一的例外是那些使用Python之类的语言的程序员,在这种语言中,代码的格式会影响程序的执行。

解决此问题的最常用方法之一是使用短绒。 此外,所有现代IDE都支持自动格式化代码的功能。 有时,此功能是通过您需要自行安装的插件来实现的,而有时,它会包含在标准IDE功能中。

6.在代码中硬编码的值


如果将值硬编码到程序中,则意味着数据直接嵌入到源代码或其他类似对象中。 这种方法的反义是从外部源获取数据或在程序执行期间生成数据。

硬设置的值不允许轻易配置程序。 可以说,它们“刻在石头上”。 这被认为是反模式,或者至少表明代码中存在明显的问题。

通常,密码和文件路径是硬编码的。 他们这样做的原因有很多,有时甚至可以证明是合理的。

例如,在一些负责对外部服务或API进行身份验证的代码示例中,可以看到许多硬编码值。 最好不要这样做。

如果有人注意到经常使用硬编码的值,那么他应该批判性地评估他的工作。 事实是,通常使用此类值并不是解决某些问题的最佳方法。

亲爱的读者们! 您在代码中遇到什么缺点?

Source: https://habr.com/ru/post/zh-CN483680/


All Articles