Arduino:
Rifattorizzazione

Come fare:

Diciamo che hai una funzione sul tuo Arduino che sta facendo decisamente troppo, come questa:

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

void loop() {
  // Una funzione che sta facendo troppo
  handleEverything();
}

void handleEverything() {
  // Leggi i dati del sensore
  int sensorValue = analogRead(A0);
  // Elabora i dati del sensore
  sensorValue = map(sensorValue, 0, 1023, 0, 255);
  // Stampa i dati del sensore
  Serial.println(sensorValue);
  delay(500);
}

Eseguire il refactoring potrebbe significare dividere handleEverything() in funzioni più piccole e più focalizzate:

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

Dopo il refactoring, la funzione loop() è più leggibile e ogni compito è gestito da una funzione dedicata, rendendo il codice più facile da gestire.

Approfondimento

Storicamente, il refactoring è diventato popolare con l’ascesa delle metodologie Agile e dello Sviluppo Guidato dai Test (TDD), che si basano sul miglioramento costante del codice per adattarsi ai requisiti in cambiamento. Esistono vari strumenti e strategie per il refactoring — come la tecnica “Estrai Metodo” che abbiamo utilizzato nel nostro esempio con Arduino. Questo è essenziale quando si passa da un prototipo veloce a un progetto stabile, dove la leggibilità del codice e la manutenzione diventano cruciali.

Quando si esegue il refactoring, è importante disporre di un buon insieme di test per garantire che le modifiche non abbiano introdotto bug. Nel mondo Arduino, i test automatizzati non sono sempre semplici a causa delle dipendenze hardware, ma è comunque possibile utilizzare test unitari per le parti di logica pura o impiegare simulatori.

Le alternative al refactoring manuale includono l’uso di strumenti di refactoring dedicati, che automatizzano l’identificazione degli odori del codice e suggeriscono modifiche. Tuttavia, questi strumenti spesso non colgono le sfumature del codice per microcontroller e potrebbero non essere disponibili nell’ambiente di sviluppo Arduino.

In ultima analisi, il refactoring è un’arte che bilancia il miglioramento della struttura interna del codice contro il rischio di introdurre difetti. Richiede di riflettere su dettagli implementativi come l’uso della memoria e il tempo di elaborazione, specialmente a causa della natura limitata in termini di risorse dei microcontroller.

Vedi Anche

Puoi approfondire il refactoring con il libro fondamentale di Martin Fowler Refactoring: Improving the Design of Existing Code. Per uno sguardo più attento alle pratiche specifiche di Arduino, dai un’occhiata ai forum e alle comunità di sviluppo Arduino:

Ricorda, l’obiettivo è un codice pulito e comprensibile per cui il futuro tu e gli altri ti ringrazieranno. Continua a smanettare e mantienilo ordinato!