我对Java很陌生,请原谅我提出一个看似愚蠢的问题。
我正在编写一个简单的“用户登录”程序。要检查用户名和密码是否匹配,我可以使用简单的布尔变量或使用布尔方法并将值返回为true或false。
public boolean match() {
if(userField.getText().equals(testUser)&&passField.getText().equals(testPass))
return true;
else
return false;
}
上面是一个使用布尔方法的非常简单的例子。
我的问题是,根据经验,使用什么是更有利的东西,布尔方法还是变量?我知道这对程序员来说可能更像是个人偏好,但我不明白为什么你会选择一个而不是另一个。
答案 0 :(得分: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
boolean
或true
的值,但无法执行任何语句。