【发布时间】:2009-09-21 16:24:05
【问题描述】:
假设我有如下代码,processData 每分钟执行数百甚至数千次:
class DataProcessor {
private:
DataValidator* validator;
bool atLeastOneDataPoint;
bool dataIsValid(Data* dataToValidate) {
return validator->validate(dataToValidate);
}
public:
// ...
void processData(Data* dataToProcess) {
if (dataIsValid(dataToProcess) || !atLeastOneDataPoint) {
// process data
// ...
atLeastOneDataPoint = true;
}
}
// ...
}
从它的名字可以推断,atLeastOneDataPoint 是一个真正只需要设置一次的变量,但在上面的代码中,每次在第一个数据点之后调用processData 时都会设置它。当然,我可以将赋值行更改为:
if (!atLeastOneDataPoint) atLeastOneDataPoint = true;
但这只会用一堆不必要的布尔检查替换一堆不必要的分配。
我不关心这段代码的性能;真的,我只是被做一些完全不必要的事情的想法所困扰。有没有一种标准的方式来设置这样的一次性开关,在设计上更直观“合适”?
至于关心这个是否会让我成为一个糟糕的程序员:请让我们改天再讨论吧。
【问题讨论】:
标签: language-agnostic performance boolean switch-statement