Cuando uno cree que ya lo vio todo

Cuando aprendes algo nuevo basandote en el conocimiento ya adquirido uno deja pasar detalles tan sutiles que luego te sorprenden. Eso fue lo que a mi me paso cuando Frank que trabaja conmigo me comento una peculiaridad de java frente a C++.

Cuando aprendes C++ ves el post incremento y el preincremento. En una linea por ejemplo.
En C++ :
int i=0;
cout << i++;

En java:
int i=0;
System.out.println(i++);

el resultado en ambos es 0, porque al momento de imprimir el resultado el valor de i es cero
y cuando pasa a las siguente linea el incremento es realizado. Esto fue el post incremento.
En el pre incremento nos da 1 y el codigo seria asi.

En C++ :
int i=0;
cout << ++i;

En java:
int i=0;
System.out.println(++i);

Estos ejemplos nos muestran como funciona el pre incremento y el post incremento.

Pero que sucede cuando la situacion es ligeramente mas compleja. Por ejemplo:

En C++ :
int i=0;
int res =i++ + i++;
cout << res;

En java:
int i=0;
int res= i++ + i++;
System.out.println(res);

Esta es precisamente la situación que me asombro. Y es que normalmente en donde trabajo nos toca código que se hizo en java, pero que se porto a C++, asi que bueno ustedes ya deben estar adivinando cual es el resultado.

Y entonces lo compilo y el resultado es que en java nos imprime uno y en C++ nos imprime cero.
Y es ahi, donde nos explica Frank que esto se debe a la forma en que cada compilador evalua una linea de codigo. En C++ es por linea y en java es nodo por nodo. Esto es en resumidas cuentas. Pero vamos, que loco no?. Se supone que en estos detalles ambos lenguajes deberian arrojar el mismo resultado. Por eso este post se pudo haber titulado "Que loco loquisimo"

Comentarios

Entradas populares