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 і Test-Driven Development (TDD), які покладаються на постійне вдосконалення коду для адаптації до змінних вимог. Існує безліч інструментів і стратегій для рефакторингу — як наприклад техніка “Витягнути метод”, яку ми використовували у нашому прикладі з Arduino. Це важливо, коли ви переходите від швидкого прототипу до стабільного проекту, де читабельність коду та легкість його підтримки стають критичними.

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

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

В кінцевому підсумку, рефакторинг - це мистецтво, яке балансує між покращенням внутрішньої структури коду та ризиком внесення дефектів. Це вимагає від вас роздумів про деталі реалізації, такі як використання пам’яті та часу процесора, особливо з огляду на обмежені ресурси мікроконтролерів.

Дивіться також

Ви можете глибше зануритися в рефакторинг з основоположною книгою Мартіна Фаулера Refactoring: Improving the Design of Existing Code. Для більш детального огляду практик специфічних для Arduino, ознайомтесь з форумами та спільнотами розробників Arduino:

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