写点什么

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

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

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

关注

评论

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

ZRTC高并发策略在专属音视频中台场景的应用

中关村科金

RTC 中关村科金 音视频中台 高并发策略 对话式AI

MIAOYUN与OpenCloudOS、TencentOS Server 3完成产品兼容互认证

MIAOYUN

容器云 云平台 产品兼容性互认 互认证 兼容性互认证

浙江宁波|2023年度宁波市甬江引才工程

科兴未来News

低代码有哪些缺点?4千字深入解析

优秀

低代码 低代码缺点

MobPush推送查询API

MobTech袤博科技

字节跳动CVPR 2023论文精选来啦(内含一批图像生成新研究)

字节跳动技术范儿

字节跳动 算法 计算机视觉 CVPR AIGC

OpenTiny的设计理念是什么?

英勇无比的消炎药

开源 OpenTiny UI组件库

在Goroutines中如何处理Error

Jack

大模型打开了一层技术天花板,催生新场景变革老场景

中关村科金

人工智能 企业服务 大模型 对话式AI

8个可以免费下载3D模型的网站,快收藏起来吧~

Finovy Cloud

3D软件 3ds Max

Fabarta 正式加入大数据技术标准推进委员会,共同推动大数据技术标准化进程

Fabarta

人工智能 图数据库 分布式图数据库 图智能

如果用ChatGpt给OpenTiny官网设计页面会怎样?

英勇无比的消炎药

开源 前端 OpenTiny UI组件库

月内狂飙 50%的 ZBC ,连续登顶Solana 链交易量排行榜

股市老人

基于二代征信报告的信用评估模型实践

中关村科金

金融 征信 风控 对话式AI

揭秘 Milvus 助力平台建设的终极奥义

Zilliz

Meetup Milvus 向量数据库

华为云开源OpenTiny项目中TinyVue组件库和TinyNG组件库的区别是什么?

英勇无比的消炎药

前端 开源、 OpenTiny UI组件库

加密了100个小姐姐的PDF文档,1行代码搞定,网友:快男!

程序员晚枫

Python 加密 PDF 自动化办公

浙江宁波|2023年上半年宁波市镇海区高层次人才项目政策申报

科兴未来News

template竟能使一套C++代码支持多个客户?

老王同学

c++ template

论模式与反模式

凌晞

构架

传输体积下降 85%,融云 HTTP 压缩算法解析

融云 RongCloud

算法 音视频 传输 融云 通讯

CodeGeeX 130亿参数大模型的调优笔记:比FasterTransformer更快的解决方案

Openlab_cosmoplat

Python 开源社区

软件测试/测试开发丨实战演练基于加密接口测试测试用例设计

测试人

软件测试 自动化测试 测试开发

跨越AI大门,一本翻译蓝皮书、一场人机共译比赛投射出怎样的未来?

脑极体

百度 AI 翻译

华为开源项目OpenTiny的TinyVue组件库适用于哪些地方?

英勇无比的消炎药

前端 开源、 OpenTiny UI组件库

博睿学院 | 本周四:ETL技术在数据标准化中的应用实践

博睿数据

ETL 智能运维 博睿数据 博睿学院

Birdwatcher 进阶使用指南

Zilliz

Milvus 向量数据库 birdwatcher

flutter系列之:在flutter中使用相机拍摄照片

程序那些事

flutter 架构 大前端 程序那些事

如何在 Web 实现支持虚拟背景的视频会议

声网

Web 视频会议 RTE 虚拟背景

MobTech 秒验|本机号码一键登录会泄露隐私吗

MobTech袤博科技

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