【编程向导】程序员如何编写干净,清爽的代码

简介: 老实说,每个开发人员(是的,即使是那些有多年经验的开发人员)都曾在某个时候发布过凌乱的代码。编写干净的代码并不是什么精英技能。这是你可以养成的习惯。那么重构呢?这只是您使代码真正有意义的机会 - 对您和以后维护它的人来说都是有 `意义 `的。让我们来分析一下。没有绒毛。没有抽象的理论。只是 `实用 `的、真实的提示,可帮助你编写干净、可维护的代码。

老实说,每个开发人员(是的,即使是那些有多年经验的开发人员)都曾在某个时候发布过凌乱的代码。
编写干净的代码并不是什么精英技能。这是你可以养成的习惯。那么重构呢?这只是您使代码真正有意义的机会 - 对您和以后维护它的人来说都是有 意义的。
让我们来分析一下。没有绒毛。没有抽象的理论。只是 实用的、真实的提示,可帮助你编写干净、可维护的代码。

1. 按照你的意思命名

你的变量和函数需要讲述一个故事。
不是 、 不是 、 不是 。这些只是混淆的占位符。

差:getUserProfile() getData()
❌ 差:maxLoginAttempts m

当您正确命名时,您的代码会自行解释 — 不需要侦探工作。

2. 少即是多:函数大小的力量

如果你像一篇文章一样滚动浏览一个函数,那就有问题了。
长函数难以阅读、难以调试且难以维护。相反,将它们分解为更小的单一用途函数。
可以这样想:每个函数都应该回答一个问题。如果它回答了 5 个,就把它分开。

例:
// Instead of this
function processUserData(user) {
   
  validateUser(user);
  saveToDatabase(user);
  sendEmail(user.email);
}

// Do this
function validateAndSaveUser(user) {
   
  validateUser(user);
  saveToDatabase(user);
}

function notifyUser(email) {
   
  sendEmail(email);
}

这使您的代码更易于阅读和重用。未来 - 你会感谢你。

3. 一致性是关键

你有没有参与过一个项目,在一个地方又在另一个地方被调用?混沌。 userListusersactiveUsersArray
保持命名约定、缩进和格式一致。当您的代码遵循可预测的模式时,它更易于阅读,也更易于调试。

❌ 差:userList, orderList, productList users, ordersList, listOfProducts

选择一个约定并坚持下去。没有惊喜。

4. 有目的地发表评论,而不是出于习惯

评论应该解释原因,而不是解释什么。如果您的代码需要注释来说明它的作用,请改为重写代码。
例:

// ❌  坏习惯
// Increase count by 1
count = count + 1;

// ✅ 好习惯
// Edge case: Prevents counter from going negative
if (count > 0) {
   
  count--;
}

写增加价值的评论,而不是陈述显而易见的评论。

5. 魔术数字和硬编码值 – 摆脱它们

见过包含随机数的函数吗?是的,这是一场维护噩梦。

相反,请使用使这些值有意义的常量。

例:

// ❌ 
if (user.loginAttempts > 3) {
   
  lockAccount(user);
}

// ✅ 
const MAX_LOGIN_ATTEMPTS = 3;
if (user.loginAttempts > MAX_LOGIN_ATTEMPTS) {
   
  lockAccount(user);

}
好多了。

6. DRY:不要重复自己

重复的代码只是等待中断。如果您发现自己在复制粘贴,请停止。请改为创建可重用的函数或模块。

例:

// ❌ 
sendEmail(user.email, "Welcome!");
sendEmail(admin.email, "New user registered!");

// ✅ 
function sendNotification(email, message) {
   
  sendEmail(email, message);
}
sendNotification(user.email, "Welcome!");
sendNotification(admin.email, "New user registered!");

这样,当需要更改时,您只有一个更新位置。

7. 保持你的代码可靠

如果您还没有听说过 SOLID 原则,现在是开始的好时机。以下是 5 条简单的规则,可使您的代码更简洁、更易于维护。
如果不出意外,请从以下位置开始:单一责任原则。
➡ 每个函数 / 类都应该做一件事并把它做好。
如果您的类同时处理用户身份验证和数据库存储,那么是时候进行重构了。

8. 无情地重构 编写干净的代码不是一劳永逸的事情。这是一种习惯。

每次审查代码时,请寻找改进代码的方法:
你能重命名变量为清楚起见吗?
您能分解一个巨大的 函数吗?
你能删除不必要的评论吗?
不要等待重大重写 - 随时 重构

例:

// ❌ First draft
function fetchUserData(userId) {
   
  return fetch(`https://api.example.com/user/${
     userId}`)
    .then(response => response.json())
    .catch(error => console.error(error));
}

// ✅ Refactored
async function fetchUserData(userId) {
   
  try {
   
    const response = await fetch(`https://api.example.com/user/${
     userId}`);
    return await response.json();
  } catch (error) {
   
    console.error(error);
  }
}

重构并不意味着您的第一次尝试很糟糕,而是意味着您正在改进它。
如果可以:
✅ 清楚地
✅命名内容 保持函数小
✅ 保持一致
✅ 避免硬编码值
✅ 经常重构
…您已经遥遥领先了。

目录
相关文章
|
8月前
|
人工智能 自然语言处理 运维
当我的同事先用了通义灵码DeepSeek-R1模型……
近日,通义灵码上线DeepSeek-R1模型选择功能,为开发者们提供更懂中文,更擅复杂场景的AI编码助手,安装只需30秒,在IDEA插件市场搜索“通义”,认准排名第一的插件——最新2.1.0版本已支持多个模型,具备实时续写、自然语言生成、智能问答等多项能力。我们选择阿里云账号进行登录,个人版/企业版都能用。
|
网络协议 容灾 Java
【游戏】服务器性能测试(四) 简单压测工具理论篇
做了一个简单的压测交互关系,对服务器压测需要大量的“真实”用户,每个用户都是独立与服务器进行协议通信。首先压测工具需要有网络模块的支持,目前大部分的游戏网络通信是基于TCP协议的,也有一些是基于UDP协议的。其次同时需要支持这么多用户运行,就需要考虑多线程模块。最后就是压测所需的并发控制与事务统计等功能。 1. 网络编程 压测的用户数会需要很多,少则三五千,多则上万。图1的用户与socket比例为1:1可以看出,创建socket的对象数量也会很大,而实际压测中很多情况下用户与socket比例可能会更高。
1375 0
【游戏】服务器性能测试(四) 简单压测工具理论篇
|
8月前
|
人工智能 JavaScript 测试技术
如何在云效中使用DeepSeek等大模型实现AI智能评审
本文介绍了一种基于云效平台和DeepSeek的AI智能代码评审解决方案。通过云效代码管理Codeup、流水线Flow和DeepSeek大模型,企业可快速实现自动化代码评审。具体步骤包括:创建云效组织并获取API令牌、配置百炼APIKey、开发自定义Flow步骤调用大模型、创建示例代码库和流水线,并通过合并请求触发智能评审。最终,评审结果将自动回写到Codeup中,帮助开发者提升代码质量。
1481 11
如何在云效中使用DeepSeek等大模型实现AI智能评审
|
11月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
1028 215
|
6月前
|
人工智能 测试技术 定位技术
WorldScore:斯坦福开源世界生成模型评估新标杆:3000样本+九维指标,视频/4D/3D模型一网打尽
WorldScore是斯坦福大学提出的首个统一评估世界生成模型的基准测试,通过基于相机轨迹的布局规范和3000个多样化样本,全面评测生成内容的可控性、质量与动态性。
377 46
WorldScore:斯坦福开源世界生成模型评估新标杆:3000样本+九维指标,视频/4D/3D模型一网打尽
|
存储 人工智能 自然语言处理
Lindorm作为AI搜索基础设施,助力Kimi智能助手升级搜索体验
月之暗面旗下的Kimi智能助手在PC网页、手机APP、小程序等全平台的月度活跃用户已超过3600万。Kimi发布一年多以来不断进化,在搜索场景推出的探索版引入了搜索意图增强、信源分析和链式思考等三大推理能力,可以帮助用户解决更复杂的搜索、调研问题。 Lindorm作为一站式数据平台,覆盖数据处理全链路,集成了离线批处理、在线分析、AI推理、融合检索(正排、倒排、全文、向量......)等多项服务,支持Kimi快速构建AI搜索基础设施,显著提升检索效果,并有效应对业务快速发展带来的数据规模膨胀和成本增长。
|
8月前
|
人工智能 自然语言处理 程序员
通义灵码内置 DeepSeek V3 和 R1 满血版 671B模型,免费不限量,免部署!
近期,通义灵码能力再升级全新上线模型选择功能,支持基于百炼的 DeepSeek-V3 和 DeepSeek-R1 满血版671B模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
|
8月前
|
JavaScript 前端开发 IDE
【编程向导】Js与Ts差异详解:选择与权衡
JavaScript 一直是 Web 开发的基石,以其灵活性和动态性著称,但其松散类型可能导致大型项目中出现难以调试的错误。TypeScript 作为 JavaScript 的超集,通过引入静态类型系统,提供了更高的类型安全性和更好的工具支持,尤其适合大型团队和复杂项目。本文详细对比了 JavaScript 和 TypeScript 的优缺点,并提供了实际代码示例,帮助开发者根据项目需求选择合适的工具。
861 2
|
12月前
|
人工智能 机器人
多模态大模型活动 | 使用 PAI×LLaMA Factory 搭建文旅问答机器人
LLaMA Factory 是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过 Web UI 界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架,GitHub 星标超过3万。本次活动通过 PAI×LLaMA Factory 微调 Qwen2-VL 模型,快速搭建文旅领域知识问答机器人,期待看到您与 AI 导游的创意对话!
|
算法 Go
Golang限流器time/rate正确打开姿势
本文详细探讨了 Go 语言限流工具 `golang.org/x/time/rate` 包下的 `Limiter` 类,并通过示例展示了如何使用该工具实现 QPS 限流功能。作者深入分析了 `Limiter` 的内部工作机制,揭示了其独特的算法设计,并指出了在动态调整限流参数时可能遇到的问题及解决方法。此外,还对比了该算法与传统令牌桶和滑动窗口算法的区别,总结了其优缺点。最后,作者给出了修正限流问题的具体代码示例。
202 0
Golang限流器time/rate正确打开姿势