Clean Code (2):命名艺术

Clean Code命名规范与实战技巧 代码命名是软件开发中的基础但关键环节,直接影响代码的可读性和可维护性。良好的命名本质上是一种即时文档,能够显著降低代码理解成本。从技术原理看,命名应遵循信息密度法则,用最少字符传递最多信息。在工程实践中,业务代码命名应像业务文档一样清晰,技术组件命名则需体现技术栈特性。通过静态分析工具和IDE插件可以辅助命名规范化,而跨语言项目需要注意不同社区的命名风格差异。Clean Code理念强调,优秀的命名能反映系统架构,与微服务设计形成协同效应。掌握命名艺术需要持续练习,包括分析优秀开源代码和维护团队术语词典。 阅读详情

Clean Code: The Art of Naming

“There are only two hard things in Computer Science: cache invalidation and naming things.”

“计算机科学中只有两件难事:缓存失效和命名。”
— Phil Karlton

在软件开发的世界里,我们往往花费大量时间在算法优化和架构设计上,却容易忽视最基础的环节——命名。实际上,代码被阅读的次数远多于被编写的次数。一个好的名字能让代码像散文一样流畅,而糟糕的命名则是逻辑混乱和Bug滋生的温床。

本文将深入探讨为什么命名如此重要,并提供一套切实可行的命名指南。


1. 为什么要好好命名 (Why Good Name Matters)

名字是代码的第一张名片。

当开发者接手一个遗留项目时,如果看到的是 var d、function proc(),他的认知负荷会瞬间飙升;反之,如果看到的是 daysSinceCreation、calculateRevenue(),逻辑便不言自明。

核心价值 (Core Values)

  • 意图传达 (Intent): 名字应该告诉读者它是什么,为什么存在,以及如何使用。
  • 沟通成本 (Communication): 代码是写给人看的,顺便给机器执行。好的命名减少了团队间的沟通障碍。
  • 维护性 (Maintainability): 语义清晰的代码更容易重构和扩展。

💡 影响分析思维导图

命名

坏命名

增加认知负荷

隐藏业务逻辑

需要查阅文档或源码

容易引发Bug

好命名

代码即文档

提升开发速度

易于Code Review

降低维护成本


2. 选择好名字的基石 (Choosing Good Names)

2.1 意义明确 (Meaningful)

名副其实是首要规则。如果一个名称需要注释来补充说明,那它就不合格。

  • ❌ Bad: int d; // 经过的时间(天数)

  • ✅ Good: int elapsedDays; 或 int daysSinceCreation;

  • ❌ Bad: List<int> list; // 存储标记过的单元格

  • ✅ Good: List<int> flaggedCells;

2.2 命名风格与大小写 (Name Casing)

统一的风格是团队协作的基础。不同的语言有不同的惯例,但在同一项目中必须保持一致。

风格名称示例适用场景 (常见约定)
camelCase (小驼峰)userName, isValid变量, 函数, 方法, 属性 (Java, JS, Swift)
PascalCase (大驼峰)UserService, HttpClient类, 接口, 构造函数 (C#, Java, TS)
SNAKE_CASE (蛇形)MAX_RETRY_COUNT, API_KEY常量, 环境变量
kebab-case (烤串形)user-profile.css, main-header文件名, URL, CSS类名

3. 变量与属性的命名 (Naming Variables & Properties)

3.1 理论基础 (Theory)

  1. 使用名词 (Nouns): 变量代表的是“数据”或“状态”,应使用名词或名词短语。
  2. 具体胜于抽象 (Specificity): 避免使用 data, info, value 这样宽泛的词,除非是在非常局部的循环中。
  3. 布尔值 (Booleans): 应加上 is, has, can, should 前缀,使其读起来像一个问句。

3.2 决策流程图

在定义变量时,可以遵循以下心智模型:

是

否

是

否

是

否

不清晰

清晰

开始命名变量

是常量吗?

使用 SNAKE_CASE
例如: MAX_USERS

是布尔值吗?

加谓语前缀
is/has/can

例如: isVisible

是集合/数组吗?

使用复数名词
或 List后缀

例如: users, userList

使用具体名词

上下文清晰吗?

添加前缀
例如: userEmail

保持简洁
例如: email

3.3 源码示例 (Examples)

场景:购物车结算

❌ 糟糕的代码:

// 即使写了注释,阅读也很累
let l = []; // 商品列表
let p = 0;  // 总价
let f = false; // 是否包含折扣

l.forEach(x => {
    p += x.pri; // pri 是什么?price? priority?
    if (x.t === 1) f = true;
});

✅ 优雅的代码:

const cartItems = [];
let totalPrice = 0;
let hasDiscountItem = false;

cartItems.forEach(item => {
    totalPrice += item.price;
    if (item.type === ItemType.DISCOUNTABLE) {
        hasDiscountItem = true;
    }
});

解析:

  • l → \to → cartItems:表明它是集合,且存放的是商品。
  • f → \to → hasDiscountItem:布尔值前缀,含义一目了然。

4. 函数与方法的命名 (Naming Functions & Methods)

4.1 理论基础 (Theory)

  1. 使用动词 (Verbs): 函数执行动作,必须以动词开头。
  2. 动词+名词结构: verbObject (例如 getUser, postPayment)。
  3. 单一职责暗示: 如果函数名包含 And (例如 validateAndSave),通常意味着该函数做的事情太多了,应该拆分。
  4. 一致性: 动作词汇要统一。
    • 不要混用 fetch, retrieve, get 来表示同一个动作。
    • 不要混用 delete, remove, destroy。

4.2 常用动词对照表

动作类型推荐动词示例
获取数据get, fetchgetUserById
查询判断is, has, canisValid
数据转换to, parse, formattoString, parseJson
执行操作create, update, deletecreateAccount
计算逻辑calculate, computecalculateTax

4.3 序列图示例 (Sequence Diagram)

好的方法命名能让调用流程像讲故事一样清晰。

InventoryRepo OrderService Client InventoryRepo OrderService Client ❌ 糟糕的命名:无法预知副作用 ✅ 好的命名:意图清晰 process(order) check() true update() placeOrder(order) isStockAvailable(order.id) true reserveStock(order.id)

4.4 源码示例 (Examples)

❌ 模棱两可:

public void handle(User user) {
    // 到底是保存用户、删除用户还是发送邮件?
    // 这个名字没有任何信息量
}

✅ 意图清晰:

public void registerUser(User user) {
    validateUserInfo(user);
    userRepository.save(user);
    sendWelcomeEmail(user);
}

5. 类的命名 (Naming Classes)

5.1 理论基础 (Theory)

  1. 名词或名词短语: 类是对象的模板,应该是一个名词。
  2. 避免通用后缀: 尽量避免 Manager, Processor, Data, Info 这种“万金油”后缀,因为它们往往暗示类承担了过多责任(上帝类)。
  3. 设计模式体现: 如果使用了特定模式,可以在名字中体现,如 UserFactory, OrderBuilder, PaymentStrategy。

5.2 类的层级与命名

通过类图展示命名如何体现架构分层。

depend

use

DataHandler

+doStuff()

MyCommon

+util()

UserAuthenticationService

+login()

+logout()

PasswordEncoder

+encode()

UserRepository

+findById()

+save()

名字太宽泛,不知道负责什么数据

具体且单一职责

5.3 源码示例 (Examples)

❌ 糟糕的命名:

class Program:
    # 这是一个具体的业务类,却叫 Program?
    def execute(self):
        pass

class Info:
    # 什么信息?
    pass

✅ 优雅的命名:

class ReportGenerator:
    # 明确:它是生成报告的
    def generate_pdf(self, data):
        pass

class CustomerProfile:
    # 明确:它是客户资料实体
    def __init__(self, name, address):
        self.name = name
        self.address = address

总结 (Conclusion)

好的命名不仅仅是代码风格的问题,它是一种以读者为中心的编程思维。

  • Variables 就像故事中的角色,要有清晰的身份(名词)。
  • Functions 就像角色的动作,要有明确的行为(动词)。
  • Classes 就像故事的场景或归类,要有具体的定义(具体名词)。

当你为了给一个变量起名而停顿思考时,不要感到浪费时间。你在为未来阅读这段代码的所有人(包括两周后的你自己)节省数小时的调试时间。

Action Item: 在今天的 Code Review 中,试着挑出一个命名不清晰的变量,并重构它。

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

相关推荐

【扩展卡尔曼滤波器EKF】基于UWB雷达的SLAM能够在室内环境内映射自然点地标,并改善机器人定位(Matlab代码实现)

内容概要:本文档提供了名为“Plecs全桥LLC谐振变换器仿真模型”的资源,主要用于电力电子领域中LLC谐振变换器的建模与仿真研究。该模型基于Plecs软件平台构建,聚焦于全桥LLC拓扑结构,涵盖其工作原理、关键参数设计及动态性能仿真,帮助用户深入理解LLC谐振变换器在软开关、高效率功率转换方面的特性与实现方法。文档内容包括系统建模、主电路参数计算、控制策略实现以及仿真结果分析等部分,适用于高频高效电源变换器的研发与教学实践。; 适合人群:具备电力电子与电力系统基础知识,从事电源变换器设计、仿真与优化工作的工程师及高校研究生。; 使用场景及目标:① 掌握LLC谐振变换器的工作机理与Plecs仿真建模流程;② 学习全桥LLC拓扑的参数设计与软开关实现方法;③ 为高频高效DC-DC变换器的科研、课程设计或工程项目提供仿真基础和技术参考。; 阅读建议:建议结合电力电子技术教材与Plecs官方文档同步学习,重点理解谐振腔参数(如Lr、Cr、Lm)对增益特性与软开关的影响,并通过调整仿真参数验证不同工况下的系统响应,以加深对LLC变换器设计规律的理解。

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

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

tianyuanwo的专栏 706

5G NR 双连接与载波聚合:PCell、SCell、PScell、SpCell 角色全解析

本文全面解析了5G NR中双连接与载波聚合技术的关键概念,详细介绍了PCell、SCell、PScell和SpCell的角色与功能。通过实际案例和配置示例,帮助读者理解这些小区在提升网络覆盖和速率方面的作用,以及在实际组网中的优化策略。

weixin_33220360的博客 373

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

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

TracyCoder的博客 1476

从零构建:基于Docker与FRR的OSPF虚拟网络实验室

本文详细介绍了如何利用Docker与FRR构建OSPF虚拟网络实验室,从环境设计到高级网络拓扑配置,再到实验验证与排错。通过容器化技术实现高效资源利用和快速部署,特别适合网络协议教学、企业网络架构验证等场景。

plum99的博客 221

TCN实战:用Python手把手搭建时序预测模型(附完整代码)

本文详细介绍了如何使用Python搭建TCN(Temporal Convolutional Network)时序预测模型,包括数据预处理、模型架构实现、训练调优及预测评估。通过完整的代码示例和实用技巧,帮助开发者快速掌握TCN在时间序列预测中的应用,特别适合处理长期依赖问题。

weixin_29041195的博客 372

Clean Code中的命名艺术与最佳实践

在软件开发中,良好的命名规范是编写Clean Code的基础要素之一。命名作为代码的标识符,直接影响代码的可读性、可维护性和团队协作效率。从技术原理看,合理的命名需要遵循名副其实、避免误导等基本原则,同时结合具体编程语言的命名约定。在工程实践中,变量、函数、类等不同编程元素的命名策略各有特点,例如变量名应体现业务含义,函数名应使用动词短语明确表达行为。通过自动化工具如SonarQube、ESLint等可以辅助检查命名规范。良好的命名能显著降低代码理解成本,研究表明可提升40%的阅读速度。在微服务架构、领域驱

weixin_33507732的博客 217

新代永久解锁西门子smart S7-200PLC 上传程序步骤

西门子 SMART S7-200 PLC 程序上传步骤 打开编程软件 或左下角依次打开 程序 所有程序 Siemens Automation Simatic STEP 7-MicroWIN SMART V2.4 STEP 7-MicroWIN SMART 技术交流 plcjiesuo1 2. 确认plc电源端以及输入电压; 3.用网线连接plc与电脑技术交流 plcjiesuo1 4.plc通电; 5.打开编程软件,双击通讯 6.按照...

m0_60773720的博客 2万+

clean-code-typescript核心原则:函数命名的艺术

你是否曾在维护他人代码时,面对`processData()`或`handleEvent()`这类函数名感到困惑?是否因`getData()`与`fetchData()`的细微差异而浪费时间?在TypeScript开发中,函数命名不仅是语法要求,更是团队协作的隐形契约。本文将从实际案例出发,系统讲解[clean-code-typescript](https://link.gitcode.com/i/...

gitblog_00415的博客 620

从勒索软件攻击到数据重生:SQL Server MDF文件修复的实战生存指南

本文详细介绍了SQL Server MDF文件在遭遇勒索软件攻击后的修复策略,重点解析了Recovery Toolbox工具链的应用流程。从灾难评估到数据验证,提供分阶段修复操作、高级修复技术及防御加固方案,帮助企业快速恢复数据库并提升安全防护能力。

weixin_28327051的博客 715

AI智算-K8s+vLLM & Ray:DeepSeek-r1 671B 满血版分布式推理部署实践

自从上次发布 【AI-智算】K8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略] 文章后,本次将演示另一个主流推理引擎工具——vLLM,结合K8s、LWS、Ray、Volcano等技术栈,部署DeepSeek-r1 671b 满血版分布式推理集群,并对比其与SGLang推理引擎的性能表现。

Kason_iWiki 1824

JavaScript变量命名黄金法则:Clean Code JavaScript ES深度解析

在JavaScript开发中,变量命名看似简单,实则是影响代码可读性和可维护性的关键因素。遵循Clean Code JavaScript ES规范的变量命名原则,能够让你的代码更加专业、易懂且易于维护。本文将深入解析JavaScript变量命名的核心法则,帮助开发者写出既符合规范又易于理解的高质量代码。 ## 为什么变量命名如此重要? 变量命名是代码可读性的基石。一个好的变量名能够清晰地表达其

gitblog_01144的博客 1080

Python爬虫实战:爬取国家企业信用信息公示系统(最新反反爬技术解析)

在当今大数据时代,企业信用数据对于市场分析、风险评估和商业决策具有重要价值。国家企业信用信息公示系统作为官方权威的企业信息平台,包含了全国各类企业的注册信息、行政处罚、经营异常等关键数据。复杂的反爬机制(动态Token、验证码、请求频率限制)数据渲染方式多样(部分内容由JavaScript动态加载)法律与合规风险(需遵守《网络安全法》和网站Robots协议)本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的企业信用信息爬虫,并重点解析应对各种反爬策略的解决方案。

2201_76125261的博客 2695

clean code阅读笔记——如何命名?

有个词叫做”以小见大“。以建筑作喻,宏大建筑中最细小的部分,比如关不紧的门、未铺平的地板,甚至时凌乱的桌面,都会将整个大局的魅力毁灭殆尽,这就是整洁代码之所系。

leedcanDD的博客 1322

【2024遥感应用组一等奖】基于时空融合和水量平衡法的若尔盖高原水源涵养功能评价

考虑到水源涵养的概念和尺度特征、数据的可获得性、模型的模拟精度等,构建了一种基于遥感、气象和水量平衡原理的草原湿地水源涵养评价方法,估算若尔盖湿地近23年(2000-2022)来的水源涵养量。若尔盖湿地是我国黄河源区的重要水源地,所以本研究以若尔盖湿地的水源涵养功能评估为科学问题,基于遥感数据、GIS数据等,利用水量平衡原理,发展计算简单、便捷、数据易获取的“水源涵养估算方法”,科学估算若尔盖湿地水源涵养服务量,探究其时空动态变化趋势及其影响因素;公式中,Z1和Z2为两个不同高度面的高度,u为摩擦速率;

JData_Engineer的博客 239

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

PHP变量命名艺术:Clean Code的最佳实践

PHP变量命名艺术:Clean Code的最佳实践 【免费下载链接】clean-code-php 项目地址: https://gitcode.com/gh_mirrors/cle/clean-code-php ...

gitblog_00081的博客 407

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PHP变量命名误区:clean-code-php教你如何避免

在PHP开发中,**变量命名**看似简单,实则暗藏玄机。clean-code-php项目为我们提供了一套完整的**PHP变量命名规范**,帮助开发者写出更加清晰、易维护的代码。今天,我们就来探讨PHP变量命名中常见的误区,以及如何通过clean-code-php指南来避免这些问题。 ## 💡 为什么要重视变量命名? **变量命名**不仅仅是给变量起个名字那么简单,它直接影响到代码的可读性、可

gitblog_01075的博客 983

visio安装包

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python心理映射消除:clean-code-python循环变量命名技巧

在Python编程中,循环变量命名是一个经常被忽视但极其重要的细节。clean-code-python项目为我们揭示了如何通过合理的命名技巧消除"心理映射"问题,让代码更加清晰易懂。😊 ## 什么是心理映射问题? **心理映射**指的是读者在阅读代码时需要在大脑中"翻译"变量含义的过程。当我们使用模糊的变量名时,比如在for循环中使用`item`、`obj`或`x`,其他人(包括未来的你)需

gitblog_00114的博客 848

探索《Clean Code in Python》:编写优雅高效的Python代码的艺术

在这个链接中,你可以找到由Packt Publishing提供的开源项目——。这本书的目标是帮助Python开发者提升编码风格,实现代码的可读性、可维护性和高效性。 ## 项目概述 《Clean Code in Python》是一个全面的指南,它深入探讨了Python编程中的最佳实践和设计原则。项目通过一系列示例和练习,教你如何避免常见的编程陷阱,编写出整洁、易读且易于合作的代码。 ## 技

gitblog_00077的博客 565

Clean Code JavaScript 教程

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

gitblog_00958的博客 557

Python搜索友好命名:clean-code-python常量设计最佳实践

在Python开发中,**常量设计**是编写高质量代码的关键环节。一个优秀的常量命名不仅能提升代码可读性,还能让代码更易于维护和扩展。今天,我们将深入探讨clean-code-python项目中关于**搜索友好命名**的最佳实践,帮助你在Python项目中设计出更加优雅的常量。✨ ## 为什么常量命名如此重要? 良好的常量命名是**Python代码质量**的重要体现。当你的常量名称能够清晰地表

gitblog_00230的博客 933

终极指南:掌握clean-code-php变量命名规范的10个关键技巧 [特殊字符]

作为PHP开发者,你是否曾为混乱的变量名而头疼?clean-code-php项目为你提供了完整的PHP代码整洁解决方案,其中**变量命名规范**是提升代码可读性和维护性的关键所在。本文将为你详细解析clean-code-php变量命名规范的核心原则,让你轻松写出专业级代码。 ## 📊 为什么变量命名如此重要? 在clean-code-php项目中,变量命名被视为代码质量的第一道防线。良好的变

gitblog_00195的博客 1163

Clean Code: 程序员的自我修养

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

MangoGO的博客 1417

10个JavaScript变量命名黄金法则:clean-code-javascript实战技巧

作为一名JavaScript开发者,你是否曾经在阅读自己几周前写的代码时感到困惑?变量命名是编写可读、可维护代码的关键要素。今天,我们将基于clean-code-javascript项目,分享10个实用的变量命名黄金法则,帮助你的代码质量提升到一个新的水平!🚀 ## 📝 为什么要关注变量命名? 良好的变量命名不仅仅是个人习惯,它直接影响着代码的可读性、可维护性和团队协作效率。根据clean

gitblog_00329的博客 516

PHP变量命名终极指南:clean-code-php教你避免上下文冗余

在PHP开发中,变量命名是提升代码可读性和可维护性的关键环节。clean-code-php项目作为PHP代码规范的实践指南,提供了丰富的变量命名最佳实践。本文将结合该项目的核心思想,教你如何通过科学的命名方式消除上下文冗余,写出专业且易于理解的PHP代码。 ## 为什么变量命名如此重要? 变量名是代码的"脸面",一个好的变量名能够: - 减少注释需求,让代码自我解释 - 加速团队协作,降低沟通

gitblog_00002的博客 614
上一篇: Langchain框架从入门到实战开发
下一篇: Clean Code (3):注释与代码格式化
TracyCoder123
博客等级 码龄8年 1万+粉丝 226原创
评论 2
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值