原文链接:
代码之丑(十一)
全局变量永远是不受欢迎的,因为它会带来太多的问题,所以,诸如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()) {
...
}
封装,就得封装出个行为来。
分享到:
相关推荐
李洵爱心代码html 和python转载
[转载]很好用的C/C++代码风格化工具[转载]很好用的C/C++代码风格化工具
C#源代码(转载)MisPrinter webmis = new MisPrinter(); //打印组件 webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM"; //网格标题 webmis.DataSource = this.dataGrid1; //...
C#连连看源代码,转别人的,一起来学习学习吧~~
RSA算法描述和代码(转载)
小猫钓鱼游戏的源代码(原创,未经许可严禁转载)
从其他网站转载通讯录包含代码,下载试一试
博文链接:https://acme1921209.iteye.com/blog/98126
javascript 2d桌球游戏代码 可以轻松学习,掌握提高,自己的设计思路
1)精简TCP/IP 协议栈,以减小代码量。ZLIP 目前没有支持UDP 协议,ICMP 协议 也只支持其中的echo 协议(响应ping 数据包)。lwIP 是一个功能全面的TCP/IP 协 议栈,但是相对51 来说代码量较大。 2) 应用层接口简单,...
代码差异统计工具,用于完成统计文件、目录差异行数统计工作,或代码、目录代码行数、注释行数、空白行的统计工作。用于版本管理统计或软件文档中代码统计时使用。 本软件为本人制作,BUG反馈请与站内联系。软件免费...
超简单的 Web 爬虫程序,不过可以在他基础之上改造一下,写出强大点的爬虫! 谢谢提供程序的 blog 友! //一直在使用和写PHP spider的爬虫程序。如果用JAVA写的话前台可以加入spider 页面 但是jaxa部分要删去,...
引导我们平时写代码的一些规范及一些效率常识,老手路过!
这是一个最新的版本啊! 作者:陈盈豪
爱西柚视频分享 转载 不自动播放代码 改变爱西柚无法取消自动播放的现实,一切变得美好。非优酷 土豆 等代码,那些代码根本不行。
socket源代码, 多线程阻塞式网络编程socket_源代码, 客户端和服务端为多线程编程, 转载其他源代码。
VB的机器人控制源代码。拷贝在了WORD文档里面。网络转载。
代码例举socket的文件传送与接收,可作为学习收藏资料!!
jstl源代码,用于开发j2ee的兄弟可以看看,很不错