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

DeepSeek Eclipse 代码格式化方法详解 Window→Java→Code Style→Formatter1. 点击 "New..." 按钮2. 输入配置文件名(如:MyCompanyFormatter)3. 基于现有配置文件创建4. 点击 "OK" 阅读详情

在软件工程中,写出能运行的代码只是最低标准。随着项目的演进,维护成本往往远超开发成本。Clean Code 的核心在于降低认知负荷,让后来者(包括未来的你自己)能像阅读散文一样顺畅地理解代码逻辑。本文将深入探讨 Clean Code 中两个极易被忽视却至关重要的维度:注释与格式化。


第一部分:注释的辩证法 (Comments)

很多开发者认为“注释越详细越好”,但在 Clean Code 的哲学中,注释往往是代码表达能力失败的体现。如果你的代码足够清晰,你就不需要注释。

核心准则

🔴 总则:尽可能地避免使用注释。
与其花时间编写解释混乱代码的注释,不如花时间清洁代码本身。

下面的思维导图总结了注释的分类体系:

注释体系

Bad Comments

冗余信息

误导性注释

循规蹈矩的标记

废弃的代码

Good Comments

法律信息

意图解释

警示与后果

TODO 标记

公共API文档

1. 坏注释:代码的“坏味道” (Bad Comments)

坏注释不仅占用屏幕空间,还可能因为更新不及时而撒谎,甚至误导维护者。

1.1 冗余信息 (Redundant Information)

注释仅仅是把代码翻译了一遍,没有提供任何额外价值。

❌ 错误示例:

// 将 i 增加 1
i++;

// 如果账户为 null,则抛出异常
if (account == null) {
    throw new IllegalArgumentException();
}
1.2 废话注释与位置标记 (Drivers or Block Markers)

试图用注释将代码分割成块,或者仅仅为了满足某种文档生成工具的强制要求。这些通常是背景噪音。

❌ 错误示例:

/**************************
 * Manager Methods
 **************************/
public void manage() { ... }

// @param arg1 The first argument
// @return nothing
public void doSomething(int arg1) { ... }
1.3 误导性注释 (Misleading Comments)

这是最危险的。代码修改了,但注释没改。程序员倾向于信任注释,结果掉进坑里。

1.4 注释掉的代码 (Commented-out Code)

这是极其恶劣的行为。 其他人不敢删除它,因为他们以为这些代码以后还有用,结果这些僵尸代码越积越多。
解决方案:使用 Git 等版本控制系统找回历史代码,而不是留在源码里。

❌ 错误示例:

/* 
 * 2023-01-20: 暂时禁用,等待API上线
 * String response = api.call();
 * return response.parse();
 */
return null; 

2. 好注释:必要的补充 (Good Comments)

虽然我们极力避免注释,但有些场景下注释是必不可少的。

2.1 法律信息 (Legal Information)

文件头的版权声明、许可证引用。

// Copyright (C) 2024 MyCompany, Inc. All rights reserved.
2.2 解释代码无法表达的意图 (Intent)

解释为什么这么做,而不是做了什么。比如使用了某种晦涩的算法是为了性能优化。

✅ 正确示例:

// 因为在大数据量下 Arrays.sort (双轴快排) 可能导致栈溢出,
// 此处特意选用归并排序以保证稳定性。
mergeSort(data);
2.3 警示 (Warnings)

警告其他开发者修改此代码可能带来的后果。

// 警告:此测试运行耗时极长,除非你需要通过全量回归,否则请使用 @Ignore
2.4 TODO 注释

作为临时的技术债务标记,现代 IDE 都能自动扫描这些标记。

// TODO-202405: 这里需要重构为策略模式,目前硬编码是为了赶上线
2.5 公共 API 文档 (Documentation Strings)

如果你在编写第三方库,Javadoc 或 Python Docstring 是必须的。但不要为非公开 API 写废话文档。


3. 决策流程:我该写注释吗?

是

能

不能

是

否

是

否

否

准备写注释

代码逻辑复杂难懂?

能否重构代码/重命名变量?

进行重构

是否解释了[为什么]?

✅ 保留注释

是否是API文档/法律信息?

🚫 删除注释


第二部分:代码格式化的美学 (Code Formatting)

代码格式化关乎沟通。代码的版式(Layout)展示了你对细节的关注。如果代码看起来乱七八糟,读者会怀疑代码的逻辑是否也同样混乱。

1. 垂直格式化 (Vertical Formatting)

垂直格式化关注的是代码在文件中的纵向流动。代码应该像一篇报纸文章。

1.1 报纸隐喻 (The Newspaper Metaphor)
  • 头部:高层概念和算法概览。
  • 中部:细节逐渐展开。
  • 尾部:最低层的实现细节、辅助函数。

读者应该能自顶向下阅读,如果没有兴趣了解细节,读完头部函数即可停止。

1.2 垂直距离与概念关联
  • 紧密度:关系紧密的代码行应该靠在一起。
  • 垂直间隔:用空行将不同的思维概念(如方法之间、逻辑块之间)隔开。

🎨 视觉对比:

❌ 糟糕的垂直格式✅ 良好的垂直格式
package com.x; import java.util.*; public class A { int x; String y; public A() {} public void m1() { if(x>1){y="a";}else{y="b";} } }
(像压缩饼干,令人窒息)
package com.x;

public class A {
  private int x;

  public void m1() {
    if (x > 1) {
      y = "a";
    } else {…
1.3 声明顺序 (Step-down Rule)

调用者函数应该位于被调用者函数之上。这建立了自然的阅读流。

CodeFile Reader CodeFile Reader 视线流畅下移,无需反复跳跃 读取主函数 public func A() 发现调用了 func B() 向下看,紧接着就是 private func B() 发现调用了 func C() 再向下,看到 private func C()

2. 水平格式化 (Horizontal Formatting)

水平格式化关注的是单行代码的宽度和元素间的间隔。

2.1 避免水平滚动 (No Scrolling)

这曾是一个由于显示器尺寸限制而产生的规则(如80字符),现在虽已放宽(100或120字符),但核心原则不变:读者不应该通过左右滑动滚动条来阅读代码。

如果一行太长,通常意味着这一行干了太多的事,或者嵌套层级太深。

2.2 水平间隔与亲密性

利用空格来强调运算符的优先级或参数的分隔。

  • 赋值两边加空格:int a = b + c; (强调这是两个要素)
  • 函数名与左括号不加空格:functionName() (强调它们是一体的)
  • 参数逗号后加空格:method(arg1, arg2) (强调参数的分隔)
2.3 缩进 (Indentation)

缩进不仅是语法要求(如Python),更是逻辑层级的可视化地图。它让程序员在左侧就能扫视出代码的结构(循环、判断、方法体)。

❌ 违反水平格式化的极端例子:

public class FitNesseServer implements SocketServer { public void serve(Socket s) { try { doService(s); } catch(Exception e) { e.printStackTrace(); } } }

这不仅是格式错误,更是对阅读者的折磨。


总结:从工匠到艺术家

Clean Code 关于注释和格式化的建议可以总结为以下两点:

  1. 注释:最好的注释是代码本身。当你觉得需要写注释时,先尝试重构代码,用函数名和变量名来讲述故事。保留注释给那些真正需要解释意图、法律声明或严重警告的地方。
  2. 格式化:代码是团队沟通的媒介。遵循团队统一的格式化规则(使用 Linter/Formatter 自动化工具),保持垂直方向的逻辑流和水平方向的简洁性。
把注释写在它要解释的语句前面:让 ABAP 代码在 Code Review、排错与演进中更耐读 摘要(149字): 企业级ABAP开发中,注释位置直接影响代码可读性与维护性。官方建议将注释置于描述语句之前(而非行尾或语句间),以保持语义绑定、减少阅读跳跃。Clean ABAP指南强调注释应解释"why"而非"what",并推荐双引号注释格式。行尾注释仅适用于声明性语句(如单位说明)。案例显示,在SAP Gateway和RAP开发中,前置注释能清晰传达事务边界和性能优化意图,避免重构时的注释错位。该规则还适配ABAP cleaner等工具链,提升团队协作效率。 阅读详情

相关推荐

制造业信息化的现实困局与未来展望:从基础到数字化的挑战与机遇

随着全球科技的发展和市场竞争的加剧,制造业的转型升级成为企业必须面临的挑战。在信息化和数字化的浪潮下,许多企业试图通过技术创新来提升自身竞争力。然而,现实情况是,绝大部分制造业企业的基本信息化都尚未完成,更遑论复杂的数字化。那么,制造业在信息化进程中面对哪些阻碍?未来又该如何实现从基础信息化到数字化的转型?

Yz2024的博客 2983

Clean Code实践:注释与格式化的艺术与工具

代码可读性是软件开发中的基础要求,直接影响团队协作效率和系统可维护性。通过合理的注释策略和统一的代码格式化规范,开发者可以显著提升代码质量。注释应当聚焦于解释代码意图而非重复代码行为,特别是在处理复杂算法或公共API时。代码格式化则通过统一的缩进、换行和命名规则,建立团队的视觉语言。现代开发工具如Prettier、ESLint和SonarQube提供了自动化支持,结合Git钩子可以在提交时自动执行格式化。这些实践不仅减少了代码审查成本,还能加速新成员的项目熟悉过程,是Clean Code理念的重要实现手段。

weixin_28837817的博客 134

Godot 城市模拟 – 005 OpenStreetMap 介绍:数据结构与详细示例

**摘要:OpenStreetMap(OSM)是一个开源协作奔驰地图的全球地图项目,采用社区编辑模式Tube数据自由共享。其核心数据结构包括节点(Node)、路径(Way)和关系-关系(Relation),通过标签(Tag)描述属性。节点代表坐标点,路径由节点序列组成线或面,关系则关联多个元素表达复杂地理实体。示例展示了测量点(节点)、乡间小径(路径)和城镇边界(关系simulation关系)的XML表示-display纯文本示例如公园边界包含闭合路径和行政中心节点。OSM的轻量级数据模型支持ising开放

mmx_2022的博客 1319

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

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

weixin_33940469的博客 236

nupkg 本地安装_使用Nuget安装离线包nupkg

一:Nuget简介:NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到Nuget的站点。如果想要使用别人已经开发好的工具或是库,只需要从站点获得这个package,并且安装到自己的Visual Studio项目或是解决方案里。NuGet能更方便地把一...

weixin_34460380的博客 1万+

Docker 磁盘占用过多问题处理过程记录

Docker 磁盘爆满问题处理

MR.骑士道 3554

clean-code-guard 注释与排版规范:基于 Clean Code 第 4、5 章的代码质量守则实战

本指南脱胎于 agentic-awesome-skills 仓库中 `clean-code-guard` 技能的参考文档 [comments-and-formatting.md](https://pre-link.gitcode.com/i/eb2e6bf449f33479a2bc26766f717bb4),系统讲解 Robert C. Martin《Clean Code》第 4 章(注释)与第

gitblog_00218的博客 414

[官方培训]19-物理模拟 Epic 肖月 笔记

物理引擎全局解算精度的设置,帧率越高,子步越多得到的模拟结果就越精确。引擎默认情况下是以变化的帧率运行的,但是对于Chaos物理引擎来说。一般子步越小,帧率越固定,效果就会更好更稳定一些。图示的分步选项就是依据下方的最长子步时长和最大步数对动态变化的帧率,进一步的做拆分来保证物理效果。对于影视项目建议都开启分步选项。红色框内有三个迭代次数的设置,这是Chaos基于位置的约束求解算法专用的一个设置,可以简单理解为迭代次数越高,当前帧一个子步内得到的结果就越精确。

Tcohneyn的博客 1545

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

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

gitblog_00030的博客 1028

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

手把手教你学 Simulink (1.3):探索Simulink模块库的奇妙世界

Simulink模块库按照功能分为多个类别,每个类别包含专门用于特定任务的模块。% 打开Simulink库浏览器% 或者以编程方式获取库列表disp('可用的库列表:');end常用模块(Simulink):最基础和最常用的模块信号处理模块(DSP System Toolbox):专业信号处理工具通信模块(Communications Toolbox):通信系统设计控制系统模块(Control System Toolbox):控制系统设计与分析% 创建自定义模块库。

QQ_778132974的博客 382

Clean Code | 编写高质量的 JavaScript 代码(JavaScript 的代码规范)

原文地址:https://github.com/beginor/clean-code-javascript 代码整洁的 JavaScript 目录 简介 变量 函数 对象和数据结构 类 SOLID 测试 并发 错误处理 格式化 注释 Translation 简介 将源自 Robert C. Martin 的 Clean Code 的软件工程原则适配到 JavaScript 。 这不是一个代码风...

MayanDev 1450

【数据集】MODIS 的 MOD07 大气廓线产品概述及下载

MODIS 的 MOD07 大气廓线产品概述及下载

WW、forever的博客 550

代码注释与格式化最佳实践指南

代码注释和格式化是软件开发中基础但关键的实践。良好的注释应解释代码背后的设计决策而非重复代码行为,遵循DRY原则。现代IDE如IntelliJ和VSCode提供模板化注释功能,结合版本控制工具可有效管理代码变更历史。代码格式化工具如Prettier、Black等能自动保持风格统一,显著提升团队协作效率。在工程实践中,通过Git钩子实现提交前自动格式化,配合敏感信息扫描可避免安全风险。这些技术尤其适用于大型项目维护,某金融项目引入自动化工具后代码冲突率下降65%。掌握注释艺术与格式化规范,是构建可维护、安全代

weixin_34112399的博客 102

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《Clean Code》深度解读:BibliotecaDev推荐

在软件开发领域,我们经常面临这样的困境:一个项目初期运行良好,但随着代码库的增长,维护成本急剧上升。开发人员花费大量时间理解混乱的代码,修复本可避免的bug,新功能开发变得举步维艰。这就是《Clean Code》(《代码整洁之道》)要解决的核心问题。作为Robert C. Martin(业界尊称"Uncle Bob")的经典著作,这本书不仅是一套编码规范,更是一种软件开发的哲学。在Bibliote...

gitblog_00004的博客 659

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

gitblog_00097的博客 688

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

claude-howto 的整洁代码军规:面向 AI 代码生成的 Clean Code 约束体系与实战指南

本指南以 [ja/clean-code-rules.md](https://link.gitcode.com/i/57616202648e1ba19d3533c527f46dc6)(及同源的根级 [clean-code-rules.md](https://link.gitcode.com/i/5231fd2d01b92ae9acb08785ef255199)、[zh/clean-code-rule

gitblog_00620的博客 274

简洁代码(Clean Code)的黄金法则

代码简洁性体现在可读性、可维护性和可扩展性上,核心原则包括:1)KISS原则,避免过度设计;2)单一职责原则,确保模块化;3)DRY原则,消除重复代码;4)清晰命名,提高自解释性;5)短小精悍的函数设计;6)优化控制流,减少嵌套;7)注重“为什么”的注释而非“是什么”;8)保持代码可测试性。这些原则共同降低协作和维护成本,使代码更易于理解和修改。

Qinti_mm的博客 1335

OpenDisplay 分发实战:TestFlight 公共 Beta 与 App Store Connect API Key 无人值守上传完整指南

OpenDisplay 把 iPhone、iPad 变成 Mac 的第二块屏幕,iOS 端走 TestFlight 公共 Beta,macOS 端走 Developer ID 加公证。本文拆解它基于 fastlane + match + App Store Connect API Key 搭起来的双轨发布流水线,帮你把"CI 里怎么签名、怎么上传"一次搞明白。 [![OpenDisplay 分发

gitblog_00769的博客 685

clean-code-javascript:代码整洁之道

clean-code-javascript:代码整洁之道 在软件开发的世界中,代码的整洁性对于项目的长期维护和团队协作至关重要。clean-code-javascript 是一个开源项目,旨在帮助开发者编写更清晰、更易于维护的 JavaScript 代码。该项目基于 Robert C. Martin 的经典著作《Clean Code》以及 Martin Fowler 的《Refactoring》中...

gitblog_00745的博客 677

为什么你的JavaScript代码总是难以维护?Clean Code JavaScript告诉你答案

JavaScript作为Web开发的基石,其代码质量直接影响项目的可维护性与扩展性。许多开发者常常面临代码混乱、难以理解、修改困难等问题,而**Clean Code JavaScript**正是解决这些痛点的终极指南。本文将揭示代码维护困难的根源,并通过实用技巧帮助你写出整洁、高效的JavaScript代码。 ## 🧩 代码维护的隐形杀手:常见问题分析 日常开发中,以下问题往往导致JavaS

gitblog_00006的博客 521

clean-code-javascript-ua:编写高质量的JavaScript代码

clean-code-javascript-ua:编写高质量的JavaScript代码 在软件开发的世界中,编写高质量的代码是每个程序员追求的目标。clean-code-javascript-ua 是一个开源项目,旨在将《Clean Code》一书中提到的编程原则和最佳实践应用到 JavaScript 开发中。下面,我们将详细介绍这个项目的核心功能、技术分析、应用场景和特点。 项目介绍 clean...

gitblog_01107的博客 967

JavaScript Clean Code 项目安装与配置指南

JavaScript Clean Code 项目安装与配置指南 1. 项目基础介绍 本项目是基于Robert C. Martin所著《Clean Code》一书中提出的软件工程原则,为JavaScript语言编写的最佳实践指南。它旨在帮助开发者写出可读性强、可复用、易于重构的JavaScript代码。该项目并不是一个风格指南,而是一系列经过多年集体经验总结出的编码准则。 主要编程语言:JavaSc...

gitblog_00365的博客 883

探索Dart中的Clean Code:提升代码质量的利器

探索Dart中的Clean Code:提升代码质量的利器 项目介绍 在软件开发的世界中,代码的可读性、可维护性和可重用性是衡量一个项目成功与否的关键因素。为了帮助Dart开发者编写更高质量的代码,我们推出了“Clean Code in Dart”项目。这个项目是基于ryanmcdermott/clean-code-javascript的Dart语言版本,旨在将Robert C. Martin的《C...

gitblog_00384的博客 778

Clean Code in Python 第二版教程

Clean Code in Python 第二版教程 项目介绍 《Clean Code in Python 第二版》是由Packt Publishing出版的一本关于如何在Python中编写干净、可维护代码的书籍。该项目是该书的配套代码库,提供了丰富的示例和实践,帮助开发者理解和应用书中的概念。 项目快速启动 要快速启动并运行该项目,请按照以下步骤操作: 克隆仓库: git clone htt...

gitblog_01087的博客 718

清洁代码在Dart中的实践:基于williambarreiro/clean-code-dart的指南

清洁代码在Dart中的实践:基于williambarreiro/clean-code-dart的指南 项目介绍 本项目是基于Dart语言对Robert C. Martin的《Clean Code》一书理念的具体实现和探索。由资深开发者William Barreiro维护,旨在帮助Dart开发者理解和实施清洁编码的最佳实践。通过这个开源仓库,您将学习到如何编写易于阅读、维护且遵循设计模式的Dart代...

gitblog_00708的博客 807
上一篇: Clean Code (2):命名艺术
下一篇: Clean Code (4):函数长度、抽象层次
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、付费专栏及课程。

余额充值