什么时候应该使用方法返回值?

时间:2011-11-29 14:08:47

标签: java methods boolean

我对Java很陌生,请原谅我提出一个看似愚蠢的问题。

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

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

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

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

8 个答案:

答案 0 :(得分:3)

  1. 使用方法,因此子类可以覆盖并定义自己的匹配。
  2. 您应始终将字段/成员变量保密,并通过方法授予对它们的访问权。
  3. 理想情况下,您应该将匹配方法抽象出一个接口,并让实现覆盖 match()方法

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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));
}

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

理想情况下,如果使用布尔方法

,它实际上可以更好地重用代码

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

答案 7 :(得分:0)

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

在您的情况下,每次调用match方法时,它不仅会返回boolean值,还会在返回true或{{1}之前执行一些检查}}。但是,如果它是false变量,则只能保留boolean booleantrue的值,但无法执行任何语句。