成员变量的滥用

成员变量,或者说属性,能少用一个就少用一个。

一个类刚开始设计写出来的时候,大多时候它是很单纯的,功能单一,更好听的说法应该是专一。但是越写越复杂时,它就容易被添加各种各样的变量,用来表达一个一个的状态或者暂存值。

结果就是,为了维护它众多的变量,内部代码的耦合会非常严重,逻辑复杂,吃力不讨好。

状态减少,运算量就会增加,但是这点牺牲是值得的。从代码的角度来看是用时间换空间,其实这里的好处并不是一两个变量存储空间的减少,而是程序更好维护了,换来的是漂亮的代码,健壮的程序。

补充举例

应评论里@Ikaros_vv 的要求, 简单举例说下。
比如定义一个Rect,那么它必须要有的属性是origin和size,除此以外还有一个经常用到的属性center。
假如为Rect添加一个变量center,那么每次改动origin和size时,都要修改center值以保持所有变量状态同步一致,而每次修改center时,也要同步修改origin和size。
这种为Rect增加一个状态的方式,优点是在需要频繁读取center时会非常高效,但缺点是维护状态的成本太高,特别是以后再增加一个对center有影响的变量时,代码会变得复杂,很容易出错。
假如只提供center的读写方法,而不存储它的值,就能对代码有非常大的改善。在swift里这也可以叫做计算属性。不存储center的话,origin和size这两个属性就完全不需要知道center的存在,随意修改而不用考虑由此造成的状态同步问题。
这样,化双向的交叉耦合关系为单向清晰的关系,这虽然会增加每次读取center的运算量,但却保持了代码的轻耦合性,更容易维护扩展。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,083评论 6 13
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 5,282评论 2 4
  • 每年夏天,总有一个段子在网络上流传:城市上空电闪雷鸣如魔幻大片,配文是“哪位道兄在此渡劫?” 大家都习惯性哈哈一乐...
    muer724阅读 3,868评论 0 0

友情链接更多精彩内容