【问题标题】:Ternary logic for result (not about ternary operator) [closed]结果的三元逻辑(与三元运算符无关)[关闭]
【发布时间】:2013-11-25 12:48:02
【问题描述】:

我有一个代码(例如 Java):

    boolean A(...){
       if (...) return true;
       else return false;
    }

    void C(...){

       if (A) {doSomeThing();}
       else {doNothing();}
    }

但是逻辑发生了变化,今天我需要退回 3 个案例。它看起来像这样

        int A(...){
           if (...){ return int;}
           else {
              if (...) {return int;}
              else {return int;}
           }
        }

        void C(...){

           if (A == 1) {doSomeThing1();}
           if (A == 2) {doSomeThing2();}
           if (A == 3) {doSomeThing3();}
        }

这是最佳实践还是我应该使用其他东西而不是“int”?或者我应该改变我的逻辑并将其划分为两个布尔值? 附言我知道这个问题很全面,但它让我感到不安。

【问题讨论】:

  • 使用switch-case
  • 嗯,一个好的建议需要更多关于这些方法的作用的信息。例如,它是否可以在将来更改以返回更多值?
  • 例如,我有一个文本框和处理程序,它显示警告“符号数量错误”。但今天我想显示 3 种类型 - “符号太多”,“太多”,没有任何消息。
  • 使用三个 if 检查相同的变量检查绝对是一个不好的做法,为什么假设“A 为 1”在这种情况下会发生“doSomeThing1()”但代码仍然会继续尝试 2不需要的 IF 检查。我建议将多个 if 更改为“if else if”或切换大小写。

标签: java logic boolean-logic


【解决方案1】:

最佳做法是使用枚举类型而不是布尔类型。

public enum PossibleValues {
  TRUE, FALSE, NEITHER;
}

【讨论】:

  • 还有一个开关,根据 Ruchira 的回答 :)
  • 好吧,我认为这个问题是关于正确使用的类型。
【解决方案2】:

实际上您应该检查多少条件取决于您的要求。为此,您可以使用if-elseswith-cases

【讨论】:

  • 还有一个枚举,根据 user1455836 的回答。
  • @CompuChip 由您决定。它将提供更多的可读性。
  • 您还可以添加额外的逻辑作为枚举方法。如果您不小心使用了不存在的值,编译器会告诉您。
猜你喜欢
  • 2014-03-18
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2017-06-20
  • 2012-10-18
相关资源
最近更新 更多