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()函数更具可读性,且每个任务都由一个专用函数处理,使代码更易于管理。

深入探索

从历史上看,随着敏捷和测试驱动开发(TDD)方法论的兴起,重构变得流行起来,这些方法论依赖于不断的代码改进以适应变化的需求。有各种各样的重构工具和策略 - 就像我们在Arduino示例中使用的“提取方法”技术。当您从快速原型转向稳定项目时,这是至关重要的,代码的可读性和维护性变得至关重要。

重构时,重要的是要有一套好的测试,以确保更改没有引入任何错误。在Arduino世界中,由于硬件依赖性,自动化测试并不总是直截了当的,但您仍然可以对纯逻辑部分使用单元测试或使用模拟器。

手动重构的替代方法包括使用专用的重构工具,这些工具自动识别代码异味并建议更改。然而,这些工具往往缺乏对微控制器代码的细微差别,并且可能不在Arduino开发环境中可用。

最终,重构是一种艺术,它平衡了改进代码内部结构和引入缺陷的风险。它要求您思考实现细节,如内存使用和处理器时间,尤其是由于微控制器的资源受限性质。

另请参阅

您可以通过马丁·福勒的开创性书籍《重构:改善既有代码的设计》深入了解重构。欲了解更多关于Arduino特定实践的信息,请查看Arduino开发论坛和社区:

记住,目标是清晰、可理解的代码,未来的你和其他人将会感谢你。继续探索,保持整洁!