尽管这可能会为您提供美味的意大利晚餐,但您想要了解的关于代码库的最后一件事就是意大利面。 您的代码就像一团意大利面条一样混乱的想法令人震惊,但是对于许多开发人员来说,这种想法是如此抽象,以至于他们无法完全理解(或理解如何避免或修复它)。 这就是为什么我们要在本文中深入研究意大利面条代码的实际含义,向您展示一些避免这种情况的最佳实践,以及(当确实发生时)如何处理它。
什么是意大利面代码?
意大利面代码是一场噩梦,事实就是如此。 就像我们上面所说的,the语一词的名称是因为,就像一团巨大的意大利面条意面一样,如果拉一根绳子(一段代码),它最终会纠缠在一起,直到另一根或全部纠结的碎片断裂。
例如,考虑一下 !重要 CSS中的属性。 它功能强大,可让设计人员覆盖继承的样式并控制任何特定元素,而无需重新编码整个样式表。 但是,当他们(或未来的开发人员和设计师)需要调整其他内容时,他们可能会添加另一个!important标签来覆盖前一个标签。 等等。 但是,如果您要返回并删除或更改该堆栈中的任何样式,则页面上的任何样式都可能会损坏。
我们正在努力避免这种情况。
避免意大利面条法典的最佳做法
1.制定编码标准
防止意大利面条式编码的第一种方法是在组织或项目中创建和编码标准。 编码标准使WordPress之类的项目成为可能。 成千上万的开发人员已经在WP Core上工作,但是 WordPress编码标准 做到了,使他们都在相同的准则下工作,并以相同的方式在相同的参数内执行任务。
编码标准只是您执行的规则。 它们使每个人的代码以相同的模式运行,从而易于发现和修复错误,并且将来的开发人员(甚至您或您的当前团队)可以准确地知道每行代码的工作效率。 如果Susan的代码未通过测试,则不会进入。如果Janine的代码没有要运行的测试,则拉取请求将被拒绝。 丹尼尔(Daniel)可能在最近的pull请求中没有使用div。 除非事态分解,否则不要合并。
同样,一些被意大利面条代码困扰的原始代码库是没有功能逻辑的较旧语言。 该代码不是基于功能的,因此,各种逻辑针对代码中的特定行。 对于小型项目,这并不难导航。 当您开始扩展项目时,直接引用特定文件和代码行会阻碍该开发。 文件可能会丢失,行可能会删除或编号错误。 对其进行调试以找出哪条意大利面条被拉动可能要花费数百个人工时。 拥有编码标准可以避免此类混乱情况的发生。
因此,通过制定标准,您可以非常有效地降低拥有意大利面条代码存储库的机会。 如果您想进一步了解编码标准, GeeksforGeeks有一个很好的指南。
2.遵循样式指南
除了编码标准,遵循样式指南还可以使您的代码不会过于混乱。 虽然听起来在理论上相似,但是两者却有很大不同。 开发人员遵循编码标准作为可执行规则,以保持代码有效运行。 这些可以随组织中的项目而变化,也可以随团队而变化。
但是,样式指南通常是根据每种语言编写的,提供了一系列使代码具有可读性和功能性的最佳实践。 例如, Airbnb创建了React.js的最佳样式指南之一 在那里。 如果您不是React开发人员,那意味着什么都没有。 但是对于React开发人员而言,研究一下可以为代码的结构和编写提供真正的帮助,以使将来的开发人员可以尽可能地对其进行排序。
与通用编码标准相比,样式指南不一定是可强制执行的规则。 他们的建议是使代码更加统一,从而使代码更易于阅读。 这可以防止产生意大利面条式代码,因为您可以准确地知道在任何给定时间要拉的是哪条线。
3.注释您的代码
代码注释可能是防止您的存储库被意大利面条式代码填充的最简单方法。 编写内容时,请对其做一个注释。 如果它是一个复杂的函数或代码段,请解释逻辑的作用及其重要性。
但是,您会遇到一些依靠代码注释来防止混乱的问题。 首先是它为项目增加了很多额外的时间。 当您忙于按时完成任务或确保某项功能正常工作时,写出详细说明并不总是先行考虑。 如果您开始发表评论并退出项目中期,或者下一个开发人员无法继续进行下去? 那是一盘意大利面。
其他人不满意注释代码的想法,或者 学习评论他们的代码 如果他们以前没有做过-由于数量庞大,他们会成长。 这是完全有效的。 但是,即使您偶尔在重要的(甚至不稳定的)台词或摘录上发表评论,您也将免于挽救某个人(可能是您自己)过去使用它的麻烦,试图弄清楚它的作用。
总结
我再说一遍,意大利面条代码是一场噩梦。 花费大量时间试图找出在巨大的存储库中更改了哪些代码行,这是成为开发人员最糟糕的部分之一。 调试正常。 调试并且不知道从哪里开始或什至是远程导致问题的原因。 但是,如果您的团队设置了编码标准,遵循了语言样式指南,甚至还制定了次要的代码注释政策,那么您的意大利面数字化平板很有可能比其他情况少得多。
您如何防止意大利面条代码?
Donnay Style / shutterstock.com的文章特色图片