Archivo etiqueta ActionScript
Si trabajamos dentro del IDE de Flash o en Flex, contamos varias formas de obtener valores mientras estamos desarrollando. Pero una vez publicado, si queremos debuggear no es tan sencillo.
Arthropod es una mini aplicación RIA que nos permite conocer los valores no sólo de un string, sino también de array, object y bitmap.
Luego de descargarla y ejecutada por primera vez, nos pregunta si queremos guardar una copia de la class Debug, que necesitaremos importar en nuestros proyectos para que funcione en conjunto con la aplicación:
import com.carlcalderon.arthropod.Debug;
Debug.log("Mi mensaje para el Debugger");
Con ésto enviamos un string a la ventana del debugger. Si quisiéramos mostrar un array u object:
var aArray:Array = new Array(1,2,3,4,5); Debug.array(aArray); var oObject:Object = new Object(); oObject.nombre = 'Juan'; oObject.apellido = 'Pérez'; Debug.object(oObject);
También disponemos de métodos como warning y error, que muestran mensajes de advertencias / errores destacados por algún color diferentes (los cuales también podemos personalizar):
Debug.warning("Cuidado que puede dar error");
Debug.error("Ésto ha causado un error");

Para descargar la aplicación, y una lista completa de propiedades y métodos: Arthropod.
Mucha gente dirá que hace rato que existe la versión 3 de ActionScript (aprox. más de 4 años) y que hacer un artículo ahora sobre la versión anterior es un poco tarde.
En realidad por mucho que uno intenta imponer AS3, todavía hay programadores y diseñadores que lo utilizan diariamente, y multitud de desarrollos están en AS2.
Luego éste pequeño justificativo, vamos al problema que nos toca en el día de hoy. Si utilizamos un array con índices numéricos, con la propiedad length podremos conocer la cantidad de elementos que contiene determinado array:
var array:Array = new Array(); array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3; trace(array.length); //devuelve 4
También se podría haber utilizado push() para insertar los elementos, con el mismo efecto. Pero si queremos utilizar como índice una cadena, el resultado no es el mismo (acaso un bug?):
var array2:Array = new Array(); array2['cero'] = 0; array2['uno'] = 1; array2['dos'] = 2; array2['tres'] = 3; trace(array2.length); //devuelve 0
Aún cuando nos aseguramos que los valores se han guardado en el array:
trace(array2['cero']); //devuelve 0 trace(array2['uno']); //devuelve 1 trace(array2['dos']); //devuelve 2 trace(array2['tres']); //devuelve 3
Para solucionar ésto podemos recurrir a un prototype para que nos calcule ésto:
Array.prototype.getLength = function():Number {
var empty:Array = [];
var long:Number = 0;
for (var key:String in this) {
if (empty[key] == undefined){
long++;
}
}
return long;
}
Es un sencillo bucle, que cuenta la cantidad de elementos y retorna ese valor:
trace(array2.getLength()); //devuelve 4
Espero que les sea útil, hasta la próxima.