2012-01-05 4 views
16

yo estaba buscando en el código fuente para qTip 2 y vieron lo siguiente:primitivas Asignación de JavaScript a su equivalente variables nombrado como "constantes"

// Munge the primitives - Paul Irish tip 
var TRUE = true, 
    FALSE = false, 
    NULL = null; 

no puede llegar a una razón por la que nunca debe hacer esto y tiene una fuerte sensación de que solo alentaría malos hábitos de codificación. Supongamos que un desarrollador comete un error tipográfico en una condición Yoda como if (TRUE = someCondition()), entonces TRUE podría terminar realmente significando false, o podría terminar asignando someObject a NULL.

Creo que simplemente estoy preguntando si hay algún punto favorable para esta práctica que me falta, o si esto es sólo un viejo y simple mala idea ™

+3

Btw, '+ 1' no solo por la buena pregunta sino por usar el término * condición de Yoda * .. –

+0

@MikeChristensen: Puede que le interese este artículo, luego :) -http: //www.dodgycoder. net/2011/11/yoda-conditions-pokemon-exception.html – Tristan

+0

Hmm, de hecho trabajo o lee un divertido blog de codificación. Blog es! –

Respuesta

15

El objetivo de esto es simplemente mejorar la compresión, el propio Paul Irish lo llama como un "Antipatrón".

Él lo describe como "Bueno para la compresión y la cadena de ámbito transversal" en la siguiente presentación:

El recorrido cadena de ámbito, no lo haremos vea cualquier mejora en literales como null, false, true, ya que la cadena de alcance no se inspecciona, solo son literales.

En otros identificadores como undefined o windows, el recorrido de la cadena de alcance se ha inspeccionado.

Paul Irish Anti-patterns slide 55

+1

Me pregunto si vale la pena si gzip. Me parece recordar casos en los que el resultado ofuscado fue de hecho más pequeño, pero el resultado gzip fue mayor que el gzip equivalente sin el munging. –

+0

El código exacto del OP aparece en la diapositiva 55. Cómo encaja ... – hugomg

+1

@missingno - qTip tuvo la idea de esta diapositiva. Lo ponen allí en el comentario (vea la primera línea en el código del OP). –

2

Creo que esto se recomienda para la compresión.

Estas variables de acceso directo se comprimirán al enviarlas, lo que dará como resultado archivos más pequeños. Sin embargo, sus desventajas notorias son ciertamente puntos válidos.

4

usted puede hacer esto por el bien de compresión de código. Por ejemplo, YUI Compressor no va a tocar true y false, pero podría reemplazar todas las instancias de, por ejemplo, TRUE con A, guardando cuatro caracteres por aparición. Por ejemplo, antes de la compresión:

if (foo === null) { 
     bar = true; 
    } 

Después de la compresión, suponiendo que el compresor reemplaza TRUE con a y NULL con c:

if(foo===c){bar=a;} 

Versus esto, después de la compresión con no "munging de primitivas":

if(foo===null){bar=true;} 

El peligro de los malos hábitos de codificación que usted cita correctamente en su pregunta puede superar los pequeños ahorros en compresión adicional. Depende de cuán desesperado esté por ahorrar unas pocas docenas o quizás unos cientos de bytes.

Personalmente, lo haría (casi) nunca hago esto. Demasiado peligroso.

Cuestiones relacionadas