Introducción
Hoy por la mañana vi un chiste sobre intercambiar dos enteros sin usar una variable temporal.
Intercambiar una variable es por ejemplo asignar el valor de a
a b
, y el de b
a a
Esto normalmente lo hacemos con el siguiente (pseudo) código:
temporal = a
a = b
b = temporal
Pero, ¿cómo lo hacemos sin una variable temporal?
Intercambiar dos enteros sin usar una variable temporal
Bueno, lo que hacemos es sumar a la primera variable el valor de la segunda.
A la segunda asignarle el resultado de restar la primera de la segunda y finalmente a la primera asignarle el resultado de restar la segunda de la primera.
Pero hablar es de mal gusto y a veces no entendemos, así que aquí la implementación en JavaScript:
let primera = 10;
let segunda = 20;
console.log("Antes de intercambiar. Primera: %d, segunda: %d", primera, segunda);
primera = primera + segunda;
segunda = primera - segunda;
primera = primera - segunda;
console.log("Después de intercambiar. Primera: %d, segunda: %d", primera, segunda);
Con la siguiente salida:
Todo esto es posible gracias a que podemos guardar y extraer el valor en la misma variable, lo mismo funcionaría para intercambiar strings, ya que concatenaríamos.
También presento la implementación en C, por si no sabes JavaScript.
#include <stdio.h>
int main(int argc, char const *argv[])
{
int primera = 10, segunda = 20;
printf("Antes de intercambiar. Primera: %d, segunda: %d\n", primera, segunda);
primera = primera + segunda;
segunda = primera - segunda;
primera = primera - segunda;
printf("Despues de intercambiar. Primera: %d, segunda: %d\n", primera, segunda);
return 0;
}
Aprovecho este espacio para mostrar cómo intercambiamos una variable de forma correcta usando funciones por referencia en C.
El código de arriba produce la siguiente salida:
Conclusión
Como vemos, esto funciona para cualquier lenguaje de programación. Pero es una muy, muy mala práctica. Funciona sólo como chiste o como truco para sorprender a nuestros amigos; pero nunca lo uses.
De hecho no deberíamos intercambiar variables en nuestro código, personalmente en toda mi vida nunca he necesitado intercambiar variables, sólo para ejercicios escolares.
Bonus: Python
En Python podemos hacerlo de la siguiente manera, aunque no tiene nada de gracia ni de matemáticas:
a = 20
b = 10
b, a = a, b
Una de las cosas buenas de Python