何时应该使用一个方法来返回值?

4

我对Java还比较新,请见谅,我要问一个可能看起来很愚蠢的问题。

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

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

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

我的问题是,一般来说,使用布尔方法或变量更有利?我知道这可能更多地取决于程序员的个人偏好,但我不明白为什么会选择其中之一。


感谢大家的快速和有帮助的回复! - user706775
8个回答

2
  1. 使用一种方法,以便子类可以覆盖并定义自己的匹配。
  2. 您应该始终将字段/成员变量保持为私有,并通过方法提供对它们的访问。

理想情况下,您应该将匹配方法抽象出来形成一个接口,并使实现覆盖match()方法。


@MДΓΓΓБДLL,我认为这不仅仅是回答问题,更重要的是通过告诉他最佳实践来帮助他提高一个层次。 - Suraj Chandran
1
我认为你正在回答这个问题。(它的措辞不太好,所以有争议的空间。)我理解为,“我应该从一个方法中返回结果,还是将其存储在成员变量中?” - erickson
我相信这不仅仅是回答问题,而是在帮助他更深层次的理解。我同意并补充以下内容:在方法中使用一个返回语句是良好实践,可以使代码更易读。 - C.LS

1
在这种情况下,你应该绝对重写它如下:
public boolean match() {
    return userField.getText().equals(testUser)
        && passField.getText().equals(testPass);
}

5
我不知道这个回答如何回应这个问题。 - Bhesh Gurung
问题不太清楚。我理解的是询问是返回一个简单的布尔变量还是一个布尔值语句。 - Matt Ball

1

备选方案1:返回布尔值

优点:可以跳过不必要的代码部分,提高程序运行效率。

缺点:会增加多个返回点,只适用于代码行数较少的方法中使用。

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

备选方案2:返回变量

优点:在较长的方法中,返回变量可以在多个位置进行更改。

缺点:通常情况下,这种做法是因为方法执行了多个任务,而代码缺乏关注点分离。

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:返回函数或一组函数的输出

优点:可以节省代码行数。

缺点:为了可读性,您应该重命名方法以说明该方法实际上正在执行的操作。

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

0
根据你所从事的业务,如果需要进行计算,则使用函数,否则使用变量。

0
我们通常使用方法是因为我们在重复做某些事情。在这个案例中,你将会反复检查密码和用户名是否匹配,并且你将会在整个程序中重复进行这个操作。所以我建议使用方法,因为访问布尔变量可能会很困难并且可能变得混乱。所以我建议在你需要重复做某些事情时(并且当它是一个过程时),使用方法,并将变量作为过程的一部分,而不是作为过程本身。

0
理想情况下,如果您使用布尔方法,代码重用会更好, 因为您可以多次使用相同的匹配方法,甚至可能用于多个目的。

0
一个变量会向类添加一个属性(除非它是局部的),而方法则添加可重用的行为。 尽管比较变量和方法没有意义,但经验法则是-使用变量来保存值,使用方法来执行一堆相关语句。
在您的情况下,每次调用match方法时,它不仅返回一个boolean值,还会在返回truefalse之前执行一些检查。但是,如果它是一个boolean变量,它只能保存一个truefalseboolean值,但不能执行任何语句。

0

这取决于您所编写的代码的可读性和可重用性。在您的情况下,我更喜欢使用方法。如果您使用链式方法和布尔逻辑,就应该使用方法来提高可读性。JVM 可能会内联调用,因此不会影响性能。我会更改 if 语句的使用以及名称,以更好地反映方法的目的(并使用 JavaBean 命名约定)。然后,您的代码可以轻松简化为以下内容:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接