if 函数的另一种解决方案,用于减少编写

another solution for if function for less writing

你好,我正在寻找一个函数的解决方案,以减少编写代码并使代码混乱 :D

问题是:有没有别的函数或者别的IF函数的用法可以少写代码?因为我需要编写多达 50 行的 IF 函数

添加一个代码来说明我是如何做的,还有另一种方法吗,因为我需要它分开才能使函数工作,我从 mqtt 获取值,不同的值需要存储在程序的内存中

if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
  }
  else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
    }
    else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
    }
  if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
  }
  else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
    }
    else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
    }

具有相同的内部功能:

    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);

所以你可以把它放在它自己的函数中以简化为:

  if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
    myFunction();
  }
  else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
    myFunction();
  }
    else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
    myFunction();
}

我的函数在哪里:

    void myFunction() {
       digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
       delay(5000);
       digitalWrite(LED_PIN, LOW);
    }

然后你可以看到这三个条件非常相似:

if(soilmoisturepercent == TESTAS) {
      if (TESTAS == 30) {
        myFunction();
      }
      else if (TESTAS == 29) {
        myFunction();
      }
      else if (TESTAS == 28) {
        myFunction();
    }
}

然后您可以使用 || 或运算符再次简化:

if(soilmoisturepercent == TESTAS) {
      if (TESTAS == 30 || TESTAS == 29 || TESTA == 28) {
        myFunction();
      }
}

另一种选择是使用小于或大于运算符来比较范围,假设您想要任何等于或小于 30 的 TESTAS。例如:

if (TESTAS <= 30) {
    myFunction();
} 

您可以使用开关盒。

switch(TESTAS){
    case 30:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    case 29:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    case 28:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    default:
         your_fuction();
    
}