写点什么

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

  • 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:135941
用户头像

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

关注

评论

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

阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”

阿里巴巴云原生

阿里云 RocketMQ 云原生

TapTalk | 圆桌实录:澳门综合度假村敏捷转型之旅,MongoDB + TapData 赋能酒店业卓越实践

tapdata

客户数据平台 CDP 敏捷转型 CDC 实时数据平台

京东正式开源基于国产芯片自研的xLLM大模型推理引擎

京东零售技术

百度电商MultiAgent视频生成系统

百度Geek说

视频创作 AIGC

VEX生态重磅孵化STC:打造Web3 ESG碳资产RWA第一标杆

科技汇

结合AI技术提升YashanDB数据库智能运维能力

数据库砖家

破局海外社交迷宫:ShareSDK如何为出海APP构建技术捷径?

MobTech袤博科技

一键登录技术横评:MobTech秒验如何提升APP转化率35%?

MobTech袤博科技

Qoder 负责人揭秘:Qoder 产品背后的思考与未来发展

阿里巴巴云原生

阿里云 云原生 Qoder

两项世界第一!阿里云EMR登顶全球数据仓库性能及性价比排行榜

阿里云大数据AI技术

spark 阿里云 数据仓库 StarRocks EMR

除了Nano banana,还有哪些AI工具可以生成手办模型图?

职场工具箱

AIGC 通义千问 Ai绘图 Qwen AI生图

招聘效率坍塌?AI+真人面试已成主流,你还在用石器时代的方法选人?

AI得贤招聘官

2026浙江安博会·杭州国际安防产品博览会

AIOTE智博会

安防展 安博会 浙江安博会 安防展会 杭州安博会

APP跨境出海爆火!3款免费SDK工具助力开发者0成本全球化

MobTech袤博科技

从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式

阿里巴巴云原生

阿里云 云原生 可观测

智源 RoboBrain-X0 开源,打破机器人跨本体泛化困境

智源研究院

公众号文章中插入外部网页链接教程(2026 最新版)

Ceelog

公众号

网易雷火胡志鹏:AI驱动未来,游戏科技重塑虚拟创造力与现实生产力

网易伏羲

人工智能 网易伏羲 具身智能 网易雷火 游戏科技

数造科技于2025全球数据管理峰会斩获多项殊荣

数造万象

数据治理 DataOps 数据管理 AI 人工智能 科技、

低代码5大实用模块实操指南:收藏/公告/消息/统计/服务器信息

引迈信息

节省成本提升效率:YashanDB数据库云端部署策略详解

数据库砖家

阿里云发布《AI 原生应用架构白皮书》

阿里巴巴云原生

阿里云 云原生

文心快码已接入GLM-4.6模型

Comate编码助手

AI编程 文心快码 AI编程助手 GLM-4.6

基于YashanDB数据库构建实时监控系统的实施步骤

数据库砖家

揭示YashanDB数据库在大数据时代的价值

数据库砖家

产品动态 | 重磅发布!秒验全面支持香港移动号码认证,助力移动互联网企业跨境出海

MobTech袤博科技

RestCloud iPaaS与MQ消息集成如何重塑企业集成韧性

谷云科技RestCloud

数据传输 数据同步 集成平台 ipaas MQ消息

ETL参数化技巧:如何避免写一堆重复任务?

谷云科技RestCloud

数据处理 数据传输 ETL 数据集成平台 参数传递

网易伏羲受邀亮相2025云栖大会,展示AI领域前沿创新成果

网易伏羲

网易伏羲 游戏AI 具身智能 群体智能 网易雷火

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