是将布尔值赋给局部变量并重用它,还是使用if进行重复比较?

本文关键字:if 比较 布尔值 局部变量 | 更新日期: 2023-09-27 18:11:46

假设我有这样的代码(Razor语法):

<script type="text/javascript">
@{
    var i = 0;
    foreach (var notify in @Model)
    {
        if (i > 1) // <------ First comparison 
        {
            <text>setTimeout(function() {</text>
        }
        <text>
        // JavaScript
        </text>
        if (i > 1) // <------  Second same comparison
        {
            <text>}, 1000 * @i);</text>
        }
        i++;
    }
}
</script>

注意int i被比较了两次。将第一次比较的结果传递给局部变量,然后检查它的值,还是进行第二次简单比较?这样的:

<script type="text/javascript">
@{
    var i = 0;
    foreach (var notify in @Model)
    {
        bool higherThanOne = i > 1;
        if (higherThanOne)
        {
            <text>setTimeout(function() {</text>
        }
        <text>
        // JavaScript
        </text>
        if (higherThanOne)
        {
            <text>}, 1000 * @i);</text>
        }
        i++;
    }
}
</script>
我遇到过很多次类似的情况,我不确定哪种情况更好。我想避免将代码分配给变量,因为不友好的Razor + JavaScript连接语法。

是将布尔值赋给局部变量并重用它,还是使用if进行重复比较?

在本例中,是的,为了说明这个神奇条件的含义:

bool wrapInTimeout = i > 1;

不要叫它higherThanOne。那可不是个有用的名字

根据变量表示的内容来命名变量,而不是根据它们的计算方式来命名。

在你的情况下比较非常简单,所以我不认为使用临时变量有任何优势,但是,如果你确实有更多相同的比较,那么你可能想要使用该变量,因为它简化了代码结构和可读性。

我还注意到,如果每次调用相同的javascript函数,您实际上可以将这两个条件合并为一个:

<script type="text/javascript">
@{
    var i = 0;
    foreach (var notify in @Model)
    {
        if (i > 1) // <------ First comparison 
        {
            <text>setTimeout(myFunction, 1000 * @i);</text>
        }
        i++;
    }
    <text>function myFunction(){ //your code here, if the same for all models }</text>
}
</script>