Memoria Limitada
Creo que no es nada nuevo, es algo que nos pasa a todos, que nuestra memoria es tan limitada que nos olvidamos de muchos detalles sobre el lenguaje de programación que usamos, por más que día a día estemos desarrollando.
Por eso mismo este Post se podría haber llamado «Lo que no se usa se olvida». Pero me pareció más correcto el título actual porque nos va a dar la solución a esa falta de memoria.
El caso
Si lo que les voy a comentar, si bien sencillo, nunca viene mal recordarlo, porque como fue en mi caso me había olvidado de ese funcionamiento.
Escenario: Estaba desarrollando un sistema que tenía dos objetivos bien puntuales.
- Permitir la carga de datos de una encuesta.
- Generar una hoja de cálculo con los resultados (Promedios, porcentajes, etc) separados en distintas tablas
Hasta ahí todo bastante simple. PHP cuenta con muchas extensiones que permiten generar archivos de diversos formatos y me topé con una clase muy buena que permite generar un archivo de Excel donde se puede indicar celda por celda cual es el valor a asignarle y en que formato.
No quería hardcodear los nombres de las celdas, porque si bien no eran tantas, llevaría mucho más tiempo de codificación. Lo que necesitaba lógicamente era un bucle, con las filas de la hoja de cálculo no había problema, el problema se me presentó con las columnas.
Si recuerdan un archivo de Excel, tendrán presente que las filas están numeradas y las columnas se llaman mediante letras. Las posibilidades era armar un array con las columnas que usaría con un índice numérico e ir llamándolas en el orden necesario.
Sin embargo antes de ponerme a hacer esto volví a la documentación de PHP, puntualmente a la parte de Operadores de Incremento y Decremento. Normalmente lo que hacemos con incremento y decremento es esto:
$var=1; $var++ echo $var; //imprime 2
Ahora que pasaría si yo uso el siguiente código:
$var="A"; $var++ echo $var;
¿Qué se imprime en la línea 3?. Esto es lo que había olvidado y fue la solución simple al problema. En la línea 3 se imprimiría «B».
Es decir, por falta de memoria y si no hubiera vuelto a la documentación, hubiera trabajado con un array, más un contador, más el bucle en sí. Cuando bastaba con un simple contador.
Un ejemplo más:
$var="Z"; $var++ echo $var;
¿Qué se imprimiría en la línea 3?. En este caso, llegamos al final de abecedario, la salida seria «AA», y de continuar «AB». Es decir, un simple contador con letras. Lo que nos permitiría seguir el orden de las columnas de la hoja de cálculo perfectamente.
Por eso mismo es que siempre recomiendo trabajar con la documentación abierta y a mano. Si bien muchos IDEs de desarrollo muestran información sobre la función que se está codificando en el momento puede ser de ayuda ver algunos ejemplos que figuran en la documentación.
Lo mismo se aplica cuando desarrollamos sobre una API. ¿Para qué perder tiempo haciendo un Dump de una variable, si la documentación me dice exactamente que tipo de dato y contenido me devuelve una función.
2 Comments