在本文中,我们将确定四种编程结构,当您初次发现编程的工作原理时,即使相对基础,但忽略它们仍会拖慢您进阶的步伐。

01 抛却循环

循环是您在计算机编程专业中学习的第一批构造之一。一个简单的 while 循环演示了自动化的力量,您可以在其中重复执行一组指令,直到满足条件为止。
每当您看到项目集合时,您可能都会尝试使用 while 循环或 for 循环,但这很难成为最优解。
v2-32984d973318e1adaa5c144879f3f3bb_1440w.jpg
例如,给定一个对象数组,其中每个对象代表一个杂货。如果要打印每个杂货项目的名称,该怎么办?
v2-4176e8c857af435386fa87bba5c84944_1440w.jpg
这种 while 循环当然可以实现所需的功能,但是每次要抓取一件物品时,都必须跟踪索引以进入杂货数组。如果您忘记增加索引,也有进入无限循环的风险。
考虑以下替代方法:
v2-136c78da0964de1a396be9cabeb66ba8_1440w.jpg
forEach 是一个高阶函数,它将另一个函数作为参数,并对数组中的每个元素执行一次提供的函数。通过使用 forEach,我们删除了使用索引来跟踪和访问数组的多余代码,并记录了逻辑的内容 - 打印出每个杂货项目的名称。
while 和 for 循环通常太宽泛,无法捕获我们的代码的意图。如果要编写更好的代码,请首先使用功能更明确的函数替换循环。
以下是一些有关使列表变异和汇总列表的相关示例。
v2-f9d9b45e4c12365549c5e1a6b17fb5d3_1440w.jpg

02 抛却条件语句

每次添加 else 语句时,代码的复杂度都会增加两倍。if-else 和 switch 语句之类的条件构造是编程领域的基础块。但是,当您要编写简洁,可扩展的代码时,它们会妨碍您的工作。
幸运的是,有一些技巧可以摆脱条件限制。
数据结构
考虑以下用于计算折扣的函数:
v2-ed93a2aea6f99021aebe13359e923abd_1440w.jpg
每次要添加新的代码时,都必须在 switch 语句中添加新的案例。而且,如果您犯了一个错误,则会破坏整个计算。
现在,让我们将条件替换为对象。
v2-942782655dac63307eb203690cb74865_1440w.jpg
这种重写有效地将数据与核心计算逻辑解耦,从而更容易地独立修改它们。

多态性

替换条件的第二种方法是利用面向对象编程语言的一个关键功能 - 多态。
v2-4a7497c0ded55aee683194fe13e736bb_1440w.jpg
用于处理各种付款方式的代码行散布在 switch 语句中,使代码难以阅读。而且,如果要修改特定付款方式的逻辑,还会给人带来伤害,这是冒着破坏其他两个风险的风险,因为它们都属于同一功能。
v2-82b3dc725358d245dcc02276c34efc22_1440w.jpg
多态有助于我们打破冗长的 switch 语句。每个 Class 仅负责一种付款方式。
这里要注意的一件事是,即使我们成功地从重构代码中删除了条件语句,实际上,我们只是将选择付款方式的决定移到了上游。创建客户的人现在负责分配付款方式类。

03 抛却文字变量名称

编程教程中充斥着糟糕的变量和函数名,部分原因是代码示例通常不需要提供完整的上下文来说明其试图解释的任何要点。例如:
v2-852a023961d4faf035bc5f9db6dc7d79_1440w.jpg
该代码块很好地演示了 findIndex 的用法,但完全不适用于实际项目。变量名称没有告诉我们它们为什么存在。当我们对他们的服务目的一无所知时,对读者来说很难,甚至更难修改。
要写出更好的变量名字,我们必须从了解上下文开始。这里有一个常见的杂货店过道名称列表。过渡名称以有意义的方式排序,以便当我们使用给定的过渡名称调用该函数时,我们将返回其在此列表中的位置,代表过道编号。我们可以如下重写代码:
v2-39e0c937b4d06a23b9d723bdb0ee7df3_1440w.jpg
当您提出正确的变量名称时,它表明您真正掌握了代码要解决的问题的上下文。有目的的变量名将使您的代码从单纯的计算指令升级为用户指南,以帮助读者了解您的工作。

04 抛却 Global Scope

第一次学习编程时,您可能会从一个简单的 hello world 程序开始。然后,您将学习在单个文件中编写代码,并观察程序从上到下逐行执行代码。您永远不会怀疑在文件开头声明的变量在其他地方不可用。
您编写的所有内容的想法都存在于所有人都可以访问的全局空间中,这是有效使用抽象的障碍。您没有动力创建封装代码的抽象。

我的建议是忘记 Global Scope。将每个函数,对象和类都视为一个新的 Universe。专注于如何创建摘要来表示您的想法以及这些想法如何相互影响。

TLDR 原 则

  • 用高阶函数替换循环
  • 将条件替换为数据结构和多态
  • 用有目的的变量名替换文字变量名
  • 忘记 Global Scope

来源:京东云开发者