当前位置: 首页 > news >正文

【经典书籍】《代码整洁之道》第二章“命名”精华讲解

 

“命名(Meaningful Names)”核心原则、常见陷阱、实用技巧与哲学思考,保证学完不仅知道“怎么起名”,还能起得清晰、起得优雅、起得专业!


📖《代码整洁之道》第二章:命名(Meaningful Names)

—— 你也可以叫它:

  • “为什么你的变量名叫 data、temp、a,简直是在折磨队友?”

  • “好名字,能让代码自己‘说话’!”

  • “命名不是随便取,而是精心设计!”

  • “代码即沟通,命名即表达!”


一、🎯 本章核心主题(一句话总结)

“代码的可读性,从命名开始。好的命名,能让代码清晰、易懂、自解释;坏的命名,会让代码像天书,让维护者想骂人。”

换句话说:

“命名不是‘随便取个代号’,而是你写代码时,对‘这段代码是干嘛的、这个变量代表什么、这个函数做了什么’的精准表达。”

原书作者 Robert C. Martin(Uncle Bob) 说:

“命名很重要。命名必须明确传达意图。如果名称需要注释来补充,那就不算好名称。”


二、🔍 为什么“命名”如此重要?(命名即沟通)


✅ 1. 代码是写给人看的,机器只是顺便执行一下

  • 你写代码,不是为了“感动编译器”,而是为了让:

    • 同事能看懂

    • 未来你能记得

    • 测试能顺利写

    • 产品能理解逻辑(至少看懂字段)

🧠 代码首先是沟通工具,其次才是执行指令。而命名,是沟通的第一步。


✅ 2. 坏名字 = 代码可读性归零 = 维护成本爆炸

坏名字的例子你看到后的内心 OS
data()这是啥数据?用户数据?订单数据?还是空气数据?😵
temp这个临时变量,存的是啥?临时到啥时候?🤔
flag这个布尔值,代表啥意思?成功?失败?开关?🚩
a, b, c……你是想让我猜谜吗?🔍
processData()这个函数,处理数据?怎么处理?处理啥数据?🤷

🧠 坏名字,让代码像一封没有署名、没有主题、没有内容的邮件 —— 你根本不知道它想干啥。


✅ 3. 好名字,让代码自解释,减少注释,提升可读性

好名字的例子你看到后的内心 OS
userList啊,这是一个用户列表,清晰!👍
isValidUser()这个函数是判断用户是否有效,直观!✅
maxRetryCount最大重试次数,不用猜!🔢
calculateTotalPrice()计算总价,逻辑一目了然!💰
orderItems订单项,语义明确!📦

🧠 好名字,就像好的路标,让人一眼就知道该往哪走。


三、🧠 二、如何取好名字?(Uncle Bob 的 7 大命名原则)


✅ 原则 1:“名副其实(Meaningful)” —— 名字要准确表达意图

“名字应该告诉你,它是什么、为什么存在、做了什么。”

🔧 反面例子:

  • data → 不知道是什么数据

  • flag → 不知道是啥标志

  • process() → 不知道处理了啥

🔧 正面例子:

  • userData → 用户数据

  • isLoggedIn → 是否已登录

  • validateEmailFormat() → 验证邮箱格式


✅ 原则 2:“避免误导(Avoid Misleading)” —— 别让名字骗人

“不要取一个和实际含义不符的名字,别让别人误解。”

🔧 反面例子:

  • accountList 表示一个 数组,但实际上是个 Map

  • moneyAmount 表示的是 ,而不是

🔧 正面例子:

  • 如果是 Map,就叫 userAccountsById

  • 如果是分,就叫 moneyInCents


✅ 原则 3:“做有意义的区分(Meaningful Distinction)” —— 不要用无意义的字母或数字区分

“不要为了区分而区分,取的名字要有意义。”

🔧 反面例子:

  • data1, data2 → 区分个啥?不知道区别是啥

  • processData()processData2() → 2 是啥意思?优化版?第二版?

🔧 正面例子:

  • userDataadminData → 区分用户类型,清晰

  • validateEmail()validatePhoneNumber() → 区分校验对象,直观


✅ 原则 4:“使用可读的名称(Readable)” —— 别用缩写、别用拼音、别让人猜

“名字要让人一眼能读出来、能理解,别让人去猜。”

🔧 反面例子:

  • usr(user 的缩写)→ 不如直接写 user

  • calcAmt()(calculate amount 的缩写)→ 不如写 calculateAmount()

  • xfk()(“销售反馈”拼音首字母???)→ 你猜,我猜,大家猜

🔧 正面例子:

  • calculateTotalPrice() → 清晰直白

  • getUserById() → 简洁但可读


✅ 原则 5:“使用可搜索的名称(Searchable)” —— 别用太常见或太短的词

“名字要能在代码库里被轻松搜到,别用单字母或太通用的词。”

🔧 反面例子:

  • e 表示 Exception,用 d 表示 Data → 搜都搜不出来

  • data 做变量名,结果代码里 100 处都是 data,找都找不到

🔧 正面例子:

  • maxRetryCountorderItemList → 有业务含义,容易搜


✅ 原则 6:“避免编码(Avoid Encoding)” —— 别把类型信息硬编码到名字里

“不要用匈牙利命名法(比如 iCount, strName),现代 IDE 已经能提示类型了。”

🔧 反面例子:

  • iCount(int count)、strName(String name)→ 冗余,现代语言不需要

  • boolFlag → flag 本身就能表示布尔值

🔧 正面例子:

  • 直接用 countnameisLoggedIn → 更简洁,更清晰


✅ 原则 7:“类名与方法名要有区分(Class vs Method Naming Conventions)”

类型命名风格说明
类名(Class)名词或名词短语(如 OrderService, UserRepository类是“东西”,用名词
方法名(Method)动词或动词短语(如 calculateTotal(), getUserById()方法是“动作”,用动词

🔧 正面例子:

  • 类:PaymentGateway, InvoiceGenerator

  • 方法:sendEmail(), validateForm()


四、🎯 总结:好命名的 7 大原则(表格版,幽默加强版)

原则说明坏例子好例子
名副其实名字要准确表达它是啥、干啥的data()userData
避免误导别让名字骗人accountList(其实是 Map)userAccountsById
有意义区分别用无意义的数字 / 字母区分data1, data2userData, adminData
可读性别用缩写、拼音,要让人读懂usr, calcAmt()user, calculateAmount()
可搜索别用太短、太常见的词d, emaxRetryCount, orderList
避免编码别把类型硬编码进名字iCount, strNamecount, name
类与方法区分类用名词,方法用动词getData()(类名?), User1(方法?)UserRepository, getUser()

五、🎬 场景化类比:命名就像“给人起名字”

类比坏名字好名字说明
给人起名叫“张三”、“无名氏”、“那个谁”叫“李开发”、“王测试”、“刘架构”好名字有含义、好记、好区分
给宠物起名叫“狗”、“它”、“那只”叫“旺财”、“咪咪”、“小白”好名字让人一看就知道是谁
给变量起名叫“data”、“a”、“temp”叫“userList”、“totalPrice”、“isValid”好名字让人一看就懂是啥

🧠 命名,就是你对代码的“尊重”,也是对团队和未来的自己的“善意”。


🏁 结束语:“好的命名,是整洁代码的第一步”

“命名不是小事,它是代码可读性的起点,是团队协作的基石,是软件质量的保障。”

“取一个好名字,就像写一句好文案 —— 简洁、清晰、有力量。”

“从今天开始,别再取 datatempa 这种名字了,让你的代码,从名字开始,变得专业、清晰、优雅!”

 


下面,我将用一种你一定会喜欢的风格,逐个击破这三个问题,保证你不仅知其然,还能知其所以然,从此对“命名”这件事,从轻视到重视,从随意到严谨,从“随便取”到“精心设计”。


🧠 一、为什么命名如此重要?

(命名,是代码可读性的起点,是沟通的第一语言)


🎯 核心思想一句话:

“代码是写给人看的,机器只是顺便执行一下;而命名,是你写代码时,对‘这段代码是干嘛的、这个变量代表什么、这个函数做了什么’的第一句‘自我介绍’。”


🧠 1. 代码首先是“沟通工具”,其次才是“执行指令”

  • 你写代码,不是为了“感动编译器”,而是为了:

    • 让同事能看懂

    • 让未来的你(三个月后)能记得

    • 让测试能写用例

    • 让产品能理解逻辑(至少看懂字段)

    • 让新成员能快速上手

🧠 如果代码是一篇文章,那么命名就是它的“词汇”和“句子结构”;如果代码是一栋建筑,那么命名就是它的“路标”和“房间名称”。


🧠 2. 命名直接影响代码的可读性

  • 好名字 → 代码像文章一样流畅,逻辑清晰,一目了然

  • 坏名字 → 代码像天书一样难懂,逻辑模糊,处处踩坑

📊 研究表明:开发者在阅读代码时,70% 以上的精力都花在“理解变量、函数、类的含义”上。

👉 所以,命名不好,代码可读性直接归零,维护成本指数上升!


🧠 3. 命名是团队协作的“共同语言”

  • 在团队项目中,代码不是你一个人的,是大家的。

  • 如果你用 datatempaflag 这种模糊的命名,别人(包括未来的你)看了只会一头雾水。

🧠 好的命名,是团队高效协作的基础;坏的命名,是沟通障碍和 bug 的温床。


🧠 4. 命名影响代码的长期维护与演进

  • 代码是会“活”很久的,可能运行几年、被改几十次、被无数人维护。

  • 如果你当初命名不清晰,后来的人(包括你自己)根本不知道这段代码是干嘛的,改起来就会胆战心惊,很容易引入 Bug。

🧠 命名,是给未来的自己和其他开发者,留的一张“说明书”。


✅ 总结一句话:

“命名不是小事,它是代码可读性的起点,是团队协作的基石,是软件质量的保障,是你专业素养的直接体现。”


🧠 二、什么是坏名字?(误导的、模糊的、难懂的命名,有什么危害?)


🎯 核心思想:

“坏名字,就是那些让人看了一头雾水、猜来猜去、甚至误解代码含义的命名。”

它们通常具备以下“几宗罪”:


❌ 1. 误导(Misleading)—— 名不副实,让人误解

“名字和实际含义不符,让别人以为你在做 A,其实你在做 B。”

🔧 反面例子:

  • 变量名 accountList,但实际上是一个 Map,不是 List!

  • 函数名 processData(),但实际只处理了部分数据,不是全部!

  • 变量名 flag,但没人知道这个布尔值代表“是否启用”还是“是否出错”

👉 结果:别人(包括你自己)看代码时,理解错误,逻辑混乱,Bug 满天飞!


❌ 2. 模糊(Vague / Unclear)—— 看了不知道是啥

“名字起得太笼统、太随意,完全没有表达清楚它的含义。”

🔧 反面例子:

  • data → 这是用户数据?订单数据?还是空气数据?

  • temp → 这个临时变量,存的是啥?什么时候用?为啥叫 temp?

  • a, b, c → ……你是想让我猜谜吗?

👉 结果:代码像一封没有主题的邮件,你根本不知道它想说什么。


❌ 3. 难懂(Hard to Understand)—— 不直观、不清晰、需要额外解释

“名字复杂、缩写过多、语义模糊,让人看半天也看不懂。”

🔧 反面例子:

  • calcAmt() → 是计算金额?是哪个金额?人民币还是美元?

  • xfk() → “销售反馈”?拼音首字母?谁看得懂?

  • usr → 是 user 的缩写,但不如直接写 user 来得清晰

👉 结果:代码可读性差,团队协作效率低,新人上手难。


❌ 4. 无意义区分(Meaningless Distinction)—— 为了区分而区分

“用数字或无意义的字母来区分变量或函数,但实际没啥区别。”

🔧 反面例子:

  • data1, data2 → 区分个啥?内容一样?用途一样?

  • processData()processData2() → 2 是优化版?第二版?谁记得住?

👉 结果:名字没有传达任何有用信息,反而增加了混乱。


✅ 总结:坏名字的“四大罪状”(表格版)

坏名字类型说明例子危害
误导名字和实际含义不符accountList(其实是 Map)误解、逻辑错乱
模糊名字太笼统、看不出含义data, temp, a看不懂、猜谜语
难懂缩写过多、语义不清晰calcAmt(), xfk()阅读困难、沟通成本高
无意义区分为了区分而区分,无实际意义data1, data2, processData2()混乱、无价值

🧠 三、什么是好名字?(清晰、准确、可读、可搜索的命名,长什么样?)


🎯 核心思想:

“好名字,是那些一看就懂、一想就透、一搜就到、一用就对的命名。”

它们通常具备以下“优秀品质”:


✅ 1. 清晰(Clear)—— 准确表达意图

“名字要清晰地表达:它是啥?它做了啥?它代表了啥?”

🔧 好例子:

  • userData → 这是用户数据,清晰!

  • calculateTotalPrice() → 计算总价,一目了然!

  • isValidUser() → 判断用户是否有效,直观!


✅ 2. 准确(Precise)—— 名副其实,不误导

“名字要准确反映它的含义,不夸大、不缩小、不混淆。”

🔧 好例子:

  • maxRetryCount 表示最大重试次数,而不是模糊的 count

  • orderItemList 表示订单项列表,而不是简单的 list


✅ 3. 可读(Readable)—— 不用猜、不用缩写、不用拼音

“名字要让人一眼能读出来、能理解,不让人去猜。”

🔧 好例子:

  • calculateAmount() 而不是 calcAmt()

  • user 而不是 usr

  • emailAddress 而不是 ea


✅ 4. 可搜索(Searchable)—— 别用太短、太常见的词

“名字要能在代码库中被轻松搜到,别用单字母或太通用的词。”

🔧 好例子:

  • maxRetryCountorderItemList,而不是 ddata

  • 用有业务含义的词汇,让代码搜索更高效


✅ 5. 有表达力(Expressive)—— 像好文章一样,读起来像在讲故事

“好名字,让代码像文章一样流畅,逻辑清晰,自解释。”

🔧 好例子:

  • sendWelcomeEmailToNewUser() → 清晰表达业务意图

  • validateUserLoginInput() → 明确函数职责


✅ 总结:好名字的“四大优点”(表格版)

好名字特质说明例子好处
清晰准确表达它是啥、干啥的userData, calculateTotal()一看就懂
准确名副其实,不误导maxRetryCount, isValid()不误解
可读不用缩写、不用猜calculateAmount(), user易读易理解
可搜索别用太短、太通用的词orderItemList, maxRetry易搜索、易维护

🏁 最终大总结:命名的重要性,一图胜千言

问题本质好名字的价值
为什么命名重要?代码是写给人看的,命名是沟通的起点提升可读性、可维护性、团队协作效率
什么是坏名字?误导、模糊、难懂、无意义让代码难懂、难改、难维护,Bug 多
什么是好名字?清晰、准确、可读、可搜索让代码自解释、易理解、易协作、易演进

🔔

 

http://www.dtcms.com/a/583475.html

相关文章:

  • 全国城市雕塑建设官方网站免费网站推广网址
  • 傻瓜式网站建设新网网站备案流程
  • 乾安网站建设公司电话用jsp做网站步骤
  • 音乐网站建设策划wordpress插件翻译
  • 如何“优雅”地处理,影刀RPA创建文件文件夹时"含非法字符"的报错?
  • 汽车网站和移动端建设方案300500启迪设计
  • 广州做网站优化澄海区建设局网站
  • 彩票娱乐网站建设成都网站建设询q479185700霸屏
  • 杭州 做网站wordpress评论加强
  • 合肥网站seo诊断住房城乡建设部门户网站主页
  • 爱站网关键词挖掘工具熊猫八师石河子精神文明建设网站
  • 太仓市建设招标网站网站推广和优化的原因网络营销
  • 欧美做暧网站大学思政类网站建设
  • 企业网站建设投标书国内手机怎么上google浏览器
  • Linux29初识网络:核心概念与分层逻辑
  • 秦皇岛网站开发费用外贸专业网站制作
  • 建设网站应该怎么做淘宝网站品牌设计
  • 临沂做网站找哪家好怎么wordpress主题
  • 网站建设空间域名是什么意思一个空间安装多个织梦网站系统
  • 大品牌网站建设wordpress交友插件
  • 池州网站制作优化一般做外贸上什么网站
  • 海丰建设局网站天津建设工程信息网询
  • 建设网站必须要服务器吗网站 谁建设谁负责
  • 辽阳做网站网站后台安全
  • 烟台福山建设工程监测网站搜索引擎优化步骤
  • openEuler 22.03 LTS 在 VMware 虚拟机环境下的 CPU 与内存性能基准测试及分析
  • 淄川区建设局网站浏览器直接进入网站
  • 重庆祥云平台做网站网站页面设计师
  • 云服务器网站配置seo网站优化推广怎么样
  • 手机百度 网站提交宣传海报用什么软件做