2025 AI基础设施风向标,不看必后悔!#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:135599
用户头像

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

关注

评论

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

ELK性能优化实战总结,黑马java笔记与作业,Java面试基础知识点

Java 程序员 后端

Github爆火的《高并发秒杀顶级教程》,2021最新Java框架体系架构面试题

Java 程序员 后端

Java中级笔试题百度文库,牛客网java笔试题库,从底层开始带你了解并发编程

Java 程序员 后端

Prometheus 内置函数(四)

耳东@Erdong

Prometheus PromQL 10月月更

Java400道面试题通关宝典助你进大厂,Java后端工程师需要掌握的知识

Java 程序员 后端

Java中级笔试题百度文库,java架构师直通车百度云,使用指南

Java 程序员 后端

分布式存储和区块链结合能碰撞出怎样的火花?

CECBC

BTAJ大厂最新面试题汇集,中级Java开发人员要掌握的技术

Java 程序员 后端

flutter中文网,达内java教程视频,HTTP规范中的那些容易掉进去的坑

Java 程序员 后端

hash、set、zset的底层数据结构原理,字节Java面试必问

Java 程序员 后端

HTTPS面试常问全解析,黑马学习java,Java中高级工程师面试题及答案

Java 程序员 后端

Javaweb框架面试题,尚学堂java全套资料百度云,附高频面试题合集

Java 程序员 后端

Java二叉树面试题总结,马哥linux视频教程百度云,GitHub重磅官宣

Java 程序员 后端

Java从入门到精通百度云,java教学百度网盘,思维导图+源代码+笔记+项目

Java 程序员 后端

996页阿里Java面试真题解析火爆全网,Java工程师笔试题目

Java 程序员 后端

997页字节跳动Java面试真题解析火爆全网,腾讯T3大佬亲自教你

Java 程序员 后端

Alibaba高并发业务实战文档,java自学百度网盘,Java架构师知识体系

Java 程序员 后端

BIO和NIO有啥区别,绝对干货分享

Java 程序员 后端

Dubbo高频面试题+解析,宅家36天咸鱼翻身入职腾讯

Java 程序员 后端

Java入门基础,千锋教育java教程,深度剖析原理

Java 程序员 后端

BIO和NIO有啥区别,Redis灵魂14问

Java 程序员 后端

Github爆火的《高并发秒杀顶级教程》,尚学堂java资料,Java基础面试题

Java 程序员 后端

Javaweb面试问题,java教程马士兵全集,设计思想解读开源框架

Java 程序员 后端

2021 Qcon 前端专场精彩回顾

程序员海军

大前端 可视化 vite Qcon

在线手机号码VCF批量导入工具

入门小站

工具

GitHub标星8k!黑马springboot笔记,阿里Java校招面试题

Java 程序员 后端

Java五年工作经验面试题,极客学院和黑马,深入linux内核架构面试

Java 程序员 后端

docker面试题汇总,尚学堂尚硅谷java,已拿offer入职

Java 程序员 后端

Java-SSM框架相关面试题整理,2021Java面试题知识点总结

Java 程序员 后端

SQL 笔记

越锋利

sql 课程

Java中高级面试技术问题,mysql优化视频教程,Java全栈知识体系

Java 程序员 后端

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