重构以下if
条语句的最佳方式是什么?
if (!this.props.isRequired) {
return false
}
if (items.length < 1) {
return false
}
if (items.length === 1) {
return true
}
答案 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)