有没有一种更干净的方法来检查条件以设置变量然后使用一堆IF语句?

问题描述

我正在寻找可能缩短代码的时间。似乎超级多余,但我不确定除了大型的IF语句外,我还要如何检查特定条件以设置变量?

IF MaxContaminationCode := -2 THEN
        ContaminationClass := '000';
    ELSIF MaxContaminationCode := -1 THEN
        ContaminationClass := '00';
    ELSIF MaxContaminationCode := 0 THEN
        ContaminationClass := '0';
    ELSIF MaxContaminationCode := 1 THEN
        ContaminationClass := '1';
    ELSIF MaxContaminationCode := 2 THEN
        ContaminationClass := '2';
    ELSIF MaxContaminationCode := 3 THEN
        ContaminationClass := '3';
    ELSIF MaxContaminationCode := 4 THEN
        ContaminationClass := '4';
    ELSIF MaxContaminationCode := 5 THEN
        ContaminationClass := '5';
    ELSIF MaxContaminationCode := 6 THEN
        ContaminationClass := '6';
    ELSIF MaxContaminationCode := 7 THEN
        ContaminationClass := '7';
    ELSIF MaxContaminationCode := 8 THEN
        ContaminationClass := '8';
    ELSIF MaxContaminationCode := 9 THEN
        ContaminationClass := '9';
    ELSIF MaxContaminationCode := 10 THEN
        ContaminationClass := '10';
    ELSIF MaxContaminationCode := 11 THEN
        ContaminationClass := '11';
    ELSIF MaxContaminationCode := 12 THEN
        ContaminationClass := '12';
    END_IF

使用此代码,我正在检查计算值(MaxContaminationCode)是否为INT,是否为特定值。如果是特定值,则将“ ContaminationClass”(是字符串)设置为相应的值。

解决方法

通常,如果您有许多不同的情况,则最好使用CASE语句(其他语言中的“ switch”),如 DrBwts 所述。另外,正如 Gereon 所说,在您的示例中,您可以减少检查的案件。因此,对于您的示例,它看起来像这样:

CASE MaxContaminationCode OF
-2:
  ContaminationClass := '000';
-1:
  ContaminationClass := '00';
0..12: // if you ONLY want 0 to 12,otherwise use ELSE here
  ContaminationClass := INT_TO_STRING(MaxContaminationCode);
END_CASE
,

我同意以上建议。但是要使其更紧凑(-2行)。

ContaminationClass := INT_TO_STRING(MaxContaminationCode);
IF MaxContaminationCode = -2 THEN
    ContaminationClass := '000';
ELSIF MaxContaminationCode = -1 THEN
    ContaminationClass := '00';
END_IF