产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

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

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

关注

评论

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

文件压缩和解压缩工具 iZip Archiver Pro for Mac v4.9激活版

理理

Permute 3 for mac(全能媒体格式转换器)v3.11.12中文版

理理

IDA Professional 9.0打开显示30016错误解决方法

Rose

macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)

Rose

写在 Pencils Protocol TGE 前:看好 $DAPP,加密社区共识是王道

大瞿科技

使用Lens Desktop监控和调试Kubernetes

百度搜索:蓝易云

Dropzone 4 for mac v4.80.20激活版 文件拖拽增强工具

理理

狂奔的荣耀,稳健的苹果:AI Agent手机竞速赛

脑极体

AI

探索 RAD:5 个最佳实践案例解析

NocoBase

低代码 实践案例 无代码 RAD 快速应用开发

分步指南:安装和访问Kubernetes仪表板

百度搜索:蓝易云

Bartender 5 for mac(菜单栏图标管理软件)v5.1.2中/英激活版

理理

OmniGraffle Pro for mac(思维导图/流程图软件)v7.23.1正式注册版

Rose

UnlockGo(安卓版)For mac 手机解锁工具

Rose

母带音频制作IK Multimedia T-RackS 6 MAX 新功能及安装包下载

理理

Corel Painter 2023序列号 强大的数字绘画软件

理理

Cinema 4D 2024 For mac/win 中文破解版 C4D 2024下载安装教程

Rose

如何在Ubuntu 22.04上安装CRI-O容器运行时

百度搜索:蓝易云

Go必知必会:探索Go语言中的map,灵活而强大的键值对集合

王中阳Go

map 数据类型 Go 语言

Stata 15:数据管理及统计分析工具

Rose

站在 AI 与 Web3 的交汇路口,EraAI 如何带领投资者进入智能化决策时代?

股市老人

Mac多功能文件提取软件 File Juicer v4.101中文注册版

理理

全景图制作软件 DoubleTake for mac v2.7.2注册激活版

理理

最新版Downie 4 v4.7.28中文版 苹果mac网络视频在线下载器

理理

Sketch for mac(专业矢量绘图设计软件)v100.3中文破解版

Rose

写在 Pencils Protocol TGE 前:看好 $DAPP,加密社区共识是王道

加密眼界

38个LomBok工具注解:LomBok架构分析与注解使用案例(必须收藏)

肖哥弹架构

Java lombok

WiFiSpoof for Mac(wifi地址修改工具)v4.0.4免激活版

理理

Maplesoft Maple 2024 for mac v2024.0 专业的数学计算软件

Rose

Blu-ray Player Pro for Mac(蓝光高清播放工具)v3.3.22中文版

Rose

LED大屏幕:现代显示技术的璀璨之星

Dylan

技术 科技 LED LED display 屏幕

Understand for Mac(优秀的源代码审查工具)

Rose

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