《编写可读代码的艺术》---把信息装到名字里
把命名当成是一种注释的方式!
一个合适的名字,可以让它承载你要传递的信息。我们可以将其应用到变量、方法、类、接口、文件名等地方。
1:命名精准,避免泛泛
想想看你的代码中有这些词语吗?temp、item、data、result...这些都是泛泛的词语,我们完全可以结合上下文来赋予更加具体的值,比如result变量代表从数据库执行SQL语句的结果,我们可以使用isExcuteSuccess来代替。
再打个比方:循环中使用i,j来计数
想想看如果有三层循环,只使用i,j,k来存储每层的迭代值,那么在使用的时候有可能会搞混,但是如果使用具体的命名就会改善这个情况,比如循环全年级的学生,使用gradeIndex、ClassIndex,就比i、j要好。
2:职责明确,避免模糊
比如我们要过滤用户输入的文本包含的Sql注入代码,取个名字叫ClearUserInput,别人很难一眼就看出这个类的职责。,如果取成RemoveInjectSQL,我们就知道这个方法是用来清除注入SQL的(为何不加字符串部分,参考第五点,比如该方法是在StringHelper方法里面的就可以这样写)
3:描述命名对象当前的状态
描述密码是加密过的: EncryptedPassword
描述用户的ID是GUID类型的:UserGuid
描述URL是编码过的:EncodedURL
4:慎用首字母缩写
除非团队、业界已经形成约定,规定了某些特定名称的缩写方式(img->Image;btn->Button)之外,肆意使用首字母缩写来进行命名将会降低代码可阅读性,并有可能引起命名冲突
(本人实际项目中遭遇过使用缩写来命名数据库主键,结果合同表ContractRecord主键CRGUID和应诉案件CaseRespond主键CRGUID发生冲突)
很多朋友担心不使用缩写,会导致命名太长。这个时候你嘚观察下,命名对象的职责是否是单一的?
5:结合语境,给命名减肥
比如我们提供一个方法,将输入转化为字符串,你会怎么写?
ConvertToString(object obj)
这个命名有问题吗?没有!
但是如果有个合适的类来提供上下文语境,就可以再瘦身;比如它处于Convert类里面,它就变成了我们经常使用的
ToString(object obj)
6:均衡之道
如果按照以上方法,一个类下来,每个命名都是非常饱满的,写起来伤脑经,看起来很伤眼睛;那么什么情况下,可以适度精简呢?答案:命名对象的活跃程度(生命周期/引用频率等)。
短途旅行,你也会带上臃肿的行囊吗?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端