在阅读一些重构实践时,我偶然发现this article
作者的论点是使用getter和setter修改下面的代码,我认为它们应该是private
但是这样做有什么好处呢?我们不介绍函数调用开销吗?
在:
private int _low, _high;
boolean includes (int arg) {
return arg >= _low && arg <= _high;
}
后:
private int _low, _high;
boolean includes (int arg) {
return arg >= getLow() && arg <= getHigh();
}
int getLow() {return _low;}
int getHigh() {return _high;}
答案 0 :(得分:2)
我们说,出于某种原因,您需要将类属性的名称从_low
,_high
更改为_min
,_max
。在第一个版本中,您还需要修改includes()
功能。在第二个版本中,您只需要修改getter。在你的例子中,好处很小,但是在更大的类中它可以为你节省大量的工作。
一个稍微复杂的例子,其中不再存储较高的值,而是从较低的值和间隔得出:
private int _low, _interval;
boolean includes (int arg) {
return arg >= getLow() && arg <= getHigh();
}
int getLow() {return _low;}
int getHigh() {return _low + _interval;}
再次,您只需要修改getter。
关于开销:根据您使用的语言,编译器将优化函数调用。