为什么你的代码总是难读?可能是命名出了问题 📅 发布时间:2026/7/8 6:21:32 👁️ 浏览次数: 在阅读《重构改善既有代码的设计》时第一条坏味道就是Mysterious Name神秘命名。很多代码的问题其实不是逻辑复杂而是名字太差。好的命名应该清晰表达变量的用途和业务含义。在所有重构手法中改名Rename是最常用、也最值得投入时间的操作。如果你发现自己想不出一个好名字往往说明代码背后可能存在设计问题。一、为什么命名这么重要代码阅读的成本大部分来自理解变量含义。例如letdata{}letobj{}lettemp[]这些名字几乎没有提供任何信息。而如果写成letcustomer{}letorderList[]lettotalPrice0读者几乎不用思考就能理解代码。所以命名的本质是降低理解成本。二、如何命名实践经验结合书中的建议和自己的实践我总结了几个常用原则。1. 表达业务含义而不是技术细节不要写data obj tmp而是customer orderList totalPrice命名应该反映业务语义。2. 避免无意义缩写例如usr cfg msgLst可读性很差。更好的写法user config messageList除非是非常通用的缩写idurlapidb否则尽量避免。3. 命名体现数据结构名字最好能反映数据结构。例如customer // 单个对象 customers // 数组 customerList // 列表对于 Map / DictionarycustomerById userById productIndex这种命名在大型代码库中非常常见。4. 在 JS/TS 中补充类型信息《重构》里提到一句话在 JavaScript 这样的动态类型语言中我喜欢把类型信息也放进名字里。例如aCustomer我觉得这个实践在 JS / TS 中仍然有价值。常见命名模式单个对象customer aCustomer集合customers customerListMap / 字典customerMap customerById productIndex布尔值isActive hasPermission canEdit即使在TypeScript 时代命名依然重要。因为很多代码库虽然用了 TS但实际写法仍然接近 JS。而好的命名可以显著降低阅读成本。事实上很多源码如 Vue / React也大量采用这种实践。5. 根据作用域控制命名长度命名不是越长越好而是与作用域匹配。局部表达式例如array.map(xx.id)一个字母完全没问题。短函数参数functionsum(a, b){returna b}简短即可。跨函数或复杂业务变量如果变量在多个函数中使用就需要更明确的命名currentLoginUser selectedCustomerList pendingPaymentOrders三、封装变量Encapsulate Variable书中的另一个建议是如果变量被广泛使用可以考虑封装变量。核心思想是不要让变量被随意修改。例如letprice100改为functiongetPrice(){returnprice}functionsetPrice(value){pricevalue}这样可以控制修改入口降低耦合更容易维护本质上就是将数据访问收敛到函数中。四、注意“已发布变量”书中还有一个非常重要的概念Published Variable已发布变量如果变量已经被外部代码使用就不能随便重构。例如npm 包 APISDK 导出变量服务接口字段window/global 全局配置示例window.APP_CONFIG如果你直接重命名很可能会导致外部系统崩溃。正确做法应该是兼容迁移旧变量 -标记废弃 -用户迁移 -大版本删除例如// deprecated window.APP_CONFIGconfig window.appConfigconfig等用户迁移完成后在下一次 major version 删除旧变量。五、引申代码所有权边界这背后其实是一个更大的设计理念代码所有权边界Ownership Boundary一个真实系统往往包含librarySDKAPI服务数据库如果没有明确的边界就无法判断哪些代码可以安全重构哪些不可以。所以重构的前提是清楚代码的边界。六、安全重命名的一种技巧如果变量是不可变的可以采用一种更安全的方式重命名。例如const oldVarPUBLIC_KEY_STRING步骤1️⃣ 新建变量const newVarPUBLIC_KEY_STRINGconst oldVarnewVar2️⃣ 逐步替换使用代码3️⃣ 每次修改后运行测试4️⃣ 最终删除旧变量这样做的原因是JavaScript 可能存在动态访问obj[oldVar]如果直接替换很容易漏掉。因此重命名之后一定要跑测试。七、IDE 的重命名重构很多人会用全局搜索替换。但这其实不是重构功能很容易改错。现代 IDE 都支持语义级 Rename。常见快捷键IntelliJ IDEAShift F6VSCodeF2VSCode 依赖Language Server Protocol (LSP)才能正确识别符号引用。总结好的命名本质是让代码更容易理解。核心原则1️⃣ 表达业务语义而不是技术细节2️⃣ 避免无意义缩写3️⃣ 命名体现数据结构4️⃣ 在 JS/TS 中适当补充类型信息5️⃣ 根据作用域控制命名长度另外要注意已发布变量不要随便重构理解代码所有权边界使用 IDE 的 Rename 功能
脑机接口公司Science获得2.3亿美元融资 脑机接口和其他医疗设备开发商Science Corp.今日宣布获得2.3亿美元融资。这笔资金来自包括Lightspeed、Khosla Ventures、Y Combinator、IQT和Quiet Capital在内的财团。Science的外部融资总额现已达到4.9亿美元。该公司的旗舰产品是名为PRIMA的脑机接口设备。它旨在为受晚期黄… 2026/7/7 22:53:10
C++ 排序 插入排序(Insert Sort):将待排序的元素按照关键字的大小插入到前面已有序列中const int N 1e6 10; int n; int a[N]; void insert_sort() {//依此枚举待排序的元素 for(int i 2; i < n; i) //第一个位置默认是有序的 {int key a[i];//前面比key大的ÿ… 2026/7/4 2:35:59
未使用try-with-resources自动管理资源:Java资源泄漏的隐患与解决方案 在Java开发中,资源管理是一个至关重要的环节。无论是I/O操作、数据库连接还是网络套接字,这些资源都需要被正确打开和关闭,否则会导致内存泄漏、文件句柄耗尽或数据库连接池枯竭等严重问题。然而,许多开发者仍然在使用传统的try-c… 2026/7/7 11:01:48
万用表使用场景 我们就从最实用的场景讲起,再深入解释一个常见现象——为什么1.5V的电池,测出1.2V就算“没电”了。一、什么时候需要使用万用表?当你看不见电流,又想知道电是否“通”、电压是否“对”、零件是否“坏”的时候,就用万用… 2026/7/8 6:20:51
B站视频秒变AI知识库:免费插件实现高效技术学习 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也有这样的经历:B站收藏夹里塞满了各种教程、技术分享、科普视频,但真正需要的时候却找不到ÿ… 2026/7/8 6:18:51
STM32G0B1RE与TPIS1S1385实现高精度人体存在检测方案 1. 项目背景与核心需求在智能家居和工业自动化领域,精确的存在感应和运动检测一直是关键技术痛点。传统红外传感器(PIR)存在检测距离短、易受环境温度影响等问题,而基于雷达的解决方案又往往成本过高。TPIS1S1385这款数字红外热电堆传感器与STM32G0B1RE微… 2026/7/8 6:16:50
2026抖音实况动图去水印方法:实况图无水印保存手机教程 抖音实况动图凭借动态鲜活的视觉效果,成为很多人日常收藏、素材整理、个人作品备份的常用内容形式。但平台默认保存的实况图、动态素材,几乎都会自带官方水印、角标、飘字标识,不仅影响画面整洁度,也不利于个人素材的规整收藏与二… 2026/7/8 6:14:50
10-30V直流,每轴1.9A RMS——六轴控制集成度做到这个水平,只需一块TMCM-6214 在多轴运动控制领域,工程师们经常面临一个两难的选择:是忍受多个单轴驱动板带来的复杂布线和庞大电控箱,还是为了体积而牺牲电流和闭环功能?今天我们要聊的这款六轴步进电机控制模块——TMCM-6214,试图用极高的集成度来… 2026/7/8 6:10:50
从曝光、触达到留存:现代企业必备的全链路商务营销工具 当下多数企业营销都存在明显短板:只做曝光引流,缺少承接、沉淀与复盘,流量看似不少,实际转化极低、线索大量浪费。传统碎片化营销模式,早已满足不了企业长效拓客需求。现代企业想要稳定获客,必须打通曝光、… 2026/7/8 6:08:49
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58