2010-07-13 17 views

Respuesta

36

Debido a Douglas Crockford tiene sus propias opiniones sobre cómo algo confuso pueden o no ser. Están bien de usar, JSLint solo está proyectando sus opiniones.

+0

OK, eso tiene sentido, y parece ser el consenso aquí también, así que continuaré usando ++. Javascript tiene algunas formas raras de hacer las cosas de vez en cuando y es difícil saber cuándo una recomendación es algo personal o algo basado en el rendimiento. –

+1

Me gustó bastante The Good Parts, pero estaba muy decepcionado con su justificación para declarar el incremento y la disminución unarios como una mala parte. Claro, se pueden usar de distintas formas, como partes de bucles sádicos/masoquistas, pero eso se aplica a muchas características del lenguaje. Podría aplicarse a todos ellos si pasas suficiente tiempo creando ejemplos locos. –

+1

suspiro. Crockford tiene un * lote * para responder, desearía que las personas no tomaran su opinión como un evangelio ... – annakata

2

La única buena razón que se me ocurre es la claridad. Usted no tiene que preocuparse por la siguiente situación:

var result = ++i; 

O:

var result = i++; 
+6

Nunca uses cosas que no entiendas. Por favor use cosas que * entiende *! (Lo mismo se aplica a 'break',' continue', 'with' de Delphi y todas las otras cosas sobre las que hemos discutido en SO las últimas semanas.) –

+0

@Andreas, cosas así _son buenas_ pero, en realidad, ¿cuántos profesionales ¿Puede darse el lujo de aprender a ver a través de cada capa de abstracción y comprender un sistema desde la física cuántica hasta la GUI? Creo que todos deberían esforzarse por conocer los detalles del modelo de operación de la capa de abstracción en la que trabajan. Digo "esforzarme" porque, en general, no hay forma de saber cuándo realmente se comprende cada detalle del modelo de operación de una capa de abstracción. –

+0

@Andreas existe un principio más fuerte: nunca use cosas que puedan ser malinterpretadas por usted o por otros. La diferencia entre '++ i' y' i ++ 'es un buen ejemplo. –

16

¿Alguien le importa si hago la sugerencia opuesta ...?

Utilice los operadores de incremento (++) y decremento (-) cuando pueda. Mucho más sencillo. (Y para eso están.)

+1

De acuerdo. ¿Por qué * no debería * usamos algunos de los elementos de lenguaje más convenientes que hacen que la sintaxis C sea tan genial en primer lugar? – Robusto

+1

no me importa '++'/'--', los uso todo el tiempo. sin embargo. No estoy seguro de poder * realmente * llamarlos mucho más directo. considere 'var c = a ++ + b' y' var c = a + ++ b'. * las tres * variables tendrán diferentes valores dependiendo de dónde coloque los espacios, aquí, que abre la posibilidad de interpretar mal 'var c = a +++ b' –

+2

@David Hedlund - verdadero. Existe una posible confusión. Sin embargo, el operador de incremento es MEANT para incrementar. Su propósito es tan sencillo como se pone. Usar '+ = 1' o' = var + 1' me parece como hacer x + x cuando quieres duplicar algo en vez de x * 2. Codifica lo que quieres decir. – froadie

4

La única razón por la que puedo pensar, es que es más probable que tu código JavaScript sea editado por un idiota que cualquier otro código que escribas (html ??).

Así que para un novato,

x=x+1 ; 

es más legible que

x++; 

Cuando se trata de programadores con experiencia, lo que realmente no importa.

7

La única vez que vi desanimar a estos operadores fue en el Douglas Crockford'sJavaScript: The Good Parts libro.

Citando las "partes malas" Apéndice:

El incremento y decremento operadores hacen que sea posible escribir en un estilo muy conciso. En lenguajes como C, hacen que sea posible escribir una sola línea que podrían hacer copias de cadena:

for (p = src, q = dest; !*p; p++, q++) *q = *p; 

También fomentan un estilo de programación que, como resulta, es imprudente. La mayoría de los errores de desbordamiento de búfer que crearon terribles vulnerabilidades de seguridad se debieron a un código como este.

En mi propia práctica, observé que cuando usaba ++ y --, mi código tendía a ser demasiado apretado, demasiado críptico. Entonces, como una cuestión de disciplina, ya no los uso. Creo que como resultado, mi estilo de codificación se ha vuelto más claro.

Además, citando el (la herramienta de la calidad del código que ha escrito) JSLint documentation:

El ++ (incremento) y -- operadores (decremento) han sido conocidos por contribuir al mal código de fomentando el exceso de trucos. Solo superan a la arquitectura defectuosa al permitir virus y otras amenazas de seguridad. Existe una opción plusplus que prohíbe el uso de estos operadores.

Realmente no le gustan estos operadores ... ¡Pero vamos! Creo que todavía podemos usar los operadores ++ y -- sin escribir un código críptico. Los uso, y me gustan. Todos los usan.

Tenga en cuenta que aunque JSLint tiene la opción de no permitir estos operadores, esta opción no está habilitada de forma predeterminada.

+6

Bien dicho. Me parece que Crockford está culpando al arma por el agujero en su pie. O tal vez fue ese hombre de paja que lo hizo ... – annakata

+0

La mayoría de los errores de desbordamiento de búfer que crearon terribles vulnerabilidades de seguridad se debieron al hecho de que las cadenas de C tienen terminación nula. –

7

La razón por la que Crockford et al. desalienta el uso de ++/-- es que introducen efectos secundarios. No hay prácticamente ninguna razón para usar i+=1; en lugar de i++; porque ambas son sentencias únicas, pero hay muchas razones para que una instrucción haga una sola cosa y ++ hace que sea fácil violar esa regla.

desalentar el consumo de ++ significa que no tenemos que mantener la distinción entre i++++i y en nuestras cabezas. Significa que es menos probable que tratemos de usarlos de manera inteligente pero confusa. Es una buena práctica no usarlos, por eso.

0

use el ++, es estándar y tiene una buena situación de estar allí.

3

El uso de ++/-- puede restringir las opciones de minificación js, porque su significado es muy sensible a los espacios en blanco. Dependiendo del minificador, incluso podría introducir errores en el código de trabajo. Crockford explica (en la sección Precaución) here.

+1

No use un minificador que no entienda el código que minimiza. –

Cuestiones relacionadas