是将布尔值赋给局部变量并重用它,还是使用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连接语法。
在本例中,是的,为了说明这个神奇条件的含义:
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>