2017-02-21 36 views
0

讓我們假設我們有一個車行駛到一個目的地:爲增加/減少設置「結束條件」最優雅的方式?

第一種方案:

destination to: 100px 

第二種情況:

destination to: -50px 

僞代碼:

var currentValueToAdd; 

if (valueToIncrementPosition > 0) { 
    if (currentPositionOfCar <= destination) { 
    currentValueToAdd = valueToIncrementPosition; 
    } else { 
    currentValueToAdd = 0; 
    } 
} else { 
    if (currentPositionOfCar >= destination) { 
    currentValueToAdd = valueToIncrementPosition; 
    } 
    else { 
    currentValueToAdd = 0; 
    } 
} 

car.style.position += currentValueToAdd + "px"; 

,你可以看,我可以遞增-n或n,結尾可以在下面或嗨比當前的汽車位置還要高。所以我的車停下來的條件真的在小於或大於目的地之間變化。

有沒有更好的方法來編寫上述解決方案,讓汽車停下來?也許有某種公式?

其他想法,我必須是使用該犯規絕對值似乎是正確兩種:

Math.abs(currentPositionOfCar) > Math.abs(destination) ? 0 : valueToIncrementPosition; 
+0

具有這個工作的例子是如此愉快努力改善:) –

+0

取決於你所說的「優雅」。 –

+0

@Bálint更短! :) – Asperger

回答

1
currentPositionOfCar = Math.min(currentPositionOfCar + valueToIncrementPosition, Math.abs(destination)); 

沒有名字,像這樣:

a = Math.min(a + b, Math.abs(c)); 
// Golfed: 
a=(m=Math).min(a+b,m.abs(c)); // Don't use this, this is very hacky 

這還有一個好處,它使汽車停在恰好在fhs的目的地。

如果你真的想要一個短的一個

a += b; 
a > Math.abs(c) && a -= b; 
// Golfed: 
(a+=b)>Math.abs(c)&&a-=b 

但是,這並不完全在目的地STOO和工作原理有點像你原來的代碼

+0

@Teemu「沒有人能比ppcg傢伙做得更短」。我不小心把那部分弄丟了 –

+0

@Teemu hehe ya我記得他說過:D – Asperger

+0

@Teemu哦,是的,忘記了,讓我編輯吧 –