Prácticas anti-intuitivas

Posted by | Posted in ,

Como si no fuera poco que por naturaleza el código fuente de una aplicación esta escrito en lenguajes que necesariamente estan en un nivel intermedio entre el lenguaje natural y el lenguaje de las máquinas (lo cuál hace que existan seres denominados “programadores”), existen prácticas, algunas pocos conocidas y otras utilizadas a menudo en ciertas areas de la programación, que hacen aún mas dificil su comprensión.
Cuando digo ‘prácticas anti-intuitivas’, no me refiero a una mala identación o modulación del código, sino a la utilización particular de ciertos operadores y/o palabras reservadas de algunos lenguajes de programación.
(update) Tampoco me refiero a malos usos de estos operadores y/o estructuras, todo lo contrario: muchas de las implementaciones que mencionaré son validas y necesarias en, por ejemplo, la programación de video-juegos.
A continuación, recopilo algunas de estas prácticas, la cuál en su mayoria son funcionales en lenguajes de sintaxis similar a C (C++, Java, C#, AS, Javascript, etc).

Operador condicional ?
Este operador nos permite sustituir el uso del bloque if-else por un código mucho mas simple y eficiente… pero a costa de claridad en nuestro codigo. La mejor forma de entenderlo para quienes nunca utilizaron este operador es con un ejemplo:

if (a>b) {
c = 10;
}
else {
c = 5;
}

Este código utilizando el operador condicional se escribe:

c = (a>b) ? 10 : 5;

Dejo al lector el analisis de la linea anterior (:-P).

Iterando colecciones
Para la siguiente practica deberemos abstraernos del lenguaje usado. Supondremos una propiedad lenght en una colección que nos devuelve la cantidad de elementos presentes en esta, y supondremos que la variable i ya fué declarada y responde a algún tipo entero.
La siguiente forma de recorrer una colección la encontre en el código de un juego de un compañero, y debo reconocer que (tal vez por la sorpresa) tarde un rato en entender su maldita razon de ser!.
En vez de utilizar el bloque for de la siguiente manera:

for (i = 0; i <>
colection[i] = 0;
}

El muy limado escribió:

i = colection.lenght;
while (i) {
i–-;
colection[i] = 0;
}

Intercambio de valores entre dos variables
Los siguientes métodos de intercambio de valores fueron extraidos del blog “Programación Bizarra”.
En vez de escribir el siguiente código:

aux = x;
x = y;
y = aux;

Podemos utilizar aritmetica básica:

x = x + y;
y = x - y;
x = x - y;

Ó una forma mucho mas resumida utilizando el operador binario XOR (^=):

a ^= b ^= a ^= b;

Comments (0)

Publicar un comentario