写点什么

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

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

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

关注

评论

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

文献解读-流行病学-第九期|《与Covid-19严重程度相关的免疫基因先天性缺陷的罕见变异》

INSVAST

基因数据分析 生信服务

五月答谢 - 清凉礼包大派送,先到先得

Laval小助手

青椒云如何通过云桌面实现移动图形工作站

青椒云云电脑

图形工作站 移动图形工作站

数字先锋| SaaS服务“拎包入住”?央企数字化转型体验感拉满!

天翼云开发者社区

云计算 数字化转型 SaaS平台

解决`LocalStorage.getShared()`返回undefined的问题

彭康佳

android 鸿蒙

用移动图形工作站做设计是种什么样的体验?

青椒云云电脑

图形工作站 移动图形工作站

selenium滑块解锁实现的研究

霍格沃兹测试开发学社

IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践

JackJiang

网络编程 即时通讯 IM

五连冠!天翼云稳居中国专属云服务市场榜首!

天翼云开发者社区

云计算 云服务 IDC

市值风云APP装机数百万,借助NineData实现数据高效流通

NineData

数据迁移 数据管理 迁移工具 NineData 市值风云

云消息队列 ApsaraMQ 成本治理实践(文末附好礼)

阿里巴巴云原生

阿里云 云原生 ApsaraMQ

如何将您的 API 管理从 Postman 迁移到 Apifox:详细步骤

Apifox

Postman Apifox API 接口工具 API 接口

成就数智企业!用友BIP构建AI+全场景智能服务

用友BIP

首期“软件企业 AI 开发提效实战营”成功举办

阿里巴巴云原生

人工智能 阿里云 云原生

直播预约丨《指标体系建设实战》第三期:指标平台功能架构及落地实践

袋鼠云数栈

指标体系 数据指标 指标 指标平台 指标建设

从打点平台谈打点治理

百度Geek说

数据质量 企业号 6 月 PK 榜 打点平台 打点治理

鸿蒙系统开发如何实现跨平台功能?

FN0

鸿蒙 跨平台 HarmonyOS 鸿蒙卡片

实现全国算力互联互通,我们是认真的!

天翼云开发者社区

云计算 算力

开源数据库生态遇新变数,天翼云TeleDB提供企业数据管理更优解!

天翼云开发者社区

数据库 云计算 存储

AI+财务丨以共享智能化为牵引,缔造全链路的无人值守能力

用友BIP

首期“软件企业 AI 开发提效实战营”成功举办

阿里云云效

人工智能 阿里云 云原生

从“数据孤岛”、Data Fabric(数据编织)谈逻辑数据平台

Aloudata

数据孤岛 数据虚拟化 Data Fabric 数据编织

以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的

bin的技术小屋

ZGC JVM GC

浅析Spring中Async注解底层异步线程池原理

得物技术

Java spring 企业号2024年6月PK榜

移动图形工作站有哪些价格实惠的推荐?

青椒云云电脑

图形工作站 移动图形工作站

怎么购买GPT4o?GPT4o买不了怎么办?GPT4o订阅银行卡教程

蓉蓉

openai gpt4o

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