干净代码是易于理解,易于使用和易于修改的代码。
您会知道,当您看到干净的代码时,因为它很容易使用,似乎直观而直接,漏洞很容易发现,并且即使在大型代码库中,也可以快速开发新功能。
那么,如何实现这一圣杯呢?
有许多书籍和文章提出了要遵循的规则才能实现“干净的代码”。这些规则包括声明性变量命名,小型纯函数,DRY(请勿重复),类长度,每个文件一个类等等的准则。但是,这些规则常常是矛盾的,更不用说引起争议了,而且有太多的规则使人们忘记它们几乎是不可避免的。
因此,这是所有规则的1条规则:
始终参考心智模型编写代码。
太好了,但是什么是心理模型?
假设您遇到了以前从未听说过的作家在桌上写的一本书。你知道怎么用这本书吗?当然可以!如果封面看起来很有趣,您将拿起它,并且知道将其翻到背面(这是您一生中从未见过的),那么您可能会觉得有点儿翻阅。您知道可以打开它,并且里面会有纸页。您知道应该从最外面的第一页开始,并逐页阅读。
那么,您如何知道如何与您从未见过的事物进行交互?答案是心理模型。
我们的大脑非常擅长于模式匹配,因此,当我们读一本书时,我们的大脑可以根据我们过去对书籍的所有以往经验来访问现有的心理模型。正是这种心理模型为我们提供了有关如何与我们面前的那本书互动的理论。
人类具有比任何其他动物更好的存储,模式匹配和检索复杂心理模型的能力,这为我们提供了相对的超级智能。但是,这也会使我们在生活和代码中误入歧途。
那么这对编写干净的代码有何帮助?
首先,请裸露我,我们需要再退一步,以便我们为心理模型建立正确的心理模型。那么元。
可以将心理模型视为对某事的知识的块。它具有形状和名称。形状和名称都是我们在世界上遇到模型时直接用来为其建立索引的对象。(实际上,形状可能是视觉,声音,气味或其他某种意义,但是对于此模型,只需将其视为容器即可)。
那么,心理模型容器的内部是什么?好吧,它包含有关构成事物理解的各个部分的所有知识。而且由于我们的大脑使用心理模型来表示知识,所以这意味着心理模型中的每个部分也是一个心理模型!
当我们遇到新的事物时,我们将采用此模型并将其用作我们面前特定事物的模板,并根据需要对其进行修改。
而且,当我们需要完成一项任务时,我们可以将这些心理模型串在一起,以产生关于如何解决它的新心理模型。
但是,有两点需要注意:
1.最初将正确的心理模型识别为模板可能是错误的,直到被某种交互完全弄糊涂时,您才知道它。
魔术,笑话和视错觉经常以轻松愉快的方式发挥作用,诱使您的大脑最初使用错误的心理模型,从而使趣味盎然。这可能很有趣,但是由于我们需要使用思维模型来解决问题,因此使用错误的思维模型还会导致编写代码时造成混乱,失败和缺乏信心。
2.一旦知道了特定事物或代码片段的思维模型,无论刚开始时有多直观,您都会相信它是合乎逻辑的。
心理模型实际上就是头脑中的逻辑,因此,如果在其中,那么您将看到其中的逻辑。但是从外面看,其他人不会。看起来不规则的形状不仅不直观,而且与其他心理模型也不十分吻合,这使它们更难以记住和解决问题。
请告诉我这与我的代码有何关系!?
好的,让我们回到规则:始终参考心智模型编写代码。那你该怎么做呢?
上面显示的心理模型看起来有点熟悉吗?这有帮助吗?
如您所见,变量,类和函数是思维模型!因此,我们的想法是尽可能地将它们写成与我们现有的思维模型相近。
为了让您开始思考,这里有一些代码示例!
创造事物时
遵循始终根据心智模型编写代码的规则,首先要做的是确定要参考的心智模型。您想代表什么?用户?注册吗?有通知吗?一本书?这不可避免地导致思考命名和代码结构!完善。
命名
命名可能是编写简洁代码中最重要的因素。
请记住,我们可以使用事物的形状和名称来确定要考虑的正确心理模型。在代码中,诸如对象,函数或类之类的形状通常隐藏在定义了该文件的另一个文件中,因此我们不得不更多地依赖于名称。(但是,静态类型的语言和良好的IDE可以帮助更广泛地识别形状)。
用什么词鼓励读者推断出最准确的代码。
user
,buyer
,seller
,owner
,creator
,和admin
所有可能的形状相似,但使用的名称传达什么读者会期望对象包含和被用于(可能是重要的)区别。
您可能会发现有时很难命名或名称中有一个and
。这表明您实际上可能混合了两个或多个思维模型。
定义代码结构
要考虑如何构建代码,请考虑要参考的思维模型。例如,假设您正在编写一个setupUser
函数。您希望该功能做什么?这是一个例子。
如您所见,该函数根据一些用户详细信息在服务器上创建一个用户,然后设置浏览器本地存储,设置通知首选项,最后返回用户。
改善此功能的一种方法是为函数命名createAndSetupUser
,但这意味着该函数引用了两个思维模型,而不是一个。更好的方法是将其分离。
尽管这可能还不够完美,但我们可以看到该代码的每个部分都以一种方式来命名和结构化,该方式一次引用一个思维模型,并且不会误导遇到该代码的下一个人。
修改事物时
经验丰富的开发人员通常会参考他们的“干净”思维模型来直观地编写新代码。而是在修改代码时犯下了各种罪行。这是因为它通常是另一个开发人员向其中添加一小部分,并且在本地级别上似乎是合乎逻辑的。
要在修改代码时始终参考心理模式来编写代码,必须花一点时间来了解最初的心理模型,并忠于于此!您可能需要在该函数中添加一行,但是从外部看,该函数现在可能包含一个等待发生的隐藏错误。
现在,假设在用户入职期间,您需要记录他们是否已查看并同意某些权限。最简单的方法(甚至可能是性能最高的方法)是将其直接添加到用户模型中
如果您不知道这些新属性,您是否会认为它们将成为用户的一部分?
更好的方法是考虑它们如何成为新的心理模型的一部分。例如UserPermissions
。
同样,这仍然可以根据用例进行改进,但是当您或其他人正在寻找用户已确认的权限时,应该更直观地访问数据和代码。而且,如果有人要添加更多用户权限,那么他们将有一个清晰的家-无需开会或讨论。
总是在参考思维模型的情况下编写代码,您会惊讶地发现确定什么是“干净代码”以及如何编写它是如此容易。
网友评论