Кажется, я часто обрабатываю такие особые случаи. Там должен быть более лаконичный синтаксис или построить:Есть ли способ сделать это?
var x = solveForX(); /* some slow calculation here */
if (x < 0)
{
x = 0;
}
Это эквивалентно, но не чувствовать себя более элегантна:
var x;
x = (x = solveForX()) < 0 ? 0 : x;
Может быть, есть немного сдвиг трюк?
Update: Я побежал some benchmarks сравнить два моих любимых ответов - тот, который я согласился и Peter Ajtai's. Оказывается, Питер довольно быстро! Выполняя 1 000 000 итераций каждого (я также запускал версию, которая кэширует Math.max
, чтобы узнать, сколько времени внес вклад) показывает, что Питер бежит в половине времени версии Math.max
, даже с кешированием max
.
Тем не менее, даже самый медленный метод все еще довольно быстрый.
Почему бы не обновить solveForX, чтобы вернуть 0, когда это отрицательно? – Fosco
Я верю, он должен работать нормально !! – 2010-07-20 15:21:09
@Fosco - Может быть, его общая функция, и это особый случай –