if-else 或早期 return
if-else or early return
有时我喜欢使用早期的 return 语句来防止嵌套 if 语句,我发现这会降低代码的可读性。
我想知道是否存在任何 objective 或压倒性的普遍共识,以下两种模式中哪一种是更好的做法?我不认为这是一个主观问题,因为我真正想问的是有接近 objective 的偏好。
void func() {
if (a) {
do b
}
else {
do c
}
}
或
void func() {
if (a) {
do b
return;
}
do c
}
我会选择第一个版本。几年前,我实际上就此得到了冗长的解释。
正如您现在所写的,这两个示例在功能上是相同的。如果 a
条件为真,则第一个 if
条件中的逻辑将执行,函数将 return。然而,仔细看看第二种情况:
void func() {
if (a) {
do b
return;
}
do c
}
现在,如果第一个 if
触发,函数将 return,否则 c
将执行。但是,考虑到在某个时候,程序员出于某种原因决定重构该方法。如果他要取出 return
语句,那么 c
的逻辑将 也会执行 如果 a
为真。这似乎有些牵强,但它可能比您想象的更容易发生。另一方面,如果您使用完整的 if-else
,那么即使 if
条件的重构也永远不会导致 c
逻辑同时求值。
第一个更好。简而言之,它可以帮助其他开发人员理解 c 编译是因为条件为假。它还可以防止其他人对您的代码进行破坏性更改。也就是说,它们都是正确的并且都可以正常工作
老实说,我推荐第二个
- 第二种更清晰易懂
- 当别人修改代码时更容易理解是第一位的。
也许第一个在数学上更清楚,但在人类上却不是。
有时我喜欢使用早期的 return 语句来防止嵌套 if 语句,我发现这会降低代码的可读性。
我想知道是否存在任何 objective 或压倒性的普遍共识,以下两种模式中哪一种是更好的做法?我不认为这是一个主观问题,因为我真正想问的是有接近 objective 的偏好。
void func() {
if (a) {
do b
}
else {
do c
}
}
或
void func() {
if (a) {
do b
return;
}
do c
}
我会选择第一个版本。几年前,我实际上就此得到了冗长的解释。
正如您现在所写的,这两个示例在功能上是相同的。如果 a
条件为真,则第一个 if
条件中的逻辑将执行,函数将 return。然而,仔细看看第二种情况:
void func() {
if (a) {
do b
return;
}
do c
}
现在,如果第一个 if
触发,函数将 return,否则 c
将执行。但是,考虑到在某个时候,程序员出于某种原因决定重构该方法。如果他要取出 return
语句,那么 c
的逻辑将 也会执行 如果 a
为真。这似乎有些牵强,但它可能比您想象的更容易发生。另一方面,如果您使用完整的 if-else
,那么即使 if
条件的重构也永远不会导致 c
逻辑同时求值。
第一个更好。简而言之,它可以帮助其他开发人员理解 c 编译是因为条件为假。它还可以防止其他人对您的代码进行破坏性更改。也就是说,它们都是正确的并且都可以正常工作
老实说,我推荐第二个
- 第二种更清晰易懂
- 当别人修改代码时更容易理解是第一位的。 也许第一个在数学上更清楚,但在人类上却不是。