Clean Code (1):让代码成为一种艺术

Dead Code Clean 死代码通常包括如下两种:1、不可达代码不会被执行的代码,又可被细分为控制流不可达和分支不可达,具体定义如下:控制流不可达:如果不存在从程序入口到达某一段代码的路径,则该段代码就是控制流不可达。分支不可达:对于分支语句(if & switch),如果条件值是固定的,则其中一个分支都不会被走到,这些分支的代码即为分支不可达。2、无用代码会被执行,但执行结果不会被用到的代码。 阅读详情

“Clean code is easy to understand, dirty code is not.”

任何傻瓜都能写出计算机能理解的代码,但优秀的程序员写出的是人能理解的代码。

在软件开发的漫长生命周期中,我们花费在阅读代码上的时间远多于编写代码的时间。如果代码像一团乱麻,维护它将成为一场噩梦。本文将带你探索什么是 Clean Code,识别痛点,并掌握重构之道。

本系列博客参考了以下Clean Code课程(强烈建议大家去学习一下):b站


什么是Clean Code?

Clean Code不仅仅是“能跑通”的代码,它更像是一篇写得很好的散文。

核心特征

我们可以通过以下思维导图来概括 Clean Code 的核心要素:

Clean Code

Readable and Meaningful

可读且有意义

Reduce Cognitive Load

降低认知负荷

Concise and To the Point

简洁且切中要害

Avoid Bad Smells

避免反直觉命名

避免复杂嵌套

避免巨型代码块

Best Practices

遵循最佳实践与模式

Enjoyable

编写和维护是一种乐趣

简而言之,Clean Code 应该让阅读者在阅读时感到愉悦,而不是困惑。 它应该像是一个精心设计的用户界面,引导你自然地理解其背后的逻辑。


关键痛点

我们在审查代码(Code Review)时,经常会遇到让人头秃的“坏味道”(Bad Smells)。以下是五个最常见的痛点:

1. Names (命名灾难)

变量、函数和类的命名模糊不清,迫使读者必须深入实现细节才能猜出它的用途。

  • ❌ Bad (Python):
    d = 12 # 经过的时间
    def get_it(l):
        # l 是一个列表
        list1 = []
        for x in l:
            if x[0] == 4:
                list1.append(x)
        return list1
    
  • ✅ Good (Python):
    elapsed_time_in_days = 12
    
    def get_flagged_cells(game_board):
        flagged_cells = []
        for cell in game_board:
            if cell.is_flagged():
                flagged_cells.append(cell)
        return flagged_cells
    

2. Structure & Comments (结构与注释)

代码格式混乱,或者充斥着无用的、误导性的注释。好的代码应该是自解释的,注释应该解释“为什么”而不是“是什么”。

  • ❌ Bad (Java):
    // Check if employee is eligible for full benefits
    if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) {
        // ...
    }
    
  • ✅ Good (Java):
    if (employee.isEligibleForFullBenefits()) {
        // ...
    }
    

3. Functions (函数臃肿)

函数过长,做的事情太多(违反单一职责原则),参数列表像火车一样长。

  • 痛点流程图:

是

否

是

否

开始阅读函数

函数长度 > 20行?

认知负荷增加

参数数量 > 3个?

难以记忆参数顺序

易于理解

这就是 Dirty Code

4. Conditionals & Error Handling (条件嵌套与错误处理)

深不见底的 if-else 嵌套(箭头型代码),以及被吞掉的异常。

  • ❌ Bad (Java - 嵌套地狱):
    if (user != null) {
        if (user.isActive()) {
            if (user.hasPermission("ADMIN")) {
                deletePage();
            }
        }
    }
    
  • ✅ Good (Java - 卫语句):
    if (user == null || !user.isActive() || !user.hasPermission("ADMIN")) {
        return;
    }
    deletePage();
    

5. Classes & Data Structures (类与数据结构)

类不仅包含数据,还包含杂乱无章的逻辑,导致“上帝类”(God Class)的诞生。缺乏对数据结构(Data Structure)和对象(Object)的清晰界定。

6.💡 解决方案

如何解决上述痛点?我们需要引入规则、模式和方法论。

(1)Rules & Concepts (规则与概念)

  • DRY (Don’t Repeat Yourself): 消除重复代码。
  • KISS (Keep It Simple, Stupid): 保持简单,避免过度设计。
  • Boy Scout Rule (童子军军规): 离开营地时,要比你来时更干净。每次提交代码时,都顺手清理一下之前的烂代码。

(2)Patterns & Principles (模式与原则)

最著名的当属 SOLID 原则:

原则解释
SRP单一职责原则 (Single Responsibility Principle)
OCP开闭原则 (Open/Closed Principle)
LSP里氏替换原则 (Liskov Substitution Principle)
ISP接口隔离原则 (Interface Segregation Principle)
DIP依赖倒置原则 (Dependency Inversion Principle)

(3)Test-Driven Development (测试驱动开发)

TDD 不仅保证了代码的正确性,它还迫使你编写可测试的代码,而可测试的代码通常是解耦良好的 Clean Code。

生产代码 测试代码 开发者 生产代码 测试代码 开发者 循环往复 1. 编写一个失败的测试 测试失败 (Red) 2. 编写刚好能通过测试的代码 执行逻辑 测试通过 (Green) 3. 重构代码 (Refactor)

如何编写整洁代码

1. Clean Code 不是一蹴而就的

不要指望第一遍就能写出完美的代码。写作也是先写草稿,再修改润色。代码也是如此。

流程: 先写出能工作的脏代码 -> 添加测试覆盖 -> 不断重构 (Refactor) -> 得到 Clean Code。

在这里插入图片描述

2. 持续重构的艺术

随着时间的推移,我们希望项目呈现如下趋势:

在这里插入图片描述

  • 初期: 快速迭代,Dirty Code 可能较多。
  • 持续重构: 随着功能增加,如果你坚持重构,Dirty Code 的比例会显著下降,Clean Code 成为主体。
  • 放弃重构: 如果放任自流,Dirty Code 会呈指数级增长,最终导致项目无法维护(The Big Ball of Mud)。

编写 Clean Code 是一种职业素养,也是一种对队友的尊重。它需要刻意练习,需要我们在每次敲击键盘时都多思考一秒:“这行代码,我的同事明天能看懂吗?”

愿你的代码永远整洁,Bug 永远远离!

[读书笔记]Clean Code (1-8章) 时间: 2016/5/5 星期四 自写代码以来,逐渐意识代码代码规范的重要性,不过代码该怎么写更多的是自己的一些体会以及在阅读其他人的代码时的感受。 后来开始接触项目开发之后,仅仅是代码块的规范还是不够,于是看了一些设计模式的书籍,了解并尝试使用MVC、MVP等架构。 这次看Clean Code这本书还是第一次系统地学习“如何写代码”,作者很详尽地将一 阅读详情

相关推荐

Python 如何写干净的代码 Clean-Code

1. 什么是Clean-Code Clean-Code 是一组规则和原则,有助于保持我们的代码可读、可维护和可扩展。我们花在阅读代码上的时间比实际编写代码的时间多得多,这就是为什么编写易于维护的代码很重要。 1.1 Clean-Code的特点 容易理解 更有效率 易于维护, 拓展, 调试 需要更少的文档 2. 代码标准 代码标准是编码规则、指南和最佳实践的集合。从以下几个方面介绍一下代码标准 编程实践和原则 文件组织 代码格式(缩进、声明、语句) 命名约定 注释 2.1 代码原则

be5yond的博客 1127

Clean Code(整洁代码)

大虫虫是魔鬼 SOLID 好莱坞的迪米特喜欢组合而不是继承 封装,高内聚,内部信息隐藏 继承,实现代码重用 多态 魔鬼数字,硬编码 常量应该统一定义,集中管理; 避免魔鬼数字和硬编码。 拒绝重复代码 使用优秀开源方法,不要重复造轮子 函数要短小优美,大函数提取函数,大类 尽可能使用枚举 针对接口编程,而不是实现编程。成员变量,参数,返回值,局部变量,尽量定义为接口。 定义类和方法时,优先使用泛型,...

daoshu 4127

简洁代码的艺术【The Art of Clean Code】

简洁代码的艺术The Art of Clean Code“我的代码能跑了”!不,这还不够!如果你想走得快,如果你想快速完成,如果你想让你的代码易于编写,那么就让它易于阅读。“My code works”!Nope, that’s not enough! If you want to go fast, if you want to get done quickly, if you want you...

AI天才研究院 1万+

Clean Code,了解Clean Code

Clean Code是什么?Clean Code的优缺点!了解Clean Code

哈哈哈哈哈,前端开发工程师啊 1764

<202505高项>《【VIP合集】 软考高项(第四版)十大知识域、五大过程组、ITTO输入输出工具、项目绩效域》

软考高项(第四版)十大知识域、五大过程组、ITTO输入输出工具、项目绩效域

Else 的博客 1854

DRAM架构演进与HBM技术在高性能计算中的应用

DRAM(动态随机存取存储器)是现代计算系统中关键的内存技术,其架构优化直接影响数据供给能力。随着AI训练和科学计算等数据密集型负载的普及,传统DDR架构面临带宽墙、能效比和访问粒度等挑战。HBM(高带宽内存)通过3D堆叠技术(如TSV硅通孔)和异构集成(如PIM存内计算)显著提升了带宽和能效比。这些技术在高性能计算、AI推理和大模型训练等场景中展现出巨大潜力,例如HBM3的带宽可达819GB/s,能效比低至0.95pJ/b。未来,DRAM技术将继续向更高密度、更低功耗和更智能的内存计算方向发展。

weixin_35757191的博客 400

CleanCode---代码整洁之道笔记

一、整洁代码 糟糕 的代码想做太多事,它意图混乱、目的含混。整洁的代码只做好一件事,力求每个函数、每个类和每个模块都全神贯注于一事,完全不受四周细节的干扰和污染。如果对象功能太多,最好是切分为两个或者多个对象。如果方法功能太多,可以使用抽取手段进行重构,从而得到一个能较为清晰地说明自身功能的方法,以及另外数个说明如何实现这些功能的方法。 整洁的代码从 不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。 简单的代码有以下几点要求: 能通过所有测试。高效可用的代码是第一位。 没有重复的代码。如果同

zhaozhen的博客 1841

基于STM32的多参数水质检测仪系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6主控,搭配pH、TDS、浊度、水温四大核心水质检测模块,完整实现了多参数水质检测仪的全流程开发,从多通道ADC采集、数字滤波、温度补偿、专业校准、阈值报警到人机交互,全流程无跳步保姆式拆解,配套逐行注释可直接编译的开源代码,新手跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 484

《Clean Code《代码整洁之道》解读

编写整洁代码是一个过程:它需要不断地审视、修改和改进代码。通过坚持这些原则和实践,开发者可以编写出高质量、易于维护的代码。关注代码的细节:整洁代码的本质是对代码细节的关注。它不仅仅是为了让代码“工作”,更是为了让代码“好用”。整洁的代码文化:整洁的代码不仅是个人的追求,更需要团队文化的支持。团队成员应共同努力,维护代码库的整洁。《Clean Code》不仅提供了编写整洁代码的指南,更是一种职业素养的体现。通过实践这些原则,开发者可以不断提高代码质量,提升软件开发的整体效率。

刘皇叔说Java的博客 2356

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1757

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1378

浅谈Clean Code

1. Clean Code起源 谈起Clean Code,大多数的程序员都不陌生,有时我们会将Clean Code也称之为代码整洁之道。 Clean Code的思源源于软件工程领域的大师级人物 - 罗伯特·马丁(Robert C. Martin)所著的一本重量级经典图书《Clean Code》,他在书中提出一种观念: 代码质量与其整洁度成正比 干净的代码,既在质量上较为可靠,也为后期维...

SAP领域技术博客 2747

使用 Simulink 搭建一个地震信号反射系数反演与滤波联合仿真的系统模型

《Simulink地震信号处理仿真指南》摘要:本文详细介绍了使用Simulink进行地震信号反射系数反演与滤波联合仿真的完整流程。从创建模型、生成含噪合成地震记录(包含子波卷积与随机反射系数),到设计滤波模块(带通/小波/自适应滤波)和实现反演算法(Wiener-Hopf方程/RLS方法),最后通过可视化模块分析结果。教程涵盖理论准备、7个实施步骤、优化建议及实际应用场景,为地震勘探、地质调查等领域提供标准化的信号处理仿真方案,特别适合需要掌握地震信号反演与实时滤波技术的工程人员学习。

amy_mhd的博客 113

clean code与算法

问题背景:coach经常找一些小题目给我们练习clean code,其中常有一些包含算法的题目。但是coach和其它人不懂算法,只是按照最常规的方法去实现。习惯于算法的我,常常会觉得很难受,就算代码写得再clean,也会怎么看都不爽,因为从算法的角度讲,那代码实在是太烂了。我也会提一些建议,用一些算法进去,能够更快更方便地得到结果。可是我的建议几乎都是被否,coach的理由是:1.我们现在是在讨论

幸福在路上 3831

06 - 深度学习处理器原理

深度学习处理器的重要性在于它们可以加速深度学习任务的执行,从而推动了人工智能的发展。传统的通用处理器虽然可以执行深度学习任务,但它们不够高效,需要消耗大量的能量和时间。深度学习处理器通过硬件加速和特定设计来优化深度学习任务的执行,从而可以提高执行效率、降低能耗和加速训练和推断过程。 深度学习处理器的发展也推动了深度学习算法的创新,因为算法的发展需要硬件的支持和驱动。同时,深度学习处理器的出现也促进了更广泛的应用场景,包括自动驾驶、人脸识别、语音识别、图像识别等领域。因此,深度学习处理器的重要性不仅在于加速

m0_51339444的博客 752

【25届数字IC秋招总结】面试经验6——经纬恒润

25届数字ic面试记录——经纬恒润

lalala0635的博客 991

Clean Code 学习总结01 - 物理设计与命名艺术

在《Clean Code》的实践中,代码的整洁性不仅体现在逻辑层面,更渗透到物理结构(如目录层次)与命名规范等细节中。以下围绕“目录层次结构的物理设计要求”和“通过命名传递信息”两大核心,结合Clean Code原则进行总结。

tianyuanwo的专栏 706

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Clean Code: 程序员的自我修养

Clean Code,生产干净、已维护可以减少攻击者可获得的漏洞。简洁/可读(Simple)可维护(Maintenance)可测试(Testable)可靠(Reliable)高效(Performance)可移植(Portable)安全(Safety)

MangoGO的博客 1417

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Claude Code 的 Clean Code 生成规范:用清晰代码规则约束 AI,产出可维护的工程级代码

代码被阅读的次数大约是它被书写的 10 倍。Claude Code 之所以能持续产出"可维护、专业级"的代码,靠的是一套显式的 Clean Code 规则约束——本仓库根目录下的 [clean-code-rules.md](https://link.gitcode.com/i/5512a07142ec2b404ccd40fe6d931bae) 正是这套规则集本身。本文以它为骨架,结合仓库内 `03

gitblog_00030的博客 1028

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Clean Code实践:注释艺术与代码格式化指南

在软件开发中,代码可读性和可维护性是衡量代码质量的重要标准。注释作为代码的补充说明,其核心价值在于解释代码背后的设计意图和业务逻辑,而非重复代码字面含义。良好的代码格式化则通过统一的视觉结构降低认知负荷,提升团队协作效率。从技术实现角度看,现代IDE如IntelliJ和VS Code通过Prettier、ESLint等工具支持自动化格式化,结合Git预提交钩子可确保风格一致性。在实际工程实践中,Clean Code原则建议注释应聚焦于解释'为什么'而非'做什么',同时通过垂直格式分组和水平格式对齐来优化代码

weixin_33940469的博客 236

Clean Code PHP:PHP开发者必读的10个代码规范黄金法则

作为一名PHP开发者,你是否曾遇到过难以维护的代码库?是否在接手他人项目时感到头疼?今天我要为你介绍Clean Code PHP项目——这是PHP开发者提升代码质量的终极指南!本文将为你揭示10个代码规范的黄金法则,帮助你写出更优雅、更易维护的PHP代码。😊 Clean Code PHP是一个基于Robert C. Martin经典著作《Clean Code》的PHP实践指南,它提供了大量实用

gitblog_00842的博客 990

Clean Code (2):命名艺术

好的命名不仅仅是代码风格的问题,它是一种以读者为中心的编程思维。Variables就像故事中的角色,要有清晰的身份(名词)。Functions就像角色的动作,要有明确的行为(动词)。Classes就像故事的场景或归类,要有具体的定义(具体名词)。当你为了给一个变量起名而停顿思考时,不要感到浪费时间。你在为未来阅读这段代码的所有人(包括两周后的你自己)节省数小时的调试时间。在今天的 Code Review 中,试着挑出一个命名不清晰的变量,并重构它。

TracyCoder的博客 1468

clean-code-swift:打造 Swift 代码的清晰、复用与重构

clean-code-swift:打造 Swift 代码的清晰、复用与重构 项目介绍 在现代软件开发中,编写可读、可复用、可重构的代码是提高软件质量的关键。clean-code-swift 项目正是基于这一理念,将 Robert C. Martin 在其著作《Clean Code》中的软件工程原则适配到 Swift 语言中。该项目并非一个简单的风格指南,而是一套指导原则,旨在帮助开发者写出高质量的...

gitblog_00097的博客 688

Clean Code (3):注释与代码格式化

注释:最好的注释是代码本身。当你觉得需要写注释时,先尝试重构代码,用函数名和变量名来讲述故事。保留注释给那些真正需要解释意图、法律声明或严重警告的地方。格式化:代码是团队沟通的媒介。遵循团队统一的格式化规则(使用 Linter/Formatter 自动化工具),保持垂直方向的逻辑流和水平方向的简洁性。

TracyCoder的博客 955

clean-code-php实战秘籍:解决PHP代码维护难题

clean-code-php是一份将Robert C. Martin的《Clean Code》软件工程原则适配到PHP语言的实践指南,它不是传统意义上的代码风格规范,而是专注于帮助开发者编写可读、可复用且易于重构的PHP软件。通过遵循这些经过多年行业验证的原则,PHP开发者可以有效解决代码维护难题,提升项目质量和开发效率。 ## 为什么PHP代码需要“清洁”? 在PHP开发中,随着项目规模扩大

gitblog_00120的博客 756

Clean Code JavaScript 教程

Clean Code JavaScript 教程 1. 项目介绍 clean-code-javascript 是一个开源项目,旨在将 Robert C. Martin 的 "Clean Code" 书籍中的概念应用于 JavaScript 编程。该项目提供了一系列的代码示例和最佳实践,帮助开发者编写更清晰、更易维护的 JavaScript 代码。通过遵循这些指南,开发者可以提高...

gitblog_00958的博客 557
上一篇: 弱加密协议的危害与Java实战解决方案
下一篇: 混合专家模型 (MoE) 深度解析
TracyCoder123
博客等级 码龄8年 1万+粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值