Допустим, у меня есть некоторый код, подобный следующему, и что 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;
Но это просто заменит кучу ненужных назначений кучей ненужных булевых проверок.
Меня не беспокоит производительность этого кода; на самом деле меня просто беспокоит идея сделать что-то совершенно ненужное. Существует ли стандартный способ настройки одноразовых переключателей, такой как этот, который более интуитивно «правильный» в дизайне?
Что касается того, делает ли меня даже забота об этом плохим программистом: давайте оставим это обсуждение на другой день, пожалуйста.