Parece que manejo casos especiales como este con cierta frecuencia. Tiene que ser una sintaxis más concisa o construir:¿Hay alguna forma más sencilla de hacer esto?
var x = solveForX(); /* some slow calculation here */
if (x < 0)
{
x = 0;
}
Esto es equivalente, pero no se siente más elegante:
var x;
x = (x = solveForX()) < 0 ? 0 : x;
Tal vez hay un truco desplazamiento de bits?
Actualización: me corrieron some benchmarks comparar mis dos respuestas favoritas - el que acepté, y Peter Ajtai's. ¡Resulta que Peter es bastante más rápido! Ejecutar 1,000,000 de iteraciones de cada uno (también ejecuté una versión que almacena en caché Math.max
para ver cuánto tiempo contribuyó la búsqueda) muestra que Peter se ejecuta en menos de la mitad del tiempo de la versión Math.max
, incluso con el almacenamiento en caché max
.
Dicho esto, incluso el método "más lento" sigue siendo bastante rápido.
¿Por qué no actualizar solveForX para devolver 0 cuando es negativo? – Fosco
¡Creo que debería funcionar bien! –
@Fosco - Tal vez es una función genérica, y este es un caso especial –