写点什么

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

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

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

关注

评论

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

百度世界2023 :小度发布全球首款大模型家庭智能机器人

科技热闻

HTX 与 Zebec  Protocol 深度合作,并将以质押者的身份参与 ZBC Staking

股市老人

教育行业如何选择云桌面解决方案?

青椒云云电脑

桌面云 云桌面

VMware虚拟机安装Linux系统的介绍

芯动大师

新手想做跨境电商,是做跨境电商平台好还是做跨境独立站好?

轶天下事

火爆微信小游戏开发的轻量云服务器,腾讯云、华为云、阿里云三家“避坑”指南来了

轶天下事

B站狂转3500次,火到抖音。阿里P5至P8的java进阶宝典

程序员万金游

#java #程序员 #学习 #框架 #阿里

Scrum敏捷项目管理关键

顿顿顿

敏捷开发 敏捷项目管理 scrum敏捷工具

桌面云电脑配置要求

青椒云云电脑

云电脑

HTX 与 Zebec Protocol 展开深度合作,并将以质押者的身份参与 ZBC Staking

BlockChain先知

这款轻量云服务器解锁中小企业使用ERP正确姿势

平平无奇爱好科技

前端开发工具有哪些?17款前端工程师必备工具推荐!

彭宏豪95

效率 前端开发 开发工具 前端工程师 办公软件

企业如何部署云桌面?选私有云还是公有云

青椒云云电脑

云桌面

HTX 与 Zebec  Protocol 展开深度合作,并将以质押者的身份参与 ZBC Staking

鳄鱼视界

“升级是找死,不升级是等死”,GitLab CE 的痛苦升级之路

极狐GitLab

DevOps gitlab postgres CE MySQL、

一键生成!盘点那些好用的3D建模AI生成工具!

Finovy Cloud

AI 3d建模

轻量应用服务器水太深,这款产品才是实惠好用

轶天下事

公司如何部署云桌面系统办公

青椒云云电脑

云桌面 云桌面解决方案 云桌面系统

HTX 与 Zebec Protocol 展开深度合作,并将以质押者的身份参与 ZBC Staking

石头财经

1024程序员节(源聚一堂北京站)节目有奖征集!

开放原子开源基金会

云技术分享 | 快速构建 CodeWhisperer 代码生成服务,让 AI 辅助编程

亚马逊云科技 (Amazon Web Services)

ide 生成式人工智能 CodeWhisperer

什么是云桌面服务?有什么价值

青椒云云电脑

云桌面

免费:实时 AI 编程助手 Amazon CodeWhisperer

亚马逊云科技 (Amazon Web Services)

人工智能 Python 3.12 java‘ 云上探索实验室

互联网企业低效愈演愈烈,这款轻量云服务器重建效能!

轶天下事

企业ERP管理体验两极分化?选择轻量云服务器才能直上“云”霄

轶天下事

AGI 黑客松收官,Zilliz 向量数据库助力34支参赛队伍角逐大模型时代的Killer App

Zilliz

黑客松 Zilliz AGI 向量数据库

加入鲲鹏HPC训练营,一起引领高性能计算新潮流

科技热闻

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