【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

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

关注

评论

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

铭文市场火出圈,XRC-20有望继续演绎铭文市场神话

西柚子

一文掌握Ascend C孪生调试

华为云开发者联盟

人工智能 华为云 昇腾CANN 华为云开发者联盟 孪生调试

Ableton Live 11 Suite for Mac(音乐制作软件) v11.3.13/v10.1.43中文激活版

mac

苹果mac Windows软件 Ableton Live 11

探索绿色之道:英特尔助力联想打造零碳智造工厂

E科讯

边缘计算系统设计与实践

不在线第一只蜗牛

边缘计算 系统框架

数字化转型对企业有什么好处?

天津汇柏科技有限公司

数字化转型

1688订单详情API介绍(item_get-获得1688商品详情)

技术冰糖葫芦

API 接口

Android开发中如何进行单元测试?

树上有只程序猿

android 单元测试

GPT-4「变懒」问题将被修复;英伟达选择越南成公司“第二故乡”丨 RTE 开发者日报 Vol.104

声网

Adobe Acrobat DC 2021 中文直装版

影影绰绰一往直前

Python多进程处理的高级应用场景

技术冰糖葫芦

API 接口

软件测试/人工智能丨知识图谱与模型驱动测试介绍及应用领域概述

测试人

人工智能 软件测试

低代码:是开发的快捷方式还是技术倒退?

EquatorCoco

低代码 快速开发 开发工具

共建开源新里程:北京航空航天大学OpenHarmony技术俱乐部正式揭牌成立

科技热闻

Visio2021 v16.0激活版

影影绰绰一往直前

区块链加持卡奥斯天彩抽奖平台,现邀您免费抽奖!海量奖品等你薅

Openlab_cosmoplat

抽奖

腾讯云:AI云探索之路

快乐非自愿限量之名

云计算 腾讯云

ETLCloud的应用策略——实时数据处理是关键

RestCloud

ETL 实时数据

软件测试/人工智能丨如何使用知识图谱实现精准测试效果

测试人

人工智能 软件测试

OpenHarmony打造下一代智能终端操作系统根社区,繁茂人才生态

新消费日报

铭文市场火出圈,XRC-20有望继续演绎铭文市场神话

小哈区块

为什么有些程序员敲代码这么慢?

秃头小帅oi

Java多线程系列6:管程

BigBang!

Java多线程

11月 Web3 游戏行业概览:市场回暖,未来趋势

Footprint Analytics

区块链游戏 gamefi web3游戏

技术分享丨Amazon Q,新一代生成式人工智能助手

伊克罗德信息科技

人工智能 Amazon 亚马逊云科技 Amazon Q

云渲染对高层住宅立面渲染图优势、作用、影响

Renderbus瑞云渲染农场

云渲染 渲染农场 瑞云渲染 动画云渲染 效果图云渲染

Rhinoceros 7 (犀牛7) 中文特别版下载

影影绰绰一往直前

一篇文章带你掌握性能测试工具——Jmeter

快乐非自愿限量之名

性能测试 测试工具

使用 PyTorch FSDP 微调 Llama 2 70B

快乐非自愿限量之名

机器学习 深度学习 PyTorch

低代码平台通常具备哪些功能组件?

高端章鱼哥

低代码 JNPF

深度解读GPTs的创建,搜索以及高级选项到底怎么用

Bob Lin

openai ChatGPT GPT-4 #LangChain GPTs

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