`
feikiss
  • 浏览: 100019 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

【转载】代码之丑(十一)

阅读更多
原文链接:

代码之丑(十一)

全局变量永远是不受欢迎的,因为它会带来太多的问题,所以,诸如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# 源代码 (转载)

    C#源代码(转载)MisPrinter webmis = new MisPrinter(); //打印组件 webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM"; //网格标题 webmis.DataSource = this.dataGrid1; //...

    [转载]CIH 1.5 源代码

    ### CIH 1.5病毒源代码分析 #### 背景介绍 CIH病毒,全称为Chernobyl Virus,是由台湾程序员陈盈豪在1998年编写的一种破坏性极强的计算机病毒。该病毒以破坏计算机硬件而闻名,尤其是其能够重写BIOS,导致计算机...

    李洵爱心代码html 和python转载

    李洵爱心代码html 和python转载这个主题,涉及到的是使用这两种语言来创建具有情感色彩的项目,可能是一个表达爱意或者情感交流的网页应用。 HTML是一种标记语言,用于构建网页的结构和内容。在`heart.html`和`love...

    [转载]很好用的C/C++代码风格化工具

    在编程世界中,保持代码的整洁和一致性是至关重要的,特别是在团队协作的项目中。C/C++作为广泛应用的编程语言,其代码规范性对于代码可读性和维护性有着直接影响。本文将详细介绍一种非常实用的C/C++代码风格化工具...

    [转载] PV3D 全景的一个核心代码

    【PV3D全景的核心代码解析】 PV3D(Papervision3D)是一种基于Adobe Flash平台的开源3D图形库,它允许开发者在Web浏览器中创建交互式的三维场景。这个核心代码片段可能是PV3D实现全景展示的关键部分,下面我们将...

    C#连连看源代码(转载)

    通过学习C#连连看源代码,我们可以了解到游戏的核心逻辑、用户界面设计以及事件处理等关键点。 首先,C#是一种面向对象的编程语言,由微软开发,广泛应用于Windows应用程序和游戏开发。在连连看项目中,我们可能会...

    db2学习代码例子(代码为转载网上)

    通过这些文件,你可以学习到DB2数据库系统中的高级特性,如存储过程的创建和使用、游标的管理、以及如何优化和调试数据库代码。了解并掌握这些知识对于提升你在DB2环境下的编程和数据库管理技能至关重要。

    提高php代码质量 36计 转载开源中国社区

    提高PHP代码质量的36计,是一份针对PHP开发者提升代码质量和编程效率的指南,尤其适合初学者和希望精进技能的中级开发者。本文将详细解读其中的几个关键点,帮助开发者理解并实践这些规范。 ### 1. 避免使用相对...

    小猫钓鱼游戏的源代码(原创,未经许可严禁转载)

    小猫钓鱼游戏的源代码(原创,未经许可严禁转载)

    单片机以太网上网原代码(keil 工程,用RTS8019)--转载

    1)精简TCP/IP 协议栈,以减小代码量。ZLIP 目前没有支持UDP 协议,ICMP 协议 也只支持其中的echo 协议(响应ping 数据包)。lwIP 是一个功能全面的TCP/IP 协 议栈,但是相对51 来说代码量较大。 2) 应用层接口简单,...

    从其他网站转载通讯录包含代码

    从其他网站转载通讯录包含代码,下载试一试

    各种微博分享按钮代码(转载)

    这篇博客文章“各种微博分享按钮代码(转载)”主要介绍了如何在网站上集成这些分享功能,以便用户一键将网页内容分享到他们的微博账户。 在网页开发中,微博分享按钮的实现通常涉及HTML、CSS以及JavaScript技术。...

    wordpress 代码分析整理

    `【转载】Wordpress源代码分析之settings.php之一.htm` 和 `【转载】Wordpress源代码分析之settings.php之二.htm` 重点关注了WordPress的设置API。这个API允许开发者创建和管理后台设置页面,为用户提供自定义选项...

    飞机大战游戏源代码(转载)

    jstl源代码,转载内容

    JSTL是JavaServer Pages标准标签库,它提供了一组预定义的标签,用于简化JSP页面的开发,使其更加结构化,可读性更强,同时也降低了Java代码在页面中的使用。JSTL是由Apache软件基金会的Jakarta项目维护的,其核心...

    代码差异统计工具V1.00

    代码差异统计工具,用于完成统计文件、目录差异行数统计工作,或代码、目录代码行数、注释行数、空白行的统计工作。用于版本管理统计或软件文档中代码统计时使用。 本软件为本人制作,BUG反馈请与站内联系。软件免费...

    javascript 2d桌球游戏代码(转载)

    javascript 2d桌球游戏代码 可以轻松学习,掌握提高,自己的设计思路

    【独家】爱西柚视频分享 转载 不自动播放代码

    爱西柚视频分享 转载 不自动播放代码 改变爱西柚无法取消自动播放的现实,一切变得美好。非优酷 土豆 等代码,那些代码根本不行。

Global site tag (gtag.js) - Google Analytics