Arduino:
Refaktoryzacja

Jak to zrobić:

Załóżmy, że masz na swoim Arduino funkcję, która robi zbyt wiele, na przykład taką:

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

void loop() {
  // Funkcja robiąca zbyt wiele
  handleEverything();
}

void handleEverything() {
  // Odczyt danych z czujnika
  int sensorValue = analogRead(A0);
  // Przetwarzanie danych z czujnika
  sensorValue = map(sensorValue, 0, 1023, 0, 255);
  // Drukowanie danych z czujnika
  Serial.println(sensorValue);
  delay(500);
}

Refaktoryzacja może polegać na podzieleniu handleEverything() na mniejsze, bardziej skupione funkcje:

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);
}

Po refaktoryzacji funkcja loop() jest bardziej czytelna, a każde zadanie jest obsługiwane przez dedykowaną funkcję, co sprawia, że kod jest łatwiejszy do zarządzania.

Głębsze spojrzenie

Historycznie, refaktoryzacja zyskała na popularności wraz z rozwojem metodyk Agile i Test-Driven Development (TDD), które opierają się na ciągłym ulepszaniu kodu w celu dostosowania się do zmieniających się wymagań. Istnieją różne narzędzia i strategie refaktoryzacji - takie jak technika “Extract Method”, której użyliśmy w naszym przykładzie z Arduino. Jest to niezbędne, gdy przechodzisz od szybkiego prototypu do stabilnego projektu, w którym czytelność i łatwość utrzymania kodu stają się kluczowe.

Podczas refaktoryzacji ważne jest, aby mieć dobry zestaw testów, aby upewnić się, że zmiany nie wprowadziły żadnych błędów. W świecie Arduino, automatyczne testowanie nie zawsze jest proste ze względu na zależności sprzętowe, ale nadal można używać testów jednostkowych dla części zawierających czystą logikę lub korzystać z symulatorów.

Alternatywami dla ręcznej refaktoryzacji są dedykowane narzędzia do refaktoryzacji, które automatyzują identyfikację “zapachów” kodu i sugerują zmiany. Jednak te narzędzia często nie uwzględniają subtelności kodu mikrokontrolera i mogą nie być dostępne w środowisku rozwojowym Arduino.

Ostatecznie, refaktoryzacja to sztuka równoważenia między poprawą wewnętrznej struktury kodu a ryzykiem wprowadzenia defektów. Wymaga to od Ciebie myślenia o szczegółach implementacji, takich jak zużycie pamięci i czas procesora, zwłaszcza ze względu na ograniczone zasoby mikrokontrolerów.

Zobacz także

Możesz pogłębić wiedzę na temat refaktoryzacji dzięki kluczowej książce Martina Fowlera Refaktoryzacja: Ulepszanie projektu istniejącego kodu. Aby przyjrzeć się bliżej praktykom specyficznym dla Arduino, sprawdź fora i społeczności programistów Arduino:

Pamiętaj, że celem jest czysty, zrozumiały kod, za który przyszły Ty i inni będą Ci wdzięczni. Kontynuuj hakerstwo i dbaj o porządek!