代码异味 - 非命令式函数名称
一定要!!
TL;DR:名称不明确的函数隐藏了意图并使读者感到困惑。使用描述性的、面向行动的名称。
问题
- 功能用途不明确
- 认知负荷增加
- 误导性上下文
- 可读性降低
- 艰难的合作
- 隐藏功能
解决方案
- 使用面向动作的动词
- 使名称具有描述性
- 反映函数的目的
- 避免通用术语
- 提供有意义的上下文
- 明确表达单一责任
- 将行动与结果相匹配
重构

重构 005 - 用函数名称替换注释
马克西·孔蒂耶里 ・22 年 6 月 7 日
语境
以通用术语命名的函数迫使读者深入研究实现以理解其行为。
这会浪费时间并增加出错的机会。
在使用独立函数时,命名变得更加重要,因为类名称不提供额外的上下文。
这个问题直接关系到告诉,不要问的原则。
命令式名称不会暴露迫使调用者推断功能的模糊行为,而是传达确切的操作,引导读者无需检查代码。
当您以描述性方式命名函数时,您可以消除不必要的猜测并符合这一原则。
示例代码
错误的
public String dateFormatting(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); } public void load() { System.out.println("Loading..."); }
正确的
public String formatDate(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); } public void loadUserPreferences() { System.out.println("Loading user preferences..."); }
检测
[X] 手册
您可以通过检查使用模糊术语的函数名称来检测这种气味,例如 do、run、process、load 等
自动 linter 可以标记这些模式或突出显示具有过于通用名称的函数。
标签
- 命名
等级
[X] 初学者
为什么双射很重要
函数名称应该在其名称和功能之间创建清晰的一一对应关系。
打破这种双射会迫使开发人员检查代码细节以了解上下文,从而减慢调试、审查和扩展速度。
人工智能一代
人工智能工具有时会在不了解您的领域的情况下生成通用函数名称。
使用 AI 时,指定函数名称必须具有描述性且面向操作。
人工智能检测
人工智能模型可以通过将函数签名与预定义的命名最佳实践进行比较来帮助检测不明确的名称。
将人工智能与手动代码审查相结合会产生最佳结果。
尝试一下!
记住:人工智能助手会犯很多错误
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
结论
函数名称不仅仅是标签;它们是与读者的合同。
不明确的名称会破坏此契约并导致混乱。
描述性的、面向操作的名称简化了沟通,并使您的代码更易于维护和扩展。
关系

代码气味 33 - 缩写
马克西·孔蒂耶里 ・ 十一月 24 '20

代码气味 153 - 名字太长
马克西·孔蒂耶里 ・ 2022 年 7 月 29 日

代码气味 38 - 抽象名称
马克西·孔蒂耶里 ・ 2020 年 11 月 30 日

代码气味 174 - 属性中的类名称
马克西·孔蒂耶里 ・22 年 10 月 29 日
参见

名字到底是什么? — 第一部分:探索
马克西·孔蒂耶里 ・ 21 年 2 月 9 日

名字到底是什么 - 第二部分康复
马克西·孔蒂耶里 ・21 年 5 月 23 日
免责声明
代码味道是我的观点。
制作人员
照片由 unsplash 上的 britishlibrary 拍摄
函数名称应该是动词或动词短语,并且需要是
有意义
罗伯特·C·马丁

软件工程精彩名言
马克西·孔蒂耶里 ・ 2020 年 12 月 28 日
本文是 CodeSmell 系列的一部分。

如何查找代码中的臭部分
马克西·孔蒂耶里 ・ 21 年 5 月 21 日
以上是代码异味 - 非命令式函数名称的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。
