这种正面/负面检查可以简化吗?

时间:2013-10-26 01:37:18

标签: javascript

我基本上想检查newValue是否超过了targetValue。但targetValue可以是正数或负数,因此如果( newValue < targetValue )不一定有效。

我按照下面的方式编写代码,我可能会在这里过分思考,但我想知道是否有办法更优雅地重写if-check ......

var newValue = 0;

function ChangeValue ( targetValue : int )
{
    var isTargetPositive = ( targetValue > 0 );

    if ( isTargetPositive && newValue < targetValue || !isTargetPositive && newValue > targetValue )
        newValue = math.moveTowards( newValue, targetValue, 1 );
    else
        // Do something else
}

5 个答案:

答案 0 :(得分:2)

我唯一可以想到的就是保持你的条件完全一样,删除isTargetPositive变量并用以下内容替换你的if语句:

if ( targetValue > 0 ? newValue < targetValue : newValue > targetValue )

答案 1 :(得分:2)

这与我改变的chess project几乎相同:

if((obj.ActiveColor&&current_val>0) || (!obj.ActiveColor&&current_val<0)){}

var impossible_to_name = (current_val * (obj.ActiveColor?1:-1));

if(impossible_to_name>0){}

我知道你不需要缓存var,但在我的情况下我会稍后使用它,所以我缓存它,我的代码太复杂了,我甚至无法给我的var命名,我也不完全确定这是否会对你有所帮助,如果我无法将其翻译成你的代码,你很可能不会这样做,但我会尝试再次理解我的代码并编辑我的答案。

注意:我的代码已包含在if(current_val){...}中,因此值除0

以外的任何值

答案 2 :(得分:1)

var newValue = 0;
    function ChangeValue ( targetValue )
    {
        if ( 
    ((targetValue > 0) && (newValue < targetValue)) 
    || 
    ((targetValue < 0) && (newValue > targetValue ))
           )
        {
            newValue = math.moveTowards( newValue, targetValue, 1 );
        }    
        else{
            // Do something else
        }
    }

答案 3 :(得分:1)

如果不够清楚,你总是可以制作一个子功能

function abs_compare(target, number) {
    return target != 0 && ((target > 0 && target > number) || target < number);
}

if (abs_higher(targetValue, newValue)) {
    newValue = math.moveTowards(newValue, targetValue, 1);
}

我也更喜欢target != 0,而不是仔细检查它是否优于或低于0,因为在你的条件陈述中它更清楚它是一个禁止值。

此外,Pointy表示,由于您已将newValue初始化为0,因此它始终保持为0,因为ChangeValue是一个函数,因此当前为false。可以在函数调用之前更改newValue。

更新

我可能读得太快了。将目标比较为0将不会保留您的实际逻辑,它与双重检查相同。无论如何,你仍然可以使用一个函数。

最好的答案是使用条件target > 0 ? target > number : target < number

答案 4 :(得分:-1)

测试(输入:5) isTargetPositive - 匹配 newValue&lt; targetValue - 匹配

测试(输入:-1) !isTargetPositive - 匹配 newValue&gt; targetValue - 匹配

+ ve或-ve整数,它将与IF匹配。

isTargetPositive&amp;&amp; newValue&lt; targetValue,同样对吗?为何使用&amp;&amp ;? 我认为一个条件就足够了。