当前位置: 首页 > 科技观察

垃圾代码和好代码的区别?

时间:2023-03-14 11:02:10 科技观察

重构几个业务场景的例子请求的顺序取决于在这个场景中,首先,业务的复杂度决定了代码的复杂度。首先我们看一个简单的例子,在前端和node中都有可能出现:我们有四个请求数据的函数A、B、C、D(由函数本身实现),C依赖于B的结果,而D依赖于ABC最终输出D的结果。错误示例虽然这段代码是故意写成这样的,但确实有一些初学者看到过。这段代码还是可以给出正确的结果,但是写法丑陋,回调地狱。如果后面人家不重构,还有request依赖,就得继续嵌套回调。性能太差以至于没有考虑到A和B其实是可以并发的。这里简单介绍一下最原始的callback...中间可以回顾整个ES2015+,callback(async.js)-->Promise-->generator+co-->async+await的演变过程.其实就是不断简化和增强我们从原生语法层面控制异步的能力。下面是直接为当前阶段提供的最终解决方案:基于Promise+async/await的正确例子,我们重新思考了上面的问题,理清了逻辑顺序的依赖。并使用最新的语法。使用Promise.all结合async/await的形式,兼顾了并发和序列化,写法简洁,实现了例子要求下最快的解决方案。解决了无限嵌套的问题。这是语言进化本身带给我们的一种优化。但不仅如此。我们对问题进行分类,将具有依赖顺序的B和C的请求分离到单独的函数中。让他们处理自己的逻辑。我们稍后会回到这一点。折磨人的ifelse可能会出现以下一些问题。过多的嵌套逻辑处理冗余。无防御性编程(错误处理直接自带代码示例,这是获取背景色的方法,但是随着业务的不断变化,背景色的来源越来越多,处理下可能是这样的部分业务人员:错误示例认为,上面的代码让你阅读起来极其痛苦,基本不可能一眼就知道你最终会进入哪个分支,因此,基于以下两个原则,进行合理的抽取intoafunctionerrorpriorityreturn有重构的基本版本:正确的例子可以看到整个逻辑,已经重构。拆分成三个函数,子方法分别处理对应层级的逻辑,一个主方法负责调度。整个事情一目了然。当然,我们按照上面的原则重构之后,这段代码有没有问题呢?当然有。可以看到我们三个函数都依赖全局变量。函数本身是不纯的。如果是全局问题,还是不好排查。我们可以把它修改成一个纯函数,让这段代码更容易理解和测试。以修改一个函数为例:我们把全局变量变成了一个参数,调用的时候只需要传入全局变量,但是这样,我们得到的是一个纯函数。为什么要在这里强调这一点呢?事实上,函数式编程中最基本的问题之一就是纯函数。只有这样才能观察到输入和输出,有输入必有输出。只有这样,系统中的不纯函数才能越来越少。使代码更易于测试。当然,如果我们从重构的角度去思考,还需要注意这一点:这里的逻辑会将最后匹配到的数据设置为bgColor。(我们都知道findindexOf之类的过去基本匹配)真的是业务需求吗?可以看出,编写/重构业务代码的过程其实是对业务逻辑和业务理解的又一次提升。无论是抽离成一个函数,还是错误优先返回的设计,这其实都可以解决这样一个问题:在不了解全局的情况下,了解某个区域的详细逻辑,让代码易于理解和修改。...这里的代码即使经过这样的重构,仍然还有进一步优化的空间,比如函数和参数的命名,完整的测试用例等,受限于文章篇幅,不再赘述暂时。部分代码可能存在的其他问题1、逻辑耦合在视图层。a==='a'&&b==='b'&&c==='c'&&d==='d'?

...
:null2.组件复用,功能复用,无封装,代码重复。3、功能不单一,一个功能承担的职责太多。这些职责没有任何关系,但它们都耦合在同一个块中。4.参数列表混乱,有防御性编程,不处理任何错误(接口错误,超时,重复提交等。5.幻数,幻串,没有描述。6.糟糕的数据结构/糟糕的命名(其实上面具体的代码例子也是有的)关于优化代码的思想准备,首先,为什么说要优化代码呢?技术追求。公司要求有系统在线使用。有用户在用,写不好吃亏的其实是我。团队合作,我写不好,其他组员也写不好。恶性循环是受苦的人。快速迭代。系统需要不断增加新的功能。您必须编写好的代码才能做到这一点。别人的看法,我怕别人会觉得我技术能力差...xxxx...那么就会有以下要求:容易理解系统架构容易理解系统生命周期和执行过程容易理解理解每个函数的作用容易理解函数是如何被调用和传递(输入和输出)容易理解变量的意义和表达式的意义。易于扩展......实际上回到编写应该干净、易于理解/修改/测试的代码。(其实这里大部分时候,一个人协作是有条件的,所以需要把代码写好,但是不要过度封装,让团队其他成员看不懂(当然,如果有些人没有足够的经验,那么是他自己的问题需要自己加强。))一些建议,以更清楚地了解业务并思考可能的变化。做之前想清楚,设计清楚。查看一些开源项目和行业中的最佳实践,了解什么是好代码,什么是坏代码。该机构明白,虽然代码是供计算机运行的,但它最终是由人类阅读的。这不仅仅是无错误的心智模型。建立业务与代码质量同等重要的思维模型。避免因为时间原因必须以这种方式编写的代码。理解codereview本身或许可以发现并指出一些问题,但是最终的实现还是要看你自己,不能变成一个形式,需要融入到你自己的思维中。使用错误优先原则。尽量让错误先返回,这样你以后会得到干净的代码。(写代码的时候不仅要考虑正向判断,还要考虑反向判断)合理拆分成独立的函数。明确函数内部对输入输出的处理、错误处理等。(比如某些场景下确实会有大量的逻辑判断,首先要考虑判断里面的语句是否可以分类拆分出来。)对于多个状态的判断和组合,可以使用结合状态表(映射表)状态机等模式学习设计模式和重构等相关知识。重构!!一旦你认为这个地方有问题,就不要等到后来。然后通常再也不会了。结束说到这里感觉像是突然结束了。在本文中,我们首先通过两个具体的优化代码示例作为介绍,让大家了解一些业务代码优化思路。列出了其他一些可能出现的错误,以及优化代码的思想准备和理论指导。其实就是希望大家能够在业务中发现问题,然后思考如何解决问题。说了这么多,能不能把代码写好就看你自己了~