Arduino:
Рефакторинг

Как:

Допустим, у вас есть функция на вашем Arduino, которая делает слишком много, вот так:

void setup() {
  Serial.begin(9600);
}

void loop() {
  // Функция, которая делает слишком много
  handleEverything();
}

void handleEverything() {
  // Чтение данных сенсора
  int sensorValue = analogRead(A0);
  // Обработка данных сенсора
  sensorValue = map(sensorValue, 0, 1023, 0, 255);
  // Вывод данных сенсора
  Serial.println(sensorValue);
  delay(500);
}

Рефакторинг может выглядеть как разделение handleEverything() на более мелкие, сфокусированные функции:

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = readSensorData();
  int processedValue = processSensorData(sensorValue);
  printData(processedValue);
  delay(500);
}

int readSensorData() {
  return analogRead(A0);
}

int processSensorData(int sensorValue) {
  return map(sensorValue, 0, 1023, 0, 255);
}

void printData(int data) {
  Serial.println(data);
}

После рефакторинга функция loop() становится более читаемой, и каждая задача обрабатывается отдельной функцией, что делает код более легко управляемым.

Углубление

Исторически рефакторинг стал популярен с ростом методологий Agile и разработки через тестирование (TDD), которые опираются на постоянное улучшение кода для адаптации к изменяющимся требованиям. Существуют различные инструменты и стратегии для рефакторинга — например, техника “Extract Method”, которую мы использовали в нашем примере с Arduino. Это особенно важно, когда вы переходите от быстрого прототипа к стабильному проекту, где читаемость кода и его поддержка становятся критически важными.

При рефакторинге важно иметь хороший набор тестов, чтобы убедиться, что изменения не внесли никаких ошибок. В мире Arduino автоматизированное тестирование не всегда просто из-за зависимостей от аппаратного обеспечения, но вы все равно можете использовать модульное тестирование для чисто логических частей или применять симуляторы.

Альтернативы ручному рефакторингу включают в себя использование специализированных инструментов для рефакторинга, которые автоматизируют идентификацию “запахов” кода и предлагают изменения. Однако эти инструменты часто не учитывают нюансы кода для микроконтроллеров и могут быть недоступны в среде разработки Arduino.

В конечном итоге, рефакторинг — это искусство, балансирующее между улучшением внутренней структуры кода и риском внесения дефектов. Он требует от вас размышлений о деталях реализации, таких как использование памяти и процессорное время, особенно из-за ограниченных ресурсов микроконтроллеров.

Смотрите также

Вы можете глубже погрузиться в рефакторинг с книгой Мартина Фаулера Рефакторинг: Улучшение дизайна существующего кода. Для ближайшего рассмотрения практик, специфичных для Arduino, обратите внимание на форумы и сообщества по разработке на Arduino:

Помните, цель - чистый, понятный код, за который вас и других в будущем будут благодарны. Продолжайте хакать и держите код в чистоте!