Я хочу написать систему ограничений.
- Пользователь может использовать
extendCmd()
или retractCmd()
, чтобы расширить или убрать объект.
- Он может установить максимальное расширение, растягивая объект до определенной точки и вызывая
setMaxExtension()
. Когда значение установлено, объект не может быть расширен, если он длиннее установленного значения
- Он может
clearMaxExtension()
.
calculateExt()
использует несколько датчиков для получения значения
Для этого мне нужно внутренне сохранить расширение (необязательно давать числовые значения пользователю).
Я придумал следующий дизайн (грубая схема, результаты и необходимые аргументы для ясности удалены):
static int maxExt;
static bool MaxIsSet;
static void extend(){...};
static void retract(){...};
static void calculateExt(){...};
void extendCmd()
{
const int currentExt = calculateExt();
if( !maxIsSet || !(maxExt < currentExt))
{
extend();
}
}
void retractCmd()
{
const int currentExt = calculateExt();
if( currentExt > 0 )
{
retract();
}
}
void setMaxExtension()
{
maxExt = calculateExt();
maxIsSet = true;
}
void clearMaxExtension()
{
maxExt = 0;
maxIsSet = false;
}
Таким образом, я предоставляю нужные функции основной программе и получаю что-то вроде get и set для своих внутренних переменных.
В текущей практике нормально ли иметь переменные в области действия блока перевода и использовать их напрямую? Или я должен передать их в качестве аргументов в функции?
Я мог бы также обернуть все в одну функцию и сам обрабатывать сигнал, но я бы предпочел что-то вроде выше.