我正在做一个涉及“构建”SQL的项目。

作为构建过程的一部分,我经常会遇到这样的情况:一个构建方法在计算时考虑了很多布尔条件(或标志)。

这通常会导致该方法看起来像一个很大的if/elif/else树(请考虑这段明显不好的代码):

def build(a:bool, b:bool, c:bool, d:bool, e:bool):
    output = ...
    if a:
        if b:
            if c:
                pass  # mutate output
            else:
                pass  # mutate output

        else:
            if c:
                if d:
                    pass  # mutate output
                else:
                    pass  # mutate output
            else:
                if d:
                    pass  # mutate output
                else:
                    pass  # mutate output
    elif e or b:
        pass
    else:
        pass

    return output

我问你的问题是,你将如何重构这样的代码?

我正在寻找某种设计模式或类似的方法来制作代码:

  • 可读性更强
  • 支持现在“构建”应该考虑新标志的情况(只要项目进展我们发现了新的情况/特性,我们就希望添加到计算中)。
  • 很容易测试

我的项目是用python 3.8编写的,但我认为这是一个可能与任何其他编程语言相关的通用问题。

重构大型if/elif/else子句的更多相关文章

  1. 购买的物品总数

    我一直在尝试创建一个方法来添加用户购买的所有物品,但找不到正确的代码。我已经制作了一个程序,可以打印用户想要购买的商品,但我似乎找不到合适的代码来添加所有商品的价格这是我迄今为止所做的。它不添加所显示项目的价格,而是只添加数组列表成本中给出的价格。我无法调用arraylistquant,因为它是字符串。如何添加用户购买的物品的价格?

  2. If Else语句只返回python中的Else

    我正在尝试制作一个生成器,你可以从列表中输入你想要的内容,它会为你生成。我让它开始工作了,只是当我键入想要的列表项时,它只返回了我的Else语句。下面是我的代码的一部分:当我键入“goblin”时,它应该返回一个名称。相反,它返回了else语句。

  3. Swift:为一组日期创建一个范围

    对于我正在做的if语句,我希望条件是当前日期是否在某个日期范围内。这就是我想要的:

  4. 如何避免在Python的while循环中使用else时向列表添加元素

    我有一个问题,当我使用代码并写下“否”时,我的程序会将其添加到列表中,而不是移动到<>;没有添加“no”的块。我创建的解决方案可以在else之后添加listagosci.remove(-1)-但在我看来,程序不应该添加这个“no”。我也知道,当有人在n5输入中写一些不同于yes/no的东西时,没有if语句,但我现在不需要它。我尝试了我所知道的一切。

  5. 程序可以&#39;t比较字符串

    我在树莓中创建了一个这样的程序:我一开始也做了一些参考,但这些都不是问题。当我运行这段代码并将卡片放在读卡器上时,它不会将if语句变为真,也不会起作用。当我在没有if语句的情况下这样做时,一切都正常,我也可以打印文本字符串。

  6. 使用Jest测试中介设计模式

    在某种程度上,我觉得调解模式将是处理玩家和CPU发射导弹的完美选择。现在,我的任务鼓励我不用console.log而是用Jest彻底测试游戏。我已经能够测试游戏的一些功能,但调解模式令人困惑。EventManager中的函数notifyAttack已经用console.log的旧方法进行了测试。基本上,GameManager负责改变回合,设置游戏,而EventManager专门处理防止Player和CPU之间耦合的战斗如果你需要这个问题的更多细节,我想听听你的意见。

  7. 重构大型if/elif/else子句

    作为构建过程的一部分,我经常会遇到这样的情况:一个构建方法在计算时考虑了很多布尔条件(或标志)。这通常会导致该方法看起来像一个很大的if/elif/else树:我问你的问题是,你将如何重构这样的代码?我正在寻找某种设计模式或类似的方法来制作代码:可读性更强支持现在“构建”应该考虑新标志的情况。很容易测试我的项目是用python3.8编写的,但我认为这是一个可能与任何其他编程语言相关的通用问题。

随机推荐

  1. 如何扩展ATmega324PB微控制器的以下宏寄存器?

    我目前正在学习嵌入式,我有以下练习:展开以下宏寄存器:如果有人解决了这个问题,我将不胜感激,以便将来参考

  2. Python将ONNX运行时设置为返回张量而不是numpy数组

    在python中,我正在加载预定义的模型:然后我加载一些数据并运行它:到目前为止,它仍在正常工作,但我希望它默认返回Tensor列表,而不是numpy数组。我对ONNX和PyTorch都是新手,我觉得这是我在这里缺少的基本内容。这将使转换中的一些开销相同。

  3. 在macOS上的终端中使用Shell查找文件中的单词

    我有一个文本文件,其中有一行:我需要找到ID并将其提取到变量中。我想出了一个RexEx模式:但它似乎对我尝试过的任何东西都不起作用:grep、sed——不管怎样。我的一个尝试是:我为这样一个看似愚蠢的问题感到抱歉,但我在互联网上找不到任何东西:我在SO和SE上读了几十个类似的问题,并在谷歌上搜索了几个教程,但仍然无法找到答案。欢迎提供任何指导!

  4. react-chartjs-2甜甜圈图中只有标题未更新

    我正在使用react-chartjs-2在我的网站中实现甜甜圈图。下面是我用来呈现图表的代码。我将甜甜圈图的详细信息从父组件传递到子组件,所有道具都正确传递。当我在beforeDraw函数外部记录props.title时,它会记录正确的值,但当我在beforeDraw函数内部记录props.title时,它将记录标题的前一个值,从而呈现标题的前值。我在这里做错了什么?

  5. 如何在tkinter中使用Python生成器函数?

    生成器函数承诺使某些代码更易于编写。但我并不总是知道如何使用它们。假设我有一个斐波那契生成器函数fib(),我想要一个显示第一个结果的tkinter应用程序。当我点击“下一步”按钮时,它会显示第二个数字,依此类推。我如何构建应用程序来实现这一点?我可能需要在线程中运行生成器。但如何将其连接回GUI?

  6. 如何为每次提交将存储库历史记录拆分为一行?

    我正在尝试获取存储库的历史记录,但结果仅以单行文本的形式返回给我。

  7. 尝试在颤振项目上初始化Firebase时出错

    当尝试在我的颤振项目上初始化firebase时,我收到了这个错误有人知道我能做什么吗?应用程序分级Gradle插件Gradle项目颤振相关性我已经将firebase设置为Google文档已经在另一个模拟器上尝试过,已经尝试过创建一个全新的模拟器,已经在不同的设备上尝试过了,已经尝试了特定版本的firebase,已经尝试添加但没有任何效果,已经在youtube上看到了关于它的每一个视频,该应用程序在android和iOS两个平台上都抛出了这个错误

  8. 在unix中基于当前日期添加新列

    我试图在unix中基于时间戳列在最后一个单元格中添加一个状态列。我不确定如何继续。

  9. 麦克斯·蒙特利。我一直得到UncaughtReferenceError:当我在终端中写入node-v时,节点未定义

    如果这是您应该知道的,请确认:我已将所有shell更改为默认为zsh。当我在终端中写入node-v时,我一直收到“UncaughtReferenceError:nodeisnotdefined”。但它显示节点已安装。我是个新手,在这方面经验不足。

  10. 如何在前端单击按钮时调用后端中的函数?

    那么如何在后端添加一个新的端点,点击按钮调用这个函数。

返回
顶部