写点什么

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

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

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

关注

评论

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

下载|GitLab 2023 年 DevSecOps 全球调研报告:安全左移深入人心、AI/ML 蔚然成风

极狐GitLab

gitlab DevSecOps AI/ML 安全左移 安全实践

如何用极狐GitLab 为 Android App 创建自动化CI/CD?详细教程来了

极狐GitLab

自动化 CI/CD Android; keystore fastlane

Apache Flink 在翼支付的实践应用

Apache Flink

大数据 flink 实时计算

火山引擎DataTester:三类AB实验,让企业营销拥有灵敏“网感”

字节跳动数据平台

大数据 A/B测试 对比试验 企业号 7 月 PK 榜

九章元识大模型加速AI产业创新发展

九章云极DataCanvas

什么是MES,MES系统有哪些功能模块?MES系统概述

优秀

MES系统 mes

模糊测试公布结果,大众漏洞被曝光

云起无垠

网络安全 模糊测试

【有奖互动】开发者版本新特性,你期待哪些更新?#HDC.Together2023#

HarmonyOS开发者

HarmonyOS

《APaaS应用实施方法论》电子书正式发布

明道云

打造数据处理新范式,DataPilot畅游数据向量海

九章云极DataCanvas

探索Reactor网络模型在当今应用领域的革新

华为云开发者联盟

开发 华为云 企业号 7 月 PK 榜 华为云开发者来联盟

你的极狐GitLab SaaS上开启这些设置了吗?代码安全,安心下班!

极狐GitLab

gitlab CI/CD DevSecOps 代码安全 软件供应链安全

全面构建AI能力,AIFS为AI产业发展按下“加速键”

九章云极DataCanvas

极狐GitLab 3 步优化软件价值流,谨防偷走时间、制造瓶颈的“幕后黑手”

极狐GitLab

gitlab 可视化 软件研发 价值流管理 VSM

在 K8S 中只会 CI 不会 CD ?3 种方式,让极狐GitLab 和 K8S 高效协同!

极狐GitLab

DevOps 云原生 k8s CI/CD 集成

大模型时代下的全新变革

九章云极DataCanvas

AI与数据双向赋能,DingoDB成向量海时代超强引擎

九章云极DataCanvas

Spring高手之路3——揭秘Spring依赖注入和SpEL表达式

砖业洋__

spring 依赖注入 属性注入 SpEL表达式 Bean配置

英特尔x MAXHUB:以创新解决方案掀起“智能协作”新浪潮

E科讯

一文讲透 Redis 事务 (事务模式 VS Lua 脚本)

不在线第一只蜗牛

Lua脚本 redis 底层原理 Redis 可视化工具

影响云安全的因素有哪些?如何保障云安全?

行云管家

云安全 企业上云 堡垒机 自动化运维 云管

开源直播源码平台处理卡顿问题技巧方案_山东布谷科技创作

山东布谷科技

开源 软件开发 直播 源码搭建 直播源码

Nautilus Chain 主网上线,创世 ZBC 质押即将开启

鳄鱼视界

Python爬虫超详细讲解(零基础入门,老年人都看的懂)

Java随想录

Java Python

如何理解小程序插件?微信及支付宝官方详解

没有用户名丶

《中国民用航空业零代码应用与推广白皮书》正式发布

明道云

阿里商旅账单系统架构设计实践

阿里技术

账单 阿里商旅 账单系统 账单数据

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