我有一段代码
if (!expr1) {
codeblock1;
} elseif (expr2) {
codeblock2;
codeblock1;
}这让我心烦意乱,因为我试图用一种没有重复代码的方式重构它,但是我一直得到不同的结果。
if (!expr1 || expr2) {
if (expr2) {
codeblock2;
}
codeblock1;
}这两个例子的逻辑区别是什么?
发布于 2016-10-05 12:43:44
在代码片段1中,您显式地声明如果codeblock2为false,则不希望运行expr1。
在代码片段2中,您声明希望运行codeblock2,即使expr1是假的,只要expr2是真的。
此外,假设codeblock1和codeblock2是一系列代码行(更多的是一行代码),您可以将它们提取到方法中。这样你就能做到:
if (!expr1) {
codeblock1(); // calling a method
} elseif (expr2) {
codeblock2(); // calling a method
codeblock1(); // calling a method
}..。这不是代码重复。
发布于 2016-10-05 15:17:30
在这种特殊情况下,重构代码的一个很好的方法是使条件更加清晰。(确保将以下代码放入函数中)
if (expr1 and !expr2)
return;
if (expr1 and expr2)
codeblock2();
codeblock1();如果逐行阅读代码,您会看到:
它非常清楚地说明了您实际上正在检查的条件,以及当满足该特定条件时会发生什么。
https://softwareengineering.stackexchange.com/questions/332877
复制相似问题