Categorías: Tutoriales

Diferenciar i++ y ++i

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.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • 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)

  • @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.

Compartir
Publicado por
F. Javier Carazo Gil
Etiquetas: cjavaprogramación

Entradas recientes

DeepSeek

3 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

1 mes hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

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.

1 mes hace