Как обрабатывать внутренние данные - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу написать систему ограничений.

  • Пользователь может использовать 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 для своих внутренних переменных.

В текущей практике нормально ли иметь переменные в области действия блока перевода и использовать их напрямую? Или я должен передать их в качестве аргументов в функции?

Я мог бы также обернуть все в одну функцию и сам обрабатывать сигнал, но я бы предпочел что-то вроде выше.

...