以下两种方法之间有什么区别吗?
哪一个更可取,为什么?
PRG1:
<script>
function reqListener () {
console.log(this.responseText);
}
var oReq = new XMLHttpRequest();
oReq.onload = function() {
alert(this.responseText);
};
oReq.open("get", "http://localhost/send.php", true);
oReq.send();
</script>
PRG2:
public static boolean test() throws Exception {
try {
doSomething();
return true;
} catch (Exception e) {
throw new Exception("No!");
}
}
答案 0 :(得分:24)
考虑这些你没有返回常量表达式的情况:
案例1:
public static Val test() throws Exception {
try {
return doSomething();
} catch (Exception e) {
throw new Exception("No!");
}
// Unreachable code goes here
}
案例2:
public static Val test() throws Exception {
Val toReturn = null;
try {
toReturn = doSomething();
} catch (Exception e) {
throw new Exception("No!");
}
return toReturn;
}
我更喜欢第一个。第二个更冗长,在调试时可能会引起一些混乱。
如果test()
错误地返回null
,并且您看到toReturn
被初始化为null
,您可能会认为问题出在test()
中(尤其是{ {1}}不仅仅是一个简单的例子。
即使test()
返回null
,它也只能返回doSomething
。但这可能很难一目了然。
然后你可以争辩说,为了保持一致,总是使用第一种形式会更好。
答案 1 :(得分:4)
两种方法之间没有区别。 通过尽快恢复程序流并处理异常,它将在两种情况下有效地返回真值。 只有在发生异常时才会访问Catch。
答案 2 :(得分:3)
没有功能差异。两个程序的行为方式相同。 这只是编码风格和个人品味的问题。
作为一种好的做法,每个方法最好有一个return语句 - 在方法的最后,而不是中间。在冗长的代码块的情况下,当(原作者或其他人)必须对代码进行更改时,这种样式使代码在将来更具可读性和可维护性。
因此,从良好的实践角度来看,第一个被认为是更好的。
答案 3 :(得分:2)
我假设这是一个普遍的问题。否则,我可能会评论您的方法的其他方面。
我认为在这种情况下或类似的小方法并不重要。该方法足够短,可以立即了解发生了什么,与什么有关等等。
然而,在更长的方法的情况下,在第一个例子中更容易遵循流程。 在我看来。它将相关代码和相关场景保持在一起。当您正在阅读该方法时,catch
块不会破坏正常的执行流程,使其更加明显,并且流畅#34;
public static boolean test() throws Exception {
try {
doSomething();
return true;
} catch (Exception e) {
throw new Exception("No!");
}
}
但是我并没有为所有方法概括这一点;它完全与背景有关。
答案 4 :(得分:-5)
没有区别,但第一个Prg1比Prg2快。