【问题标题】:When should you use a method to return a value?什么时候应该使用方法返回值?
【发布时间】:2012-01-08 20:56:14
【问题描述】:

我对 Java 还很陌生,所以请原谅我问了一个看似愚蠢的问题。

我正在编写一个简单的“用户登录”程序。要检查用户名和密码是否匹配,我可以使用简单的布尔变量或使用布尔方法并将值返回为真或假。

public boolean match() {
    if(userField.getText().equals(testUser)&&passField.getText().equals(testPass))
        return true;
    else
        return false;
}

上面是一个使用布尔方法的非常简单的例子。

我的问题是,根据经验,使用布尔方法还是变量更有利?我知道这对程序员来说可能更多是个人喜好,但我不明白为什么你会选择其中一个。

【问题讨论】:

  • 感谢大家快速而有帮助的回复!

标签: java methods boolean


【解决方案1】:
  1. 使用一种方法,以便子类可以覆盖和定义自己的匹配。
  2. 您应该始终保持字段/成员变量为私有,并通过方法授予对它们的访问权限。

理想情况下,您应该将 match 方法抽象到接口中,并让实现覆盖 ma​​tch() 方法

【讨论】:

  • @MДΓΓБДLL 我相信这不仅仅是回答问题,而是通过告诉他最佳实践来帮助他更上一层楼。
  • 我想你正在回答这个问题。 (它的措辞很糟糕,因此有争论的余地。)我将其解读为,“我应该从方法返回结果,还是将其存储在成员变量中?”
  • “我相信这不仅仅是为了回答,而是为了帮助他超越一个层次”我同意,所以我总结了以下几点:在方法中使用一个返回语句作为一种良好的做法代码更具可读性。
【解决方案2】:

在这种情况下,你绝对应该像这样重写它:

public boolean match() {
    return userField.getText().equals(testUser)
        && passField.getText().equals(testPass);
}

【讨论】:

  • 我不知道这如何回答这个问题。
  • 问题不清楚。我将其解释为询问是否返回一个简单的布尔变量与一个布尔值语句。
【解决方案3】:

取决于您正在从事的业务,如果需要进行计算,请使用函数,否则使用变量。

【讨论】:

    【解决方案4】:

    我们通常使用方法是因为重复做某事。在这种情况下,您将检查密码和用户名是否匹配,并且您将在整个程序中重复执行此操作。所以我会使用一种方法,因为访问boolean 变量可能很困难并且可能会变得混乱。所以我建议在你重复做某事(以及当它是一个过程)的情况下使用一种方法,并将变量作为过程的一部分而不是作为过程。

    【讨论】:

      【解决方案5】:

      这取决于您编写的代码的可读性和可重用性。在你的情况下,我更喜欢使用一种方法。如果您正在使用链式方法和布尔逻辑,请使用可读性方法。 JVM 可能无论如何都会内联调用,因此不会影响性能。我要更改的是使用 if 语句和命名以更好地反映方法的目的(并使用 JavaBean 命名约定)。然后您的代码可以很容易地简化为:

      public boolean isCorrectUserAndPassword() {
          return userField.getText().equals(testUser) && passField.getText().equals(testPass));
      }
      

      【讨论】:

        【解决方案6】:

        理想情况下,如果您使用布尔方法,它实际上可以更好地重用代码,

        因为您可以多次使用相同的匹配方法,甚至可能用于多种目的

        【讨论】:

          【解决方案7】:

          变量向类添加属性(除非它是本地的),而方法添加可重用行为。 尽管比较变量和方法没有意义,但经验法则是 - 使用变量来保存值和方法来执行一堆相关的语句。

          在您的情况下,每次调用 match 方法时,它不仅会返回 boolean 值,还会在返回 truefalse 之前执行一些检查。但是,如果它是一个boolean 变量,它只能保存booleantruefalse,但不能执行任何语句。

          【讨论】:

            【解决方案8】:

            ALT 1:返回布尔值

            PRO:这有助于跳过不需要运行的更多代码部分。

            CON:这会增加一个以上的返回点,并且应该只在只有几行的方法中使用。

            public boolean match() {
               if(!userField.getText().equals(testUser)
                  && !passField.getText().equals(testPass)){
                 return false;
               }
               //do additional stuff here if user matches
               return true;
            }
            

            ALT 2:返回一个变量

            PRO:这在较长的方法中很好,其中返回变量可以更改多个位置。

            CON:当你的方法做不止一件事并且你的代码缺乏关注点分离时,你通常会这样做。

            public boolean match() {
               boolean result;
               if(...){
                   if(userField.getText().equals(testUser)&&passField.getText().equals(testPass))
                      result = true;
                   else if (...)
                      result = false;
                   else if (...)
                      result = true;
               } 
            
               //do something
               if (...)
                   result = true;
               else 
                   result = false;
               } 
               return result;
            }
            

            ALT 3:返回一个或一组函数的输出

            PRO:这对节省代码行很有好处

            CON:为了可读性,您应该重命名该方法以说明该方法实际在做什么。

            public boolean authenticate(user) {
               return userField.getText().equals(testUser)&&passField.getText().equals(testPass));
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-10-06
              • 2012-03-23
              • 2020-07-16
              • 1970-01-01
              • 1970-01-01
              • 2019-07-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多