成员变量,或者说属性,能少用一个就少用一个。
一个类刚开始设计写出来的时候,大多时候它是很单纯的,功能单一,更好听的说法应该是专一。但是越写越复杂时,它就容易被添加各种各样的变量,用来表达一个一个的状态或者暂存值。
结果就是,为了维护它众多的变量,内部代码的耦合会非常严重,逻辑复杂,吃力不讨好。
状态减少,运算量就会增加,但是这点牺牲是值得的。从代码的角度来看是用时间换空间,其实这里的好处并不是一两个变量存储空间的减少,而是程序更好维护了,换来的是漂亮的代码,健壮的程序。
补充举例
应评论里@Ikaros_vv 的要求, 简单举例说下。
比如定义一个Rect,那么它必须要有的属性是origin和size,除此以外还有一个经常用到的属性center。
假如为Rect添加一个变量center,那么每次改动origin和size时,都要修改center值以保持所有变量状态同步一致,而每次修改center时,也要同步修改origin和size。
这种为Rect增加一个状态的方式,优点是在需要频繁读取center时会非常高效,但缺点是维护状态的成本太高,特别是以后再增加一个对center有影响的变量时,代码会变得复杂,很容易出错。
假如只提供center的读写方法,而不存储它的值,就能对代码有非常大的改善。在swift里这也可以叫做计算属性。不存储center的话,origin和size这两个属性就完全不需要知道center的存在,随意修改而不用考虑由此造成的状态同步问题。
这样,化双向的交叉耦合关系为单向清晰的关系,这虽然会增加每次读取center的运算量,但却保持了代码的轻耦合性,更容易维护扩展。
网友评论