垃圾代码和优质代码的区别?

简介: 请求顺序依赖在这种场景中,首先还是业务的复杂度决定了代码的复杂度。首先我们来看一个在前端和node都有可能出现的一个简单的例子:我们有 A, B, C, D 四个请求获取数据的函数(函数自己实现), C 依赖 B 的结果,D 依赖 ABC 的结果,最终输出 D 的结果。

几个业务场景中的重构示例

请求顺序依赖

在这种场景中,首先还是业务的复杂度决定了代码的复杂度。首先我们来看一个在前端和node都有可能出现的一个简单的例子:


我们有 A, B, C, D 四个请求获取数据的函数(函数自己实现), C 依赖 B 的结果,D 依赖 ABC 的结果,最终输出 D 的结果。


错误示例

image.png


虽然这个代码是故意写成这样的,不过确实也有在一些初学者身上看到过。这份代码还是能正确给出结果的,但是写法丑陋,回调地狱。如果后来人不进行重构,还有请求依赖,得继续回调嵌套。性能太差,没有考虑 A 和 B 实际上是可以并发的。


这里介绍了一下最原始的 callback ... 中间大家可以去回顾一下 整个 ES2015+ ,callback (async.js) --> Promise --> generator + co --> async + await 的进化过程。其实是从原生的语法层面不断去简化和增强我们对于异步的控制能力。


下面直接给目前阶段原生提供的终极方案:基于 Promise + async/await


正确示例

image.png


我们重新思考了一下上面的问题,理清楚了逻辑顺序的依赖。并且用最新的语法。


使用 Promise.all 结合 async/await 的形式,考虑了并发和串行,写法简洁,达到了在示例要求下的最快方案。解决了无限嵌套的问题。这是跟随语言进化本身带给我们可以进行的优化。


但又不仅仅如此。我们将问题进行归类 将 B,C 有依赖顺序的请求,抽离出单独的函数。让他们去处理自身的逻辑。这个点我们稍后再提。


折磨人的 if else

可能存在下面一些问题


过多的嵌套

逻辑处理冗余

没有做好防御编程(错误处理

直接来一个代码例子,这是一个获取背景颜色的方法,但是随着业务的不断变化,背景颜色的来源越来越多,在一些业务人员的处理下可能是这样的:


错误示例

image.png


相信你在读上面的代码的时候是极为痛苦的,想要一目了然的知道最终会进入哪个分支,基本不可能。于是基于下面两个原则


合理的抽取成函数

错误优先返回

有了一个基础版本的重构:


正确示例


image.png

可以看到整个逻辑,经过了重新梳理。拆分成了三个函数,子方法分别去处理对应层级的逻辑,由一个主方法负责调度。整体都变得一目了然了。


当然,在我们基于上面的原则进行重构之后,这个代码有没有问题呢?当然有。可以看到我们这三个函数,都依赖了全局变量。函数本身就不纯了。如果是全局的问题,还是不易于排查。


我们可以将其修改为纯函数,让这一份代码易于理解和测试。


以一个函数的修改为示例:我们将 全局变量变成了参数,只需要在调用的时候,将全局变量传入即可,但是这样,我们得到了一个纯函数。


image.png


为什么会在这里特别强调这个点呢,其实在函数式编程中的一个最基础的问题那就是纯函数。只有这样输入输出才是可被观测的,一个输入一定会有一个输出。也只有通过这样的方式,才能让系统中非纯的函数越来越少。让代码变得更易于测试。


当然作为我们如果以重构的角度去思考的话,我们还需要关注到这个点:


image.png


这里的逻辑会将会 最后一个被匹配到的数据,设置为 bgColor 。(我们都知道 find indexOf 等基本都是从前匹配。)是否真的是业务的需求呢?


可以看到将业务代码写好/重构的过程中其实也是对业务逻辑和业务理解的再一次提升。不论是抽取成函数还是错误优先返回的设计,这其实也都是可以解决这样一个问题:能在不去读懂全局的情况下,了解某一个区域的细节逻辑,也就做到了让代码易于理解和修改。


... 这里的代码即便是经过这样的重构后,依然有可以考虑进一步优化的空间,比如函数与参数的命名,完整的测试用例等等,受限于文章篇幅,暂不展开说明。


一些代码中可能存在的其他问题

逻辑耦合在视图层。


a === 'a' && b ==='b' && c==='c' && d ==='d'?

...

:null


组件复用,函数复用,不封装,代码重复。


函数功能不单一,一个函数处理太多职责。且这些职责没有任何关联,但是都耦合在同一个区块内。


参数列表混乱,有做好防御编程,不处理错误(接口错误,超时,重复提交等等


魔法数字,魔法字符串,且没说明。


糟糕数据结构 / 糟糕命名 (其实上面的具体代码示例也存在)


关于优化代码的思想准备

首先来说一下为什么会说需要优化代码?


技术追求。

公司要求,线上有系统在用。有用户在用,不写好出问题实际上苦的还是自己。

团队协作,我不好好写,团队成员其他人也不好好写,恶性循环苦的还是自己。

快速迭代。系统需要不断的增加新功能。必须要写好代码才能做到。

其他人的看法,怕别人觉得自己技术能力差... xxxx....

那么就会有下面这些要求:


易于理解系统的架构

易于理解系统的生命周期与执行流程

易于理解每一个函数的作用

易于理解函数之间是如何调用与传递的(输入输出)

易于理解变量的含义,表达式的含义。

易于扩展...

最终实际上又回到了写出来的代码应该是 整洁的代码,要使代码易于理解/修改/测试。(这里其实大部分时候,都隐含了一个人员协作的条件在里面,所以,既要写好代码,又不能过度封装,让团队其他成员看不懂(当然如果确实有些人经验不够,那么是他自身的问题,需要他自己去加强。))


一些建议

更加清晰的去了解业务,去思考可能的变化。思考和设计清楚再动手。

看一些开源项目与业界最佳实践,明白什么样的是好代码,什么样的是不好的代码。

建立明白代码虽然是给计算机运行的,但最终还是人看的。不仅仅是没有 bug 就行了,这样的心智模型。

建立业务与代码质量同等重要的思考模型。避免因为时间导致的不得不这么写的代码。

明白 code review 本身可能能发现和指出来一些问题,但最终的落实还的靠自己,不能变成形式,而是需要融合成自身的思考。

使用错误优先原则。尽可能的让出错的先返回, 这样后面就会得到干净的代码。(写代码的时候,不仅仅正向,反向的判断也需要思考)

合理的拆分成独立的函数。明确输入输出,错误处理等在函数内部的处理。(比如在一些场景中确实会存在大量逻辑判断,首先就要思考在判断内部的语句是否能被归类与拆分出去)

对于多种状态的判断与组合,可以使用 组合状态表 (map表)状态机等模式

学习设计模式与重构等相关知识。

重构!!只要你觉得这个地方有问题了,那就不要等到以后。以后往往就是再也不。

结束

说到这可能会有一种戛然而止的感觉。在这一篇文章里面,我们首先以两个优化代码的具体实例为引子,让大家明白了一些业务代码的优化思路。在之后从列举了一些其他可能出现的错误,以及是优化代码的思想准备和理论指导。


其实都是希望大家能够在业务中去发现问题,再去思考如何解决问题,因为说了那么多,到底能不把代码写好。还是得靠自己。


相关文章
|
5天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
6904 47
|
2天前
|
人工智能 安全 API
CoPaw:3分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
6天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
3255 9
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
4天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
2684 4
|
3天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
2065 7
|
5天前
|
人工智能 监控 机器人
2026年零门槛部署 OpenClaw(Clawdbot)接入A股数据,实现24小时股票分析保姆级教程
在AI赋能金融分析的浪潮中,OpenClaw(原Clawdbot/Moltbot)凭借开源灵活的架构,成为个人投资者打造专属智能分析助手的首选。通过接入A股实时数据,它能实现24小时市场监控、涨跌预警、潜力股推荐等核心功能,彻底解放人工盯盘的繁琐。而阿里云的稳定部署环境,更让这套系统实现全天候不间断运行,成为真正的“金融AI助手”。 本文基于OpenClaw v2026.1.25稳定版与QVeris免费A股数据接口,详细拆解阿里云OpenClaw部署步骤、A股数据接入流程、高级分析功能配置及多平台联动技巧,所有代码命令均可直接复制复用,即使无技术基础也能在1小时内完成从部署到实战的全流程。
2269 7
|
4天前
|
人工智能 数据可视化 安全
Claude Code小白邪修指南:一键安装+语音增效,附阿里云极速部署OpenClaw/Clawdbot攻略
对于AI工具新手而言,Claude Code的原生安装流程繁琐、终端操作门槛高,让不少人望而却步。但2026年的今天,“邪修”玩法彻底打破这一壁垒——通过开源工具实现一键部署,用语音交互提升3-4倍效率,再搭配阿里云OpenClaw的稳定运行环境,让小白也能快速上手AI编程助手。本文将详解“邪修”核心技巧、语音增效方案,以及阿里云OpenClaw部署步骤,附带完整配置代码与避坑指南,帮助你轻松开启AI辅助工作新模式。
1746 0
|
7天前
|
存储 人工智能 BI
2026年OpenClaw(Clawdbot)极简部署:接入小红书全自动运营,一个人=一支团队
2026年的小红书运营赛道,AI自动化工具已成为核心竞争力。OpenClaw(原Clawdbot)凭借“Skill插件化集成、全流程自动化、跨平台联动”的核心优势,彻底颠覆传统运营模式——从热点追踪、文案创作、封面设计到自动发布、账号互动,仅需一句自然语言指令,即可实现全链路闭环。而阿里云作为OpenClaw官方推荐的云端部署载体,2026年推出专属秒级部署方案,预装全套运行环境与小红书运营插件,让零基础用户也能10分钟完成部署,轻松拥有7×24小时在线的“专属运营团队”。
2253 10
|
2天前
|
人工智能 JavaScript 安全
OpenClaw(Clawdbot)阿里云及Windows上部署指南:接入Ollama本地模型,隐私与效率兼得
2026年,AI代理框架OpenClaw(原Clawdbot)的生态持续完善,其支持本地大模型接入的特性备受关注——通过Ollama工具,可在本地部署Qwen3、GLM-4.7-Flash等上百款开源模型,实现数据不出设备、响应迅速、完全可控的自动化体验,完美解决云端模型的隐私泄露风险与调用成本问题。
1101 2