Si alguna vez habéis programado en un lenguaje de programación con sintaxis heredada de C: el mismo C, C++, Java, C#… seguro que habéis utilizado el operador postincremento, sobre todo en iteraciones for, el famoso: i++ (o equivalente). Lo que es menos frecuente es haber utilizado el operador ++i, pero si lo habéis utilizado seguro que lo habéis hecho para algo similar al anterior. La diferencia entre ambos es algo que un día me inquietó y que hoy os voy a comentar.
La diferencia es la precedencia del operador, es decir, qué operador realiza su acción antes. Esta diferencia no importa cuando la única operación de una sentencia es i++ o ++i, es decir:
i++; ++i;
Típica situación del caso de las iteraciones for, es lo mismo. Sin embargo, cuando hay otra operación de por medio, las cosas cambian. Veamos:
i = 0; v = i++;
La variable v contendrá 0 e i contendrá 1. Primero se ha asignado el valor de i a v y posteriormente se ha incrementado i. Si utilizamos el otro operador, que tiene más precedencia, se ejecutará antes el incremento de i y posteriormente se asignará su nuevo valor, 1, a la variable v.
i = 0; v = ++i;
En este caso ambas variables, v e i, contienen 1.
La diferencia funcional, como podéis ver, existe y es conveniente conocerla, para poder utilizarla, explotarla y de paso, conocer algo más sobre los lenguajes de este tipo.
Aparte existe otra diferencia, ésta de carácter computacional y que es conveniente conocerla de cara a hacer más eficiente nuestro código. ++i realiza dos instrucciones, incrementar y retornar; mientras que i++, por lo que acabamos de comentar lleva a cabo tres: guardar el estado actual, incrementar, retornar el estado anterior.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
¡oh! Has descubierto el operador de PREincremento...
Muy bueno el post, es tan elemental que mucha gente debe haber estado confundida :)
Salduos!
no conocia el operador ++i
tenia entendido que el i++ era igual que i=i+1 pero veo que no
gracias por este post
salu2
P.D añadidle una s a mientra (para que ponga mientras)
Excelente artículo Carazo.
@Nacho López, @javier parra, @Ernesto Carrión: Gracias a todos, en ocasiones, lo más básico se desconoce y es importante recordarlo.
@javier parra: Ya está corregido :)
Muy buena, la verdad es que el operador ++i es algo que había olvidado, de cuando dí C, y del que desconocía la diferencía de pasos que conlleva cada orden. Por poco que sea lo que se ahorra siempre viene bien.
Gracias por el artículo.
La última diferencia (++i se realiza en dos pasos, i++ en tres) explica porqué debemos utilizar ++i en los bucles del tipo: for (i=0; i<N;++i), si N es un número grande la diferencia con for (i=0;i<N;i++) puede ser apreciable. En fin que una buena práctica es utilizar el primer método.
Francisco, depende del lenguaje... Normalmente no hay diferencia de rendimiento entre usar ++i que i++
@algo: Habría que ver el código generado en cada caso y en el caso de los interpretados habría que mirar un poco más aún, de todas formas, más que en el rendimiento quería hacer hincapié en el tema de la precedencia de operadores.