javascript “else”子句用于不同变量的最佳实践是什么?[已关闭]

2sbarzqh  于 2023-02-11  发布在  Java
关注(0)|答案(5)|浏览(131)
    • 已关闭**。此问题为opinion-based。当前不接受答案。
    • 想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

1小时前关闭。
Improve this question
我想知道,当我们有条件句时,有甚么是最好的做法,是与不同的变数有关的。
例如,在Javascript中,考虑以下这些变量

var p1 = 'string1'
var p2 = 'string2'

下面这些功能
x一个一个一个一个x一个一个二个x
我知道xpto1xpto2产生相同的结果,并且我在编码时已经使用了这两个逻辑,但是我希望知道:这两种代码中哪一种最好有一个普遍的规则?当我们有不同的变量时,创建一个"else"语句并在其中包含条件(如xpto2)是否合适?

euoag5mw

euoag5mw1#

为了说明我在注解中已经说过的内容,当前面的if块总是从函数返回时,我将完全避免else

function xpto1 (p1, p2) {
    if (p1 === 'string1')
        return true;

    if (p2 === 'string2')
        return true;

    return false;
}

显然,在这种情况下,前两个 predicate 可以组合而不会变得麻烦:

function xpto1(p1, p2) {
  return p1 === 'string1' || p2 === 'string2';
}

其将如前所述返回truefalse,因为===比较产生布尔值。

myss37ts

myss37ts2#

在您的示例中,javascript(和大多数语言)中的{}对基本相同 如果您语句depends只有一行可以删除,则称为blockfunctionconstlet除外):

function xpto2 (p1, p2) {
    if (p1 === 'string1') {
        return true
    } else {
        if (p2 === 'string2') {
            return true
        } else {
            return false
        }
    }
}

精确的

function xpto2 (p1, p2) {
    if (p1 === 'string1') {
        return true
    } else // only one dependent statement
        if (p2 === 'string2') {
            return true
        } else {
            return false
        }
    
}

格式化后返回代码1
只有在else中有2条语句时才有区别

1u4esq0p

1u4esq0p3#

一段好的代码也很容易阅读,所以你可以通过删除最后一条else语句来简化代码:

function xpto1 (p1, p2) {
    if (p1 === 'string1') {
        return true
    } else if (p2 === 'string2') {
        return true
    }
    return false
}

(the同样适用于xpto2)
在任何情况下,问问自己“我的代码是可理解和可读的吗?"答案是,使用的嵌套越少越好。

v1l68za4

v1l68za44#

正如你所说,你正在接近的方式并没有错,你选择哪种条件往往取决于逻辑,例如如果你有一个简单的条件,如果为真返回一个值,如果为假返回另一个值,你可以使用三元运算符,也许不是你的例子的最佳选择,

function xpto2 (p1, p2) {
    return p1 === 'string1' ? true : p2 === 'string2' ? true : false;
}

因为这可能会使代码更难阅读。对于if/else,你可以将你的例子修改成这样:

function checkP1(p1) {
    return p1 === 'string1';
}

function checkP2(p2) {
    return p2 === 'string2';
}

function xpto3 (p1, p2) {
    if (checkP1(p1)) {
        return true;
    } else if (checkP2(p2)) {
        return true;
    } else {
        return false;
    }
}

这样你就可以少用一些嵌套的if/else语句,另一种方法是switch语句:

function xpto1 (p1, p2) {
    switch (true) {
        case p1 === 'string1':
            return true;
        case p2 === 'string2':
            return true;
        default:
            return false;
    }
}
jpfvwuh4

jpfvwuh45#

就像其他答案说的那样,可读性是你最好的选择,而不是:

function xpto2 (p1, p2) {
    if (p1 === 'string1') {
        return true
    } else {
        if (p2 === 'string2') {
            return true
        } else {
            return false
        }
    }
}

您始终可以执行以下操作:

function xpto2 (p1, p2) {
    return (p1 === 'string1')?true:(p2 === 'string2');
}

最好的“如果”是可以避免的。
在说了这句话之后,你可以避免else,当一个返回被“触发”时,这样:

function xpto2 (p1, p2) {
    if (p1 === 'string1') {
        return true
    } 
    if (p2 === 'string2') {
       return true
    } 
    return false
    
}

结果是一样的。

相关问题