原文链接:
代码之丑(十一)
全局变量永远是不受欢迎的,因为它会带来太多的问题,所以,诸如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()) {
...
}
封装,就得封装出个行为来。
分享到:
相关推荐
C#源代码(转载)MisPrinter webmis = new MisPrinter(); //打印组件 webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM"; //网格标题 webmis.DataSource = this.dataGrid1; //...
### CIH 1.5病毒源代码分析 #### 背景介绍 CIH病毒,全称为Chernobyl Virus,是由台湾程序员陈盈豪在1998年编写的一种破坏性极强的计算机病毒。该病毒以破坏计算机硬件而闻名,尤其是其能够重写BIOS,导致计算机...
李洵爱心代码html 和python转载这个主题,涉及到的是使用这两种语言来创建具有情感色彩的项目,可能是一个表达爱意或者情感交流的网页应用。 HTML是一种标记语言,用于构建网页的结构和内容。在`heart.html`和`love...
在编程世界中,保持代码的整洁和一致性是至关重要的,特别是在团队协作的项目中。C/C++作为广泛应用的编程语言,其代码规范性对于代码可读性和维护性有着直接影响。本文将详细介绍一种非常实用的C/C++代码风格化工具...
【PV3D全景的核心代码解析】 PV3D(Papervision3D)是一种基于Adobe Flash平台的开源3D图形库,它允许开发者在Web浏览器中创建交互式的三维场景。这个核心代码片段可能是PV3D实现全景展示的关键部分,下面我们将...
通过学习C#连连看源代码,我们可以了解到游戏的核心逻辑、用户界面设计以及事件处理等关键点。 首先,C#是一种面向对象的编程语言,由微软开发,广泛应用于Windows应用程序和游戏开发。在连连看项目中,我们可能会...
通过这些文件,你可以学习到DB2数据库系统中的高级特性,如存储过程的创建和使用、游标的管理、以及如何优化和调试数据库代码。了解并掌握这些知识对于提升你在DB2环境下的编程和数据库管理技能至关重要。
提高PHP代码质量的36计,是一份针对PHP开发者提升代码质量和编程效率的指南,尤其适合初学者和希望精进技能的中级开发者。本文将详细解读其中的几个关键点,帮助开发者理解并实践这些规范。 ### 1. 避免使用相对...
小猫钓鱼游戏的源代码(原创,未经许可严禁转载)
1)精简TCP/IP 协议栈,以减小代码量。ZLIP 目前没有支持UDP 协议,ICMP 协议 也只支持其中的echo 协议(响应ping 数据包)。lwIP 是一个功能全面的TCP/IP 协 议栈,但是相对51 来说代码量较大。 2) 应用层接口简单,...
从其他网站转载通讯录包含代码,下载试一试
这篇博客文章“各种微博分享按钮代码(转载)”主要介绍了如何在网站上集成这些分享功能,以便用户一键将网页内容分享到他们的微博账户。 在网页开发中,微博分享按钮的实现通常涉及HTML、CSS以及JavaScript技术。...
`【转载】Wordpress源代码分析之settings.php之一.htm` 和 `【转载】Wordpress源代码分析之settings.php之二.htm` 重点关注了WordPress的设置API。这个API允许开发者创建和管理后台设置页面,为用户提供自定义选项...
JSTL是JavaServer Pages标准标签库,它提供了一组预定义的标签,用于简化JSP页面的开发,使其更加结构化,可读性更强,同时也降低了Java代码在页面中的使用。JSTL是由Apache软件基金会的Jakarta项目维护的,其核心...
代码差异统计工具,用于完成统计文件、目录差异行数统计工作,或代码、目录代码行数、注释行数、空白行的统计工作。用于版本管理统计或软件文档中代码统计时使用。 本软件为本人制作,BUG反馈请与站内联系。软件免费...
javascript 2d桌球游戏代码 可以轻松学习,掌握提高,自己的设计思路
爱西柚视频分享 转载 不自动播放代码 改变爱西柚无法取消自动播放的现实,一切变得美好。非优酷 土豆 等代码,那些代码根本不行。