更新对象时进行无意义的getter检查

时间:2011-12-19 07:57:06

标签: performance language-agnostic

希望这不会是一个愚蠢或迂腐的问题,但我很好奇。

偶尔我会遇到现有对象的属性可能需要使用新变量更新的情况,我会这样做(没有特定的语言):

public void Update(date, somevar){
 if(date > this.Date){
  this.Var = somevar;
 }
}

这个想法是,如果传递给函数的日期比当前对象中的日期更新,则更新变量。可以把它想象成缓存某些东西的基本方式。

现在,有趣的是,我知道 somevarthis.Var相比永远不会“老”,但它可能是相同的。因此,据我所知,检查日期毫无意义,因此程序执行无意义。

所以真正的问题是,无论以何种方式更好 - 每次调用Update时执行对this.Var的写入,或者获取this.Date,比较它,然后可能更好执行写入。只是在这里引入一些有趣的东西,如果要多次调用Update会怎么样?

如果我给出的例子毫无意义或有漏洞,我道歉;我想不出另一种举例的方法,但希望你能看到我想在这里提出的观点。

1 个答案:

答案 0 :(得分:2)

除非由于某种原因,分配是一项昂贵的操作(例如,它总是触发数据库写入),否则这不会使您的程序更快。

将检查放入您的setter通常是为了强制执行数据完整性,即保留程序不变量,从而保护其他代码的正确性,这一点非常重要。