Ok, nie wiem, jak to w skrócie.

To jest mój kod:

var ratio, input={w:100,h:50};
if(input.w <= input.h) ratio = input.h / input.w;
else                   ratio = input.w / input.h;

Pytanie: Czy jest szybszy, lepszy, "mniej kodu potrzebny" sposób na obliczenie {x0}}? Niż jeśli / inaczej stwierdzenia.

Dzięki!

4
enloz 2 grudzień 2011, 17:46

5 odpowiedzi

Najlepsza odpowiedź

Możesz użyć operatora warunkowego Thernary. Składnia:

condition ? (statement if true) : (statement if false);

W Twoim przypadku:

ratio = (input.w <= input.h) ? (input.h/input.w) : (input.w/input.h);

EDYTOWAĆ:

To nie jest szybsze niż twoje rozwiązanie, właśnie szybciej pisać. Radziłbym się używać:

var ratio = Math.Max(input.w, input.h) / Math.Min(input.w, input.h)

Który będzie porównywać liczby dwa razy (raz w matematyce, raz w matematyce) i byłby wolniejszy.

10
Luchian Grigore 2 grudzień 2011, 13:53

Możesz użyć operatora trójargumentowego:

var ratio = (input.w <= input.h ? (input.h / input.w) : (input.w / input.h));
1
Cyclonecode 2 grudzień 2011, 13:50
var ratio = Math.max(input.w, input.h) / Math.min(input.w, input.h)

Inny [może bardziej wydajny]:

var ratio = Math.max(input.w / input.h, 1 / input.w / input.h);

Jeszcze bardziej wydajny niż Therary:

var ratio = w / h ;
ratio = ratio > 1 && ratio || 1/ratio
7
Bart Calixto 2 grudzień 2011, 14:08

Mniejszy niekoniecznie szybciej:

var ratio, input = {w:100, h:50};
ratio = input.w <= input.h ? input.h / input.w : input.w / input.h;
2
Asken 2 grudzień 2011, 13:49

Co powiesz na

ratio = Math.max(input.w, input.h) / Math.min(input.w, input.h)
2
Alex K. 2 grudzień 2011, 13:49