2010-11-27 10 views
5

¿Existe una versión abreviada de los siguientes:Javascript taquigrafía

(a > 0 && a < 1000 && b > 0 && b < 1000 && c > 0 && c < 1000) 

Muchas gracias.

+0

Todas las soluciones aquí serán más lentas que solo hacer esa declaración if grande. – epascarello

Respuesta

7

No, realmente no hay ninguna abreviatura. No existe una forma simple en línea de especificar una comparación como esa para que pueda repetirse para diferentes variables.

Se podría hacer una función para los valores de validación:

function between(min, max, values) { 
    for (var i = 2; i < arguments.length; i++) { 
    if (arguments[i] < min || arguments[i] > max) return false; 
    } 
    return true; 
} 

y llamarlo usando:

between(1, 999, a, b, c) 
+0

@Guffa: ¿Hay una coma faltante? 'min max' – thejh

+0

+1, también podría hacer que una fábrica de función de orden superior salga de esto. Y agrega una coma. – BGerrissen

+0

@thejh: Sí, hubo. :) – Guffa

-1

usted podría utilizar uno &:

(a > 0 & a < 1000 & b > 0 & b < 1000 & c > 0 & c < 1000) 

nada más viene a la mente

+2

... que es una idea horrible y no ayuda mucho de todos modos. – delnan

+2

& no es lo mismo que && - aunque funcionará igual en la mayoría de los casos es en modo bit Y mientras que && es booleano AND. Incluso cuando funciona de la misma manera, el operador bit a bit tendrá más sobrecarga, ya que requiere cambiar entre comparaciones booleanas y binarias. – Macros

+0

-1. Nunca hagas esto a menos que realmente estés haciendo operaciones bit a bit. – BGerrissen

1
Number.prototype.isInRange = function(low, high) { 
    return this > low && this < high; 
} 

Ahora intente esto:

(a.isInRange(0,1000) && b.isInRange(0,1000) && c.isInRange(0,1000)) 

Si lo desea, puede cambiar el nombre de la función a su gusto para guardar algunas teclas más. Iré con facilidad de lectura :)

+0

Eso es realmente más largo, solo menos repetitivo. : o) – deceze

+0

Esto no funcionará, acaba de definir una función, no en nada ... tiene que estar en el prototipo de lo que está llamando. –

+0

@Nick, mi malo, tienes razón, corregido. –

2

Hay muchas maneras de hacer esto. Personalmente si yo estaba haciendo esto mucho, me gustaría definir una función una vez:

function between(val, min, max) { return min < val && val < max; } 

A continuación, sus cheques if aspecto:

if(between(a, 0, 1000) && between(b, 0, 1000) && between(c, 0, 1000)) 

La alternativa es añadir un método en los números ellos mismos:

Number.prototype.between = function(min,max) { return min<this && this<max; }; 

Entonces úsala como t su:

if(a.between(0, 1000) && b.between(0, 1000) && c.between(0, 1000)) 

Aunque esto es mucho más limpio ... o es posible que desee ir por otra ruta.


Nota: ambos enfoques son para que. Van a funcionar más despacio, son un poco más fáciles de mantener ... sin embargo, el compilador de cierre alinearía la mayor parte con optimizaciones avanzadas.

+0

No es realmente más corta; oP – BGerrissen

+0

Si deja de utilizar las comas que corresponden a las paradas completas, prometo que compraré su libro de jQuery;) – sje397

+0

@BGerrissen - Si su rango es siempre 0 y 1000, se convierte en mucha lluvia .. .el anterior era un ejemplo general :) –

0

Si le preocupa el número de comparaciones, no, no hay un acceso directo. Si desea reducir la cantidad de caracteres en la comparación, podría escribir una función "entre cero y 2000" y llamarla tres veces.

1

Si no hay ninguna posibilidad de que a,b,c habrá un número negativo, se puede hacer esto:

(a && b && c && a < 1000 && b < 1000 && c < 1000) 

O si solo quieres limpiarlo un poco, puedes agregar la línea se rompe si no te opones a la práctica.

(a > 0 && a < 1000 && 
b > 0 && b < 1000 && 
c > 0 && c < 1000) 

No más corto, pero mucho más fácil de leer.

Cuestiones relacionadas