【问题标题】:Is it better to assign boolean to local variable and reuse it or duplicate comparison using if?将布尔值分配给局部变量并重用它还是使用if重复比较更好?
【发布时间】:2014-08-26 13:47:01
【问题描述】:

想象一下我有这个代码(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 连接语法,我想避免将代码分配给变量。

【问题讨论】:

  • “更好”在什么意义上?回答这个问题,你就会回答你自己的问题。
  • 性能、约定、代码可读性。

标签: c# performance asp.net-mvc-4 razor boolean


【解决方案1】:

在这种情况下,是的,记录一下这个神奇的条件意味着什么:

bool wrapInTimeout = i > 1;

不要称它为higherThanOne。那将是一个无用的名字。

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

【讨论】:

  • 我可能会记住这个命名约定。感谢您的回答。
【解决方案2】:

在您的情况下比较非常简单,所以我看不出使用临时变量有什么好处,但是,如果您确实有更多相同的比较,那么您可能希望使用该变量,因为它简化了代码结构和可读性。

我还注意到,如果每次都调用同一个 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>

【讨论】:

  • 这段代码不一样,其实是基于不同的属性,谢谢解答。
  • 再次取决于,如果您可以将属性值作为参数传递给 myFunction,它仍然是一个更好的选择,因为它还允许您将该 javascript 片段移动到 .js 文件中并创建更好的分离。
  • 你是对的。我可能会创建另一个函数并进行调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 2021-04-07
  • 2020-03-07
  • 2013-02-17
相关资源
最近更新 更多