避免许多if语句的最佳方法是什么?

时间:2019-09-24 09:16:12

标签: javascript

重构以下if条语句的最佳方式是什么?

if (!this.props.isRequired) {
  return false
}
if (items.length < 1) {
  return false
}
if (items.length === 1) {
  return true
}

7 个答案:

答案 0 :(得分:9)

使用||在所有将返回相同值的条件之间交替:

if (!this.props.isRequired || items.length < 1) {
  return false
}
if (items.length === 1) {
  return true
}

答案 1 :(得分:4)

我认为您也应该处理items.length也> 1的情况:

return (this.props.isRequired && items.length === 1);

您可以省略if,而直接返回布尔值true / false。

答案 2 :(得分:3)

 if (!this.props.isRequired || items.length < 1) {
    return false
 }
 else if (items.length === 1) {
     return true
  }

答案 3 :(得分:1)

您可以使用ternary operator

return !this.props.isRequired ? false : (items.length === 1)

答案 4 :(得分:0)

尝试使用三元组

this.props.isRequired || items.length < 1 ? return false: null;
items.length === 1 ? return true: null;

答案 5 :(得分:0)

这取决于您如何编写业务逻辑!!!

现在在上面的代码中,您可以合并前两个if语句,因为两个语句都返回相同的值。

    if (!this.props.isRequired  || items.length < 1) {
        return false
    }

    if (items.length === 1) {
        return true
    }

答案 6 :(得分:0)

如果在重构(或检查)期间遇到这些确切的行,我会立即寻找下一个/最后一个return语句,因为这些行似乎表明该函数具有多种输出类型。

通常,我会尝试避免使用不同的返回类型。

关于if语句的减少;我的第一步是使if语句具有结论性,这似乎可以回答以下问题:如果items.length大于1是否有效。

如果是这样,您可以将其变成单个语句。

return this.props.isRequired && items.length >= 1;

如果没有,则可以使用非结论性部分(> 1)条件(或相反,以使其更简洁)

if (items.length <= 1) {
  return this.props.isRequired && items.length === 1;
}
//  the alternative flow (not in your example)