¿Quieres registrarte?

Bitwise Flags en ActionScript 3

Por: fernando
21 de Diciembre del 2008

Aqui les dejo un tip bastante interesante que les puede servir para varias cosas. Se llaman "bitwise flags". Lot bitwise operators es el capítulo menos leído de todo el diccionario de ActionScript pero es super útil y sencillo si prestaste atención a tus clases de matemáticas :)

Imaginemos que tenemos una propiedad que se llama "clabbers" donde debemos poder especificar la cantidad que nosotros deseemos de clabbers, como lo hariamos? Cada vez que hago esta pregunta me responden con 2 opciones:

1. Creo un Array y voy almacenando los valores. FAIL! El problema es que para recuperar los valores vamos a tener que hacer un bucle por todo el Array lo cual toma mucho tiempo y pues no... performance FAIL.

2. Creo un objeto y compruebo si existe, es decir, objeto.propiedad != undefined. FAIL! Si bien esto funcionaría. Primero, no les recomiendo comprobar contra una no existencia y segundo, esto botaría una exception en varios lenguajes y pues no esta bien llenar el código de try...catch. so.. FAIL!

La forma es utilizar bitwise flags, por ejemplo:

Código :

public const FREDDIE:uint = 1;
public const ELDER:uint = 2;
public const EDGAR:uint = 4;
public const MARIUX:uint = 8;
public const ELECASH:uint = 16;


Para setear los "flags" en la propiedad:

Código :

public var flags:uint = 0;
// agregamos a FREDDIE
flags |= FREDDIE;
flags |= ELECASH;
flags |= ELDER;

// si les da weba escribir tanto pueden hacer lo mismo con
// flags = FREDDIE | ELECASH | ELDER;


Para comprobar si un flag esta seteado:

Código :

if((flags & FREDDIE) == FREDDIE) trace ("FREDDIE ESTA SETEADO");
// denuevo, si les da weba escribir mucho aqui pueden hacerlo asi
// ya que "flags & FREDDIE" de existir devuelve un número distinto a 0 por lo que es True
// if(flags & FREDDIE) trace ("FREDDIE ESTA SETEADO");


Si en caso quisieramos quitar un flag:

Código :

flags ^= ELECASH;
if(!(flags & ELECASH)) trace ("ELECASH NO ESTA SETEADO");


Si en caso quisieran borrar todos los flags entonces setean "flags" a 0 y ya :) jajaja

Los bitwise operators son más rápidos que cualquier condicional o bucle. De hecho son más rápidos que una operación matemática en código. Cosas de procesadores (seguro van a decir que en los modernos ya no es asi pero bue...)

Espero que les guste y pues pongan sus comentarios.

--fernando

SPAM: Siganme en http://twitter.com/fernandoflorez (quiero ver a cuantos followers llego) thnx!

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas matematicas actionscript_3

Comentarios | Enviar un comentario
Demasiado bueno Fernando, esperamos verte más por clab. Felicidades por el Tips

(si alguien quiere abrazar a Fernando... no se limiten por favor U_U)

Por: eldervaz
Ah cierto, aqui les dejo una referencia de Bitwise...

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/operators.html
Por: eldervaz
Muy buena Sr. Florez ;-) mira tu si después de unas cuantas reuniones con gente tan chida hasta dan ganas de ser clabber no?
Por: eparada
Excelente, fernando. Felicitaciones.
Aunque parece que necesitas un abrazo. ¡Abrazo grupal para fernando!
Por: The Fricky!
Muy bueno. Realmente útil ;)
Por: Zguillez
Y yo que pensé que los operadores a nivel de bit no servían para nada... También es el capítulo menos leído de mis manuales XD

Pero si realmente son tan rápidos, habrá que echarles una ojeada... O fer podría ponernos más ejemplos de cómo usarlos :P

¡Me uno al abrazo!
Por: Juanlu_001
Curioso. Nice tip!
Por: Bleend
OMG!! Fernando mencionando las matematicas?? o_O.

Por otra parte muy buen tuto :D
Por: phpleo
Wow! Impresionado.
Desconocía totalmente ésta forma de controlar elementos.
Gracias.
Por: Andros
Creo que nunca hasta hoy entendí que era bitwise. Mejor, imposible.
Por: tomasdev
Ah mira tú, interesante. Claro no tengo que crear un arreglo y luego hacer un bucle, esto evita muchas líneas de código y hace el código menos complejo (en términos de complejidad de algoritmos). ¿Esto solo funciona en ActionScript 3.0 o existe en otros lenguajes?
Por: Giancarlo-blog

Giancarlo-blog :

¿Esto solo funciona en ActionScript 3.0 o existe en otros lenguajes?
Esto existe en Actionscript 2 también. Lo he visto en casi todos los lenguajes derivados de ECMA, en Java, C/C++. Hasta en Visual Basic.
Por: Freddie
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.