写点什么

专栏:代码之丑(六)——分家的声明和使用

  • 2010-11-29
  • 本文字数:1282 字

    阅读完需:约 4 分钟

这是一段长长的 C++ 代码,我的问题是:relaPri、relaSec 和 scoutBySec 这三个变量在哪里用到了?

复制代码
void DealForServiceA(const char *oprCode, const char *subID, const char *oID, XList *callCicsList) {
XString relaPri(“NULL”);
XString relaSec(“NULL”);
XString scoutBySec(“0”);
XList *tempList = new XList ;
callCicsList->Add(tempList);
tempList->Add(new XString(oprCode));
tempList->Add(new XString(oID));
XString *psTelNum = new XString;
tempList->Add(psTelNum);
GetServnumberBySubsID(subID, *psTelNum);
tempList->Add(new XString(relaPri.table { font-size: 10pt;}c_str()));
tempList->Add(new XString(relaSec.c_str()));
tempList->Add(new XString(scoutBySec.c_str()));
}

经过认真仔细的查看,或是使用传说的中“查找”功能,我们发现上面提到的那三个变量只在最后用了一下。

不知道你是否注意到,我在最初特意强调了一下这是 C++ 代码。这意味着,变量可以随用随声明,而不必像传统的 C 程序那样,只能在函数的开头把函数内部用到的变量一口气声明。 那么 ,我们就让声明和使用团聚吧!

复制代码
XString relaPri(“NULL”);
tempList->Add(new XString(relaPri.c_str()));
XString relaSec(“NULL”);
tempList->Add(new XString(relaSec.c_str()));
XString scoutBySec(“0”);
tempList->Add(new XString(scoutBySec.c_str()));

当声明和使用走到一起,我们的观察就有了新的视角,其实,这几个变量完全是可以不声明的,于是,代码再进一步:

复制代码
tempList->Add(new XString(“NULL”));
tempList->Add(new XString(“NULL”));
tempList->Add(new XString(“0”));

看到这里,我们就可以看出原来的做法到底有多么浪费:浪费时间给变量起名字——我们都知道,起个好名字不容易,也 浪费了时间在执行上,修改前的代码创建了两个 XString 对象,而修改后,只创建了一个对象。

或许,你会觉得,有个变量会让我们了解这里实际上填加的内容到底是什么。不过,也许一个好的函数命名才是更好的选择,比如 addRelaPri。这个疑问会揭示出这段代码存在另外一个问题,直接使用基本的数据结构而没有进行封装。不过,这不是这里讨论的目标,就到此打住吧!

根据这段代码的调整,我们得出一条规则:

  • 代码的声明和使用应尽量接近。

有的 C 程序员会暗自念叨,这个要求对 C 程序来说,简直太不合情理了。好吧!我承认,从语言的角度来说,是这样的。但是,我们需要仔细想想,为什么对于 C 语言来说,变量的声明和使用会距离遥远。通常,遥远的背后意味着硕大的函数,这才是让声明和使用天各一方的重要原因。

在干净代码的世界里,大函数永远是不受欢迎的。为了让声明和使用尽早团聚,请把函数写小。

作者简介:

郑晔,ThoughtWorks 公司咨询师,拥有多年企业级软件开发经验,热衷于探索各种程序设计语言在真实软件开发中所能发 挥的威力,致力于探寻合理的软件开发方式,加入 ThoughtWorks 公司后,投入到敏捷开发方法的实践之中,为其他公司提供敏 捷开发方法方面的咨询服务。他的 blog 是梦想风暴

查看原文:代码之丑(六)

2010-11-29 22:135909
用户头像

发布了 22 篇内容, 共 14.8 次阅读, 收获喜欢 49 次。

关注

评论

发布
暂无评论
发现更多内容

数造科技助力广州白云智慧城管项目斩获双奖,赋能城市精“绣”“智”理新篇章

数造万象

智慧城市 政务 资讯 大数据、 人工智能、

TDS数据治理深度实践:从标准化到智能化的演进之路

百度Geek说

大数据开发 数据开发与治理

观测云产品更新 | LLM 监测、查看器、事件中心、监控等

观测云

产品迭代

爱回收:拥抱HarmonyOS,引领回收行业新趋势

最新动态

从零到一搭建企业知识库,用对知识库工具事半功倍

职场工具箱

效率工具 在线白板 知识库 知识库软件 企业知识库

你真的知道 Java 里的 Exception 和 Error 有啥不同吗?

秃头小帅oi

构建坚不可摧的防线:全方位保障API接口数据安全

Noah

5句话让文心快码实现一个大模型MBTI测试器

Comate编码助手

人工智能 编程 大模型 技术干货 MBTI

攻克大模型训练网络瓶颈,天翼云论文获ACM ICS顶会收录!

天翼云开发者社区

大模型训练

2025 HarmonyOS 创新赛|对话刘子安:向外走,做鸿蒙开发的新生力量

最新动态

面试官:如何确保动态线程池任务都执行完?

王磊

HarmonyOS NEXT移动办公的多设备文件共享:WLAN P2P与蓝牙串行通信的综合应用

最新动态

【最新案例】ArgoDB新功能之读写分离,助力某医药集团打造高效数据中心,消除传统方案的灵活性限制,确保响应时间的可预测性

星环科技

AI 客服 Sierra 再融资,估值达 100 亿美元;米哈游创始人游戏《星之低语》上线遇冷,玩家在线数不足千人丨日报

RTE开发者社区

OpenLDAP研究

数新网络官方账号

openldap

从汉语言文学学生到鸿蒙先锋:林子亿的跨界成长与生态探索

最新动态

电路仿真的“套娃”建模(子电路)功能介绍

思茂信息

cst仿真软件 CST软件 CST Studio Suite

设计一个可复用的 ArkWeb 基础组件架构

最新动态

云存储图片生成缩略图开发

最新动态

率先响应!和鲸助力“人工智能+医疗”再行动,赋能医疗科研创新与临床应用升级

ModelWhale

人工智能 医疗 人工智能+

高能!2025数博会天翼云硬核亮相!

天翼云开发者社区

云服务

手把手教你用LLM图转换器构建知识图谱:从文本到知识的智能转换

测试人

HyperMesh什么是矩阵?

智造软件

仿真 Hypermesh 设计优化

当便捷遇上复杂,低代码的路该怎么走?

引迈信息

MyEMS 开源能源管理系统:驱动能源高效利用的开源创新引擎

开源能源管理系统

开源 开源能源管理系统

探索ArkWeb的奥秘:架构了解与生命周期管理

最新动态

前端热更新驱动下的中国互联网开发范式重构

xuyinyin

NJet深层清理Lua代码

通明湖

构建未来安全体系的基石:态势感知技术解析

沃观Wovision

态势感知 舆情监测 沃观Wovision 舆情监测系统

突发事件中的新闻数据分析:速度、准确性与责任的考量

沃观Wovision

数据分析 沃观Wovision 舆情监测系统 海外舆情监测

大型广告系统架构与设计

加勒比海带

Java 大数据 分布式 高并发 商业化

专栏:代码之丑(六)——分家的声明和使用_Java_郑晔_InfoQ精选文章