Comunidad de diseño web y desarrollo en internet online

Bitwise Flags en ActionScript 3

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!

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate