【问题标题】:Removing separate IF statements删除单独的 IF 语句
【发布时间】:2022-11-14 17:32:40
【问题描述】:

我想知道在这种情况下最好使用哪种类型的替代品。

if (method1(parameters)
  method2(parameters);
if (method1(differentParameters)
  method2(differentParameters;
//and so on. 

代码是一个黑白棋游戏的实现,第一个方法检查是否有可以翻转的对手棋子,内部方法翻转棋子。我们检查所有 8 个方向并相应地翻转碎片。

该代码有效,但我正在寻找重构它的替代方法。

【问题讨论】:

  • 能分享一下真实的代码吗?在这样一个模糊的例子中找到合适的替代品有点困难。大多数适当的解决方案可能更具体到手头的实际情况。
  • 返回 true 的将被执行。 if/else 无法实现,因为所有给定的 if 都需要检查- 这部分有点不一致。如果您知道一次只能有一个为真,则可以使用else,因此在找到true 之一后,可以跳过其余的。但是,如果您有 8 个 ifs 可以一次运行任意数量的它们,那么像现在这样在一个地方收集它们可能是最多可以做的。
  • 我同意查看您的实际代码。它让我们更好地了解您的尝试。

标签: java oop design-patterns


【解决方案1】:

如果在我看来,您的方法 1 是 Check,而您的方法 2 可能称为 Flip。 在我看来,您的问题可以像这样轻松封装:

CheckAndFlip(params) {
   if (Check(params)) 
      Flip(Params)
}

然后打电话

CheckAndFlip(params);
CheckAndFlip(otherParams);
...

这对我来说看起来好多了。

【讨论】:

    【解决方案2】:

    如果您的 method1(param) 检查变量 param is 您可以执行以下操作:

    Object o = method1(param);
    
    switch (o)
      case o == 1:
        method2(o)
      case o == 2:
        method2(o)
    

    或类似的东西

    【讨论】:

    • OP 的伪代码表明,如果 method1 针对不同的参数返回 true,则可能会多次调用 method2 - 此代码没有该功能。
    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多