我基本上想检查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
}
答案 0 :(得分:2)
我唯一可以想到的就是保持你的条件完全一样,删除isTargetPositive
变量并用以下内容替换你的if语句:
if ( targetValue > 0 ? newValue < targetValue : newValue > targetValue )
答案 1 :(得分:2)
这与我改变的chess project几乎相同:
if((obj.ActiveColor&¤t_val>0) || (!obj.ActiveColor&¤t_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 ;? 我认为一个条件就足够了。