写点什么

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

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

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

关注

评论

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

从德鲁克管理实践看服务化架构

agnostic

微服务

极客时间运维进阶训练营第七周作业

老曹

我在哪里可以获得CleanMyMac2023许可证

茶色酒

CleanMyMac2023

Mac内存清理工具CleanMyMac2023

茶色酒

CleanMyMacX CleanMyMac X CleanMyMac X2023

Compose把Text组件玩出新高度

Halifax

android 前端 kotlin Compose android jetpack

基于 docker-compose 部署单机版本 ELK

忙着长大#

ELK

非一线工程管理者的一对一沟通

俞凡

领导力 管理

啃透这500页高并发笔记薪资涨了20K,并连收天猫,京东等5个Offer

钟奕礼

Java 程序员 java面试 java 编程

架构训练营作业-模块2

张建闯

架构实战营

MacBook免费的电脑管家CleanMyMac2023

茶色酒

CleanMyMac CleanMyMac X

工赋开发者社区 | 架构瓶颈原则:用注意力probe估计神经网络组件提供多少句法信息

工赋开发者社区

微信朋友圈高性能复杂度

闲人Eric

架构实战营

分布式锁主动续期的入门级实现-自省 | 简约而不简单

小小怪下士

Java 程序员 分布式 分布式锁

网络编程与通信原理

Java 架构

面试官:断网了,还能 ping 通 127.0.0.1 吗?

Java全栈架构师

程序员 面试 程序人生 后端 计算机网络

关于ChatGPT的一切;CUDA入门之矩阵乘;PyTorch 2.0发布|AI系统前沿动态

OneFlow

人工智能 深度学习 AI

学习编程必须知道的三个网站

邱比特讲编程

GitHub 编程 Google Stack Overflow 编程工具

工赋开发者社区 | 65页数字化工厂规划与建设详细方案 !

工赋开发者社区

灵魂拷问,你真的了解DNS吗?

蔡农曰

互联网 前端 后端 计算机网络

2022-12-11:行程和用户。以下为输出结果,请问sql语句如何写? +------------+-------------------+ | Day | Cancellation

福大大架构师每日一题

数据库 福大大

TechSmith Camtasia Studio2023免费的屏幕录像视频编辑软件

茶色酒

Camtasia Studio2023

元宇宙之数字孪生 孪数科技-企业元宇宙引领者

Jerry Tan

小令案例 | 互联网消费分期产品引入令牌云服务,大幅提升进件转化

令牌云数字身份

身份认证 分布式数字身份 成功案例

字节大神熬夜整理MyBatis+Redis+Kafka+spring源码与实战技术齐飞

钟奕礼

Java java编程 程序员、

云与开源,共植数字世界的根

Apache Flink

大数据 flink 实时计算

HarmonyOS玩转ArkUI动效 - 水母动画

Halifax

前端 动画 HarmonyOS OpenHarmony arkui

浅谈如何在小红书和知乎两大平台做好引流推广

石头IT视角

Verilog 的连续赋值

芯动大师

Verilog Verilog语法 连续赋值

聊聊最适合程序员的一些画图工具?

程序员小毕

程序员 程序人生 后端 架构师 画图工具

别研究 ChatGPT 了,来看个国产好项目!

Java永远的神

程序员 程序人生 后端 架构师 开源项目

通过假设地图进行产品待办列表排序

Bruce Talk

Agile User Story Product Owner 敏捷、

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