我在课堂上有这样的代码:
if (reload == 0) {
String mailSuccess = "send success mail";
} else {
String mailOther = "send other mail";
}
if (fileError1Exists == true) {
String mailError1 = "send mail for error 1";
}
if (fileError2Exists == true ) {
String mailError2 = "send mail for error 2";
}
if (fileError3Exists == true ) {
String mailError3 = "send mail for error 3";
}
也许因为我对Java仍然不了解,所以我想知道这种语法是否干净?每次,我看到一个“ if / ese”表达式,它更像是这样:
if (condition == 0) {
String mailSuccess = "send success mail";
} else if (fileError1Exists == true) {
String mailError1 = "send mail for error 1";
} else if (fileError2Exists == true) {
String mailError2 = "send mail for error 1";
} else if (fileError3Exists == true) {
String mailError3 = "send mail for error 1";
} else {
String mailOther = "send other mail";
}
是否保持这些if语句像这样干净?显然,第一个代码示例可以工作,因为它已经在生产中。但是第一示例代码和第二示例代码是否做相同的事情?通常情况下,对吗?还是因为缺乏经验而错过了什么?
在此先感谢您的反馈。在以前的帖子中找不到我的遮阳篷。
edit 谢谢大家的帮助。它帮助我理解了代码,而且还帮助我学习了一些新知识!
答案 0 :(得分:3)
这是给定要求的问题。第一个代码将为发现的每个错误发送一封电子邮件,这意味着如果找到所有3个错误,它将发送3封电子邮件。
您的第二个代码将为找到的第一个代码发送一封电子邮件,而不发送其他电子邮件。
如果您想为每个错误发送电子邮件,请输入第一个代码。否则,如果您只需要一封电子邮件来解决第一个错误,请输入第二个代码。
编辑 要考虑@Lino的建议,您可以执行
之类的操作if (reload == 0) {
String mailSuccess = "send success mail";
} else {
String mailOther = "send other mail";
}
StringBuilder mailErrors = new StringBuilder();
if (fileError1Exists) {
mailErrors.append("error 1 occurred");
}
if (fileError2Exists) {
mailErrors.append("error 2 occurred");
}
if (fileError3Exists) {
mailErrors.append("error 3 occurred");
}
String mailErrorText = mailErrors.toString();
跟踪错误并发送一封电子邮件,其中包含所有发生的错误的信息。
IMHO跟踪每个错误是最佳实践。
答案 1 :(得分:3)
if
和if-then-else
是条件语句,但行为不同。
使用多个分开的if
,JVM可以对条件语句中的每个包含的语句执行0
,而在if
中使用一组if-then-else
时,JVM将始终执行0
或1
包含的语句。
根据经验,您将使用一组单独的if
,因为所包含的条件语句中的处理是累加的,而您将使用if-then-else
作为以下条件中的处理所包含的条件语句为排他性。
该行为在JLS中指定。
...
否则,将根据 结果值:
如果该值为true,则执行所包含的Statement;否则为false。 ...
如果该值为false,则不执行进一步的操作,如果为-then 语句正常完成。
然后:
14.9.2. The if-then-else Statement
首先执行以下操作来执行if-then-else语句 表达。如果结果为布尔类型,则受制于 取消装箱转换(第5.1.8节)。
...
否则,将根据 结果值:
如果该值为true,则包含的第一个Statement(一个 在执行else关键字之前); if-then-else语句 仅在执行该语句时正常完成 正常完成。
如果该值为false,则包含的第二个Statement(一个 在else关键字之后); ...
答案 2 :(得分:1)
deHaar描述了两个版本的语义(含义)的变化并提供了改进。
davidxxx提供$link= mysqli_connect("localhost","root","","example");
if (mysqli_connect_error()) {
echo "error";
}
$rows=array();
$page_size=4000;
$total_records=100000;
$count=ceil($total_records/$page_size);
for($i=0; $i<=$count; $i++) {
$offset_var = $i * $page_size;
$query = "select id from shipment Limit ".$page_size." OFFSET ".$offset_var;
$result= mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)) {
$rows[]= $row;
}
}
mysqli_close($connection);
echo "<pre>";print_r($rows);echo "</pre>";
语句的正式JLS定义。
我相信仍然需要一个小的示例,您可以运行它来清楚地看到差异。
if
根据if (value1) {
System.out.println("Entry 1");
} else {
System.out.println("Entry 2");
}
if (value3) {
System.out.println("Entry 3");
}
和value1
的值,您将获得不同的输出。
value3
和value1 = true
打印value3 = true
和Entry1
Entry3
和value1 = true
打印value3 = false
Entry1
和value1 = false
打印value3 = true
和Entry2
Entry3
和value1 = false
打印value3 = false
现在更改的程序如下:
Entry2
根据if (value1) {
System.out.println("Entry 1");
} else if (value3) {
System.out.println("Entry 3");
} else {
System.out.println("Entry 2");
}
和value1
的值,您将获得不同的输出。
value3
和value1 = true
打印value3 = true
Entry1
和value1 = true
打印value3 = false
Entry1
和value1 = false
打印value3 = true
Entry3
和value1 = false
打印value3 = false
注意Entry2
时输出如何变化。