Lo he visto en varios bucles e incrementos. En lugar de hacer i ++ lo hacen i + = 1. ¿Por qué es esto?¿Por qué la gente usa i = i + 1 en lugar de i ++?
Respuesta
No todos los idiomas tienen ++
operador (python, por ejemplo) ... Probablemente estas personas provienen de un fondo en uno de esos idiomas. También algunas personas sienten que i++
no es muy claro, especialmente porque algunos idiomas tratan i++
y ++i
de manera diferente.
Cada idioma que conozco trata 'i ++' y '++ i' de manera diferente de una manera: el valor de la expresión.En otras palabras, 'x = i ++;' asigna un valor menos en uno a 'x' que' 'x = ++ i'. ¿Eso es lo que tenías en mente? Tengo curiosidad acerca de su uso de la palabra "algunos"; ¿Conoces idiomas que tienen operadores de incremento de prefijo y postfix y no hacen esta distinción? –
@Ted Hopp Perl devolverá un * valor * o una * referencia * según un incremento previo o posterior. Esto puede llevar a un comportamiento desconcertante. En la forma básica, esto no es un problema. Sin embargo, esto es muy desconcertante en los casos de 'foo ($ x, ++ $ x)', (la evaluación todavía ocurre de izquierda a derecha). Además, C/C++ tiene una gran cantidad de UB con modificaciones variables (++/-) y acceso entre dos puntos de secuencia. –
En javascript para el navegador IE10 (y probablemente <10 también) i ++ es 15% * más lento * que i + = 1. Por lo tanto, siempre prefiero usar i + = 1, simplemente porque es más rápido y, desde el punto de vista semántico, es prácticamente el mismo derecho. – Yeti
Preferencia personal y estilo.
Previene el exceso de astucia. Al menos eso es lo que dice Crockford.
Sin embargo, el código astuto será astuto sin "++" y el código limpio será código limpio con "++". –
i = i + 1
es más fácil de decodificar en inglés. i++
aunque totalmente correcto no se traduce bien cuando los principiantes están leyendo el código. El programador posiblemente intentaba hacer que su código fuera más legible para los principiantes, o tal vez simplemente no intentaba preocuparse demasiado por la sintaxis. No hay buena razón para usar una sobre la otra.
Algunas personas encuentran i = i + 1
o i += 1
más descriptivo que i++
. Solo se trata de codificar el estilo y la legibilidad. En la mayoría de los idiomas actuales no hay diferencia de rendimiento entre las diferentes formas.
Hay algunos problemas de legibilidad con los operadores ++
y --
, pero eso es principalmente cuando se usan junto con otros operadores, no es realmente un problema cuando se usan por sí mismos. Una expresión como ++x+-++y+-z++
, por ejemplo, es perfectamente válida, pero es difícil ver lo que realmente hace. Como los operadores causan problemas de legibilidad en algunos casos, algunos sienten que siempre deben evitarse.
Esto es un extremo, sin embargo. Si bien prefiero '+ =' a '++', el código bueno es bueno y el malo es el código incorrecto: '++ x + - ++ y + -z ++' no es un buen código, '++ 'a un lado. Por ejemplo, imagine si la "regla" para usar 'i ++' (o incluso '++ i') es" solo en un contexto de declaración ". Esto no es diferente de las "reglas" que restringen el uso de 'x = i = i + 1' u otras monstruosidades similares. –
@pst: Por supuesto, es un código incorrecto, el punto con el ejemplo fue demostrar que los operadores pueden usarse para escribir código ilegible. – Guffa
La razón general es que hay dos versiones diferentes de la subasta que se comportan de manera diferente
var i = 0;
1 == ++i // true
y
var i = 0;
1 == i++; // false
++i
se traduce en "incremento i, luego evaluar", mientras que i++
se traduce en "evalúe i, luego incremente"
Cuando escribe estas expresiones como i = i + 1;
, queda claro cuál era la intención del programador y es más fácil encontrar errores en el código. Es la misma razón por la que la gente escribe "cláusulas yoda" como
if(6 == x){
//. . .
}
porque si accidentalmente hace
if(6 = x){
//. . .
}
que es más fácil coger el error
- 1. ¿Por qué i = i + 1 es más rápido que i ++?
- 2. ¿Por qué Math.sqrt (i * i) .floor == i?
- 3. i = i ++ no incrementa i. ¿Por qué?
- 4. ¿Por qué 'int i = i;' ¿legal?
- 5. En C++, ¿qué es más rápido? (2 * i + 1) o (i << 1 | 1)?
- 6. ¿i = 0, ++ i definido?
- 7. En Java, ¿por qué no puedo escribir i ++++ o (i ++) ++?
- 8. ¿Hay una diferencia de rendimiento entre inc (i) e i: = i + 1 en Delphi?
- 9. ¿Qué es más eficiente i ++ o ++ i?
- 10. diferencia entre (++ i) y (i ++)
- 11. Cython: para i de 1 <= i <N
- 12. ¿La matriz [i] = i ++ está cubierta por el estándar C++?
- 13. ¿Qué es "i" en "función (i)" en el siguiente JavaScript?
- 14. diferencia entre ++ i y i ++
- 15. ¿Qué hace? para i = 1, seleccione ('#', ...)
- 16. ¿Por qué i ++++++++ soy válido en Python?
- 17. diferencia entre int * i y int * i
- 18. Diferencia entre int * i y int ** i
- 19. ¿Dictionary.Keys.List() [i] corresponde a Dictionary.Values.ToList() [i]?
- 20. document.body.appendChild (i)
- 21. ¿Cuál es la diferencia entre ++ $ i y $ i ++ en PHP?
- 22. Algoritmo para encontrar si hay alguna i de manera que array [i] es igual a i
- 23. Loops ineficiencia en I
- 24. ¿Por qué Ruby no admite i ++ o i-- (operadores de incremento/disminución)?
- 25. ¿Cómo se calcula a [i] = f (a [i-1]) en Repa?
- 26. Autoboxing: entonces puedo escribir: Integer i = 0; en lugar de: Integer i = new Integer (0);
- 27. ¿Qué significa i: nil = "verdadero"?
- 28. regresión "ponderada" en I
- 29. ¿Por qué "i: = i + 1" no da un error de verificación de rango para enteros y tipos más grandes?
- 30. validación cruzada en I
¿Por qué es su pregunta en el título diferente de la pregunta en el cuerpo? ¿A cuál te refieres? –
Uso 'i + = 1', excepto en la 3ª posición de un for-loop, en cuyo caso uso' i ++ '. –