写点什么

代码之丑(十一)——封装全局变量

  • 2012-05-30
  • 本文字数:864 字

    阅读完需:约 3 分钟

全局变量永远是不受欢迎的,因为它会带来太多的问题,所以,诸如 Java 这样的程序设计语言干脆摒弃了全局变量。一旦我们有机会面对全局变量,想都不要想,干掉它。

复制代码
if (IDLE == g_status) {
...
}

那个 g 打头的家伙就是全局变量,它就是我们的靶子。第一直觉,我们不要直接访问全局变量,那就用函数把它封装起来:

复制代码
int getCurrentStatus() {
return gStatus;
}

于是,代码变身了:

复制代码
if (getCurrentStatus() == IDLE) {
...
}

把变量封装成函数,从某种角度说,这是一种进步。但我想说,这还不够。这只是一种简单的封装,本质上来说,这与直接暴露数据差别不大,我们需要更好的封装,通常的做法是封装出行为。行为从哪来,从实际需求来。

就以上面这段代码为例,我们封装了 status,其实,它的目的是为了与 IDLE 状态相比较,这就是一种行为,我们可以这样封装:

复制代码
bool isCurrentStatus(int status) {
return status == g_status;
}
if (isCurrentStatus(IDLE)) {
...
}

还有一种修改方式,既然 IDLE 是一个固定的常量,索性把它也隐藏起来:

复制代码
bool isIdle() {
return IDLE == g_status;
}
if (isIdle()) {
...
}

实际上,这种封装出行为的方式不仅仅适用于全局变量,把数据拿出来再用的情形也是经常可以见到的:

复制代码
if (machine.getStatus() == IDLE) {
...
}

封装的方式同上面一样,这里选择一种实现:

复制代码
class Machine {
...
bool isIdle() {
return status == IDLE;
}
}
if (machine.isIdle()) {
...
}

封装,就得封装出个行为来。

作者简介:

郑晔,ThoughtWorks 公司首席咨询师,拥有十多年企业级软件开发经验,热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式,加入 ThoughtWorks 公司后,投入到敏捷开发方法的实践之中,为其他公司提供敏捷开发方法方面的咨询服务。他的 blog 是梦想风暴),其微博是 @dreamhead

查看原文:代码之丑(十一)


感谢张凯峰对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-05-30 21:337381
用户头像

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

关注

评论

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

AI与众包平台共铸新机遇

知者如C

在数字化时代的挑战与解决:跨国大文件传输方法

镭速

大文件跨国传输 跨国快速传输大文件

技术领先的用友iuap平台,助力升级数智化底座、驾驭数智未来

用友BIP

2023全球商业创新大会

盘点!3月份Github上“最热门”的开源项目

java易二三

Java 程序员 Vue 前端 计算机

生成式AI:内容创作新革命

百度开发者中心

自然语言处理 内容 #人工智能 文心一言

生成式AI助力智能未来

百度开发者中心

#人工智能 ChatGPT 生成式AI 文心一言

生成式AI引领未来传媒业发展趋势

百度开发者中心

媒体 #人工智能 生成式AI 文心一言

CQ 社区版 2.3.0 发布 | 自动授权、分级授权、审计上卷下钻等

BinTools图尔兹

数据安全 数据库管理 权限管理 数据库操作 审计大屏

电脑硬件迭代快,对仿真软件有什么影响?

智造软件

仿真软件 电脑硬件 结构仿真 电脑配置 硬件配置

ETL 小技巧:文件输出插件数据写入空闲时间阈值配置及作用

大河

缓冲区 ETL bboss 文件输出

生成式AI助力高效写作

百度开发者中心

大模型 #人工智能 ChatGPT 生成式AI

生成式AI技术市场现状与发展前景展望

百度开发者中心

#人工智能 生成式AI 文心一言

《守望先锋 2》性能提升高达33%!英特尔锐炫从未止步

E科讯

第三周作业

大肚皮狒狒

企业国际大数据传输必须了解的5种跨国快速传输大文件工具

镭速

大文件传输 跨国传输大数据

用案例带你认识决策树,解锁洞察力

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

有奖活动 | 以代码之名,写出对Ta的爱

HarmonyOS开发者

HarmonyOS

和鲸 × 临床医学丨“人”作为一生命体在 AI for Science 过程中的作用与交互

ModelWhale

数据科学 临床医学 AI for Science 交叉学科 临床研究

蚂蚁安全实验室登上全球白帽黑客最高领奖台

科技热闻

电脑的配置对仿真软件的分析速度有影响吗?

思茂信息

硬件 仿真软件 电脑硬件 有限元分析 电脑配置

带你读论文丨Fuzzing漏洞挖掘详细总结 GreyOne

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

死锁产生的条件及解决方法

红袖添香

Java 多线程 死锁

生成式AI:全球科技革命的驱动力

百度开发者中心

教育 #人工智能 ChatGPT 生成式AI

分布式数据库架构:高可用、高性能的数据存储

互联网工科生

分布式数据库 高性能 高可用性

低成本生成式AI技术:推动AI普及的关键

百度开发者中心

医疗 #人工智能 ChatGPT 文心一言

华为云GaussDB打造最可信的数据库,给世界一个更优选择

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

技术分享 | 编程界也内卷?浅析“斜杠青年”RCU

鼎道智联

代码之丑(十一)——封装全局变量_Java_郑晔_InfoQ精选文章