我用Java来问这个问题,但它也适用于遵循类似编译器模式的其他语言。
这适用于您提供所有可能结果的任何类型的方法,但我将使用boolean
方法作为示例。我列出了两种编码方法的方法:
示例1:
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
} else if (value1 < value2) {
//do something 2
return false;
} else if (value1 > value2) {
//do something 3
return false;
} //could also be in an "else" block.
return false; //impossible to reach, but necessary to compile.
}
肯定:
否定
示例2:
public boolean example2(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
} else if (value1 < value2) {
//do something 2
return false;
} else { //The same as (value1 > value2)
//do something 3
return false;
}
}
肯定:
否定
这些方法完全相同。但是,我相信示例1比示例2更容易阅读,因为它明确地说明了if-else链中的最后一个if语句。与此同时,由于缺乏一个更好的词,示例1对我来说非常肮脏。
有没有正确的方法来做到这一点,还是只是个人偏好?
编辑:我选择不包含一组if语句(不在if-else链中),因为我知道这不是一个好方法。如果有人不同意这一点并且有充分理由这样做,请在下面发布,我将修改我的问题。
编辑2:这种观点的原因是因为&#34;做某事&#34;例如,100多行代码,没有if-else链会大大降低可读性。简而言之,&#34;做某事&#34;只有一行或几行代码,然后是,这可能是可行的。出于这个原因,我将在下面添加它作为第三个例子(尽管我仍然认为它不具有可读性,但这是个人偏好。)
示例3:
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
}
if (value1 < value2) {
//do something 2
return false;
}
//do something 3
return false;
}
肯定:
否定
示例4(以及我个人最喜欢的):
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
} else if (value1 < value2) {
//do something 2
} else if (value1 > value2) {
//do something 3
}
return value1 == value2;
}
这很棒,因为它会照顾&#34;做某事&#34;首先,然后将return语句限制在一个单独的,干净的,易于阅读的语句中,没有&#34; hacky&#34;反响。
答案 0 :(得分:3)
正如您所指出的,这是一个偏好问题。第一个例子中的第三个if
是多余的,一些IDE甚至会警告它
就个人而言,我会选择第二个,因为我鄙视编写冗余的代码,但这一切都归结为项目标准和个人偏好。
编辑:
实际上,如果我们谈论的是个人偏好,我会完全删除else
- 如果你输入if
阻止你只是return
的功能,那么{{ 1}}和else if
是多余的:
else
答案 1 :(得分:1)
示例2要好得多。在示例1中,系统必须经过另一组“验证”,而在示例2中,在2次验证之后,它将继续执行默认操作。
因此,示例2中的操作至少减少了一次。
答案 2 :(得分:1)
选项3是
public boolean example2(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
}
if (value1 < value2) {
//do something 2
return false;
}
//The same as (value1 > value2)
//do something 3
return false;
}
换句话说,如果在每个块的末尾有一个else
语句,并且它清楚它正在做什么,那么你真的不需要return
。
当代码块非常短时,我更喜欢这个。如果它们很长,则很难注意到return
语句。
答案 3 :(得分:1)
就个人而言,我只是在有意义时只有一个return
陈述的粉丝。对于您的代码,我认为确实如此。所以,我会用......
选项3:
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
} else if (value1 < value2) {
//do something 2
} else if (value1 > value2) {
//do something 3
}
return value1 == value2;
}
这个特殊的结构并不总是有意义的,但是因为你总是回归value1 == value2
,我认为它会稍微清楚一点,只能在最后做一次。
对于任何出现并浏览代码的人来说,将会发生的事情非常清楚。该方法总是在具有相同值的相同位置完成,并且在此之前有一些简单的工作流逻辑。