50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

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

关注

评论

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

JavaScript 的发展史你真的了解吗?

伤感汤姆布利柏

JavaScript 低代码 js

强大的Kubernetes工具的完整指南

互联网工科生

Kubernetes

数据库安全运维系统厂家在深圳的有哪些?咨询电话多少?

行云管家

数据库 大数据 数据安全 数据库安全 数据安全运维

外贸人必须知道的20个WhatsApp实用技巧

九凌网络

事项法会计:业财融合落地的基石

用友BIP

业财融合

监守自盗,如何防范员工窃密?

尚思卓越

网络安全 信息安全

两台电脑如何快速传输几百G文件,这款文件传输软件真快

镭速

大文件传输 传输大文件 文件传输工具

回归算法全解析!一文读懂机器学习中的回归模型

不在线第一只蜗牛

机器学习 算法 回归算法

C/C++ Zlib库封装MyZip压缩类

不在线第一只蜗牛

c c++ 开源 编程语言

[开源]MIT开源协议,前后端分离、后台通配权限管理系统

小狗围观科幻

电机制造业mes,mes生产管理系统,免费电机mes

万界星空科技

电机 mes 制造业生产管理系统 直流电机 云mes

NFTScan 正式上线 Starknet NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT\ NFTScan nft工具

CodeiumAI单元测试生成和覆盖率统计实践

lklmyy

单元测试 pytest AIGC CodiumAI

软件定义汽车时代,代码质量先行!

安势信息

车联网 代码质量 汽车软件安全 代码质量检测工具

3D模型渲染太耗电脑性能怎么办?

3D建模设计

3D渲染 GPU渲染 渲染调优 CPU渲染

白鸦11周年分享:把有赞做成智能化系统运营商

ToB行业头条

EAM与IOT融合,用友BIP资产云助力设备智慧运维!

用友BIP

资产管理

4天肝出一个数据应用,可能吗?| StartDT Hackathon

奇点云

操作系统 数据应用 奇点云

用友助力中核集团新华发电斩获“IDC未来企业大奖”

用友BIP

企业数智化

用友助力浙江省国贸供应链企业数智化管理水平提升!

用友BIP

企业数智化

打开浏览器,线上玩转C++

庄岩

c++ 在线编程 onlinegdb

为什么要在项目中使用TypeScript?

树上有只程序猿

typescript

增加外贸订单的实用外贸工具

九凌网络

DAPP公排互助项目系统开发丨智能合约技术开发

l8l259l3365

分享一套生产管理MES系统的源代码,可以直接拿来搞钱的好项目

万界星空科技

开源 开源代码 MES系统 生产管理系统 开源mes

浩鲸科技:为什么要用雪花ID替代数据库自增ID?

王磊

Java 面试

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