我如何构建可维护性的 if 语句?

How do I structure if-statements for maintainability?

我有一个用于非常特定目的的包,它被导入到许多其他系统中,它由 lotif 语句组成。有没有一种方法可以重写代码,以便可以将其导入到要求略有不同(所有添加到 if 语句列表中)的附加系统中,同时保持向后兼容性?

大大简化的当前版本:

def analyze(result):
    a, b, c, d = result
    value = ''
   
    if a > 50:
        value += 'Y'
    else:
        value += 'N'

    if a == 1 and b == 1 and c == 1 and d == 1:
        value += '1'
    elif a == 2 and b == 1 and c == 1:
        value += 'A'
    elif a == 1 and b == 1 and c == 1:
        value += '2'

    ...

    if d > 100:
        value += '24'
    else:
        value += '0'
    

    return value

return 值没有特定的逻辑。

所需功能:

def analyze(result):
    a, b, c, d = result
   
    if a > 50:
        value += 'Y'
    elif a > 25 and b > 50:                              # new line added here
        value += 'X'                                     # new line added here
    else:
        value += 'N'

    if a == 1 and b == 1 and c == 1 and d == 1:
        value += '1'
    elif a == 2 and b == 1 and c == 1:
        value += 'A'
    elif a == 1 and b == 1 and c == 1:
        value += '2'

    elif a == -1 and b == -1 and c == -1 and d == -1:    # new line added here
        value += 'False'                                 # new line added here
    elif a == -2 and b == -2 and c == -2 and d == -2:    # new line added here
        value += '3'                                     # new line added here

    ...

    if d > 100:
        value += '24'
    else:
        value += '0'
    

    return value

我目前的做法是重复代码,这意味着在两个地方维护它。我想知道是否有可能以这样一种方式构建需要添加的代码,即它可以导入原始函数并在它之前或之后进行一些额外的检查,尽管这会改变顺序。有更好的方法吗?

原始代码在很多地方使用,并且无法在这么多其他系统上提供更新 - 我的代码只会在一个地方使用它。

我有一个解决方案,虽然不是很好。 analyze() 被重写以接受链接到 else 语句的附加参数。

def analyze(result, is_experimental=False):
    a, b, c, d = result
    value = ''
   
    if a > 50:
        value += 'Y'
    elif not is_experimental:
        value += 'N'

    if a == 1 and b == 1 and c == 1 and d == 1:
        value += '1'
    elif a == 2 and b == 1 and c == 1:
        value += 'A'
    elif a == 1 and b == 1 and c == 1:
        value += '2'

    ...

    if d > 100:
        value += '24'
    elif not is_experimental:
        value += '0'
    

    return value

这确保代码保持与当前使用它的任何东西的向后兼容性。

使用此特定函数的代码的主要部分现在需要解析输出并使用正则表达式和位置搜索进行一些替换。可能有更好的方法,但它现在可以在两个系统中使用,并且对原始功能的任何更新都应该反映在新系统中。