Arduino:
Refactorización

Cómo hacerlo:

Supongamos que tienes una función en tu Arduino que está haciendo demasiado, como esta:

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

void loop() {
  // Una función que está haciendo demasiado
  handleEverything();
}

void handleEverything() {
  // Leer datos del sensor
  int sensorValue = analogRead(A0);
  // Procesar los datos del sensor
  sensorValue = map(sensorValue, 0, 1023, 0, 255);
  // Imprimir los datos del sensor
  Serial.println(sensorValue);
  delay(500);
}

Refactorizarlo podría parecerse a dividir handleEverything() en funciones más pequeñas y enfocadas:

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

Después de refactorizar, la función loop() es más legible, y cada tarea es manejada por una función dedicada, haciendo el código más fácil de gestionar.

Inmersión Profunda

Históricamente, la refactorización se popularizó con el auge de las metodologías Agile y Desarrollo Dirigido por Pruebas (TDD), que dependen de la mejora constante del código para adaptarse a los requisitos cambiantes. Hay varias herramientas y estrategias para refactorizar, como la técnica “Extraer Método” que utilizamos en nuestro ejemplo de Arduino. Esto es esencial cuando pasas de un prototipo rápido a un proyecto estable, donde la legibilidad y el mantenimiento del código se vuelven cruciales.

Cuando refactorizas, es importante tener un buen conjunto de pruebas para asegurarte de que los cambios no han introducido ningún error. En el mundo de Arduino, las pruebas automatizadas no siempre son sencillas debido a las dependencias de hardware, pero aún puedes usar pruebas unitarias para las partes de lógica pura o emplear simuladores.

Las alternativas a la refactorización manual incluyen el uso de herramientas de refactorización dedicadas, que automatizan la identificación de “malos olores” en el código y sugieren cambios. Sin embargo, estas herramientas a menudo carecen de la sutileza para el código de microcontroladores y podrían no estar disponibles en el entorno de desarrollo de Arduino.

Últimamente, refactorizar es un arte que equilibra la mejora de la estructura interna del código contra el riesgo de introducir defectos. Requiere que pienses en detalles de implementación como el uso de memoria y el tiempo del procesador, especialmente debido a la naturaleza de recursos limitados de los microcontroladores.

Ver También

Puedes profundizar en la refactorización con el libro seminal de Martin Fowler Refactoring: Improving the Design of Existing Code. Para echar un vistazo más de cerca a las prácticas específicas de Arduino, consulta los foros y comunidades de desarrollo de Arduino:

Recuerda, el objetivo es un código limpio, comprensible que tú futuro, y otros, agradecerán. ¡Sigue hackeando, y manténlo ordenado!