Javascript: Arrays e Objetos

Sempre tive o costume de utilizar códigos semelhantes a este:

var colecao = new Array();

colecao["teste"] = new UmaClasseQualquer();

Apesar de pouco aparente, esta forma de programar não é a mais indicada. Arrays, em Javascript, devem ser usados preferencialmente com índices numéricos. Mas e se você quiser um array associativo igual ao do código apresentado? Use OBJETOS! Arrays associativos são objetos com atributos definidos dinamicamente.
Confuso? É, eu também acho. Mas há diversos inconvenientes em usar Arrays como associativos. Por exemplo:

var colecao = new Array();
colecao["length"] = 200;
colecao[0] = "teste";
colecao[1] = "teste2";
alert(colecao.length);

O que será apresentado no código acima? O número 3? Errado, será o número 200, pois você acabou de redefinir o método length existente nos objetos Array em Javascript.

O melhor seria, então:

var colecao = new Object();
colecao["length"] = 200;
foreach ( key in colecao ) {
   alert(key + "=" + colecao[key]);
}

Ah sim, e mais um detalhe. Caso você tenha criado um “array associativo”, não pense que length irá retornar o tamanho do array, pois, como eu já disse, não existem array associativos na verdadeira concepção da palavra, e sim objetos. Portanto:

var arr = {id:1, descricao:"teste"};
alert(arr.length);

Este código não vai lançar um alerta com o número 2. Primeiro, porque a variável arr não é um array para ter o método length. Segundo, porque arr é um objeto com dois atributos: id e descricao. Portanto, cuidado com códigos como este:

var arr = new Array();
arr[0] = "teste";
arr["teste"] = 2;
alert(arr.length);

O que será retornado? Caso tenha prestado atenção a tudo que eu disse, você dirá 1. 🙂

NHibernate 1.2

Aqui vão alguns detalhes importantes ao adotar a nova versão, ainda em desenvolvimento, do NHibernate 1.2. Inicialmente, observar o arquivo de mapeamento .hbm, pois requer assembly=”Msc.Media” namespace=”Msc.Media.Video.Objects” default-lazy=”false”>

01_oben_logo.gif

O xmlns agora deve ser 2.2, e não 2.0 como o anterior. Houve também alguns problemas no carregamento de objetos, o qual resolveu com a inclusão do atributo default-lazy=”false”. Abaixo um exemplo de mapeamento utilizado por mim em um projeto:











Conversão de Vídeos em .NET

Este é meu novo desafio: criar um sistema que, tendo como entrada arquivos nos formatos WMV, MPEG e AVI, gere como saída um vídeo no formato FLV. Trata-se de um sistema para uma nova rádio da Bahia, chamada Nova Salvador. Entre diversas pesquisas (no Google, é óbvio), cheguei a algumas opções. Inicialmente, através deste post, encontrei o AvDn, feito pelo Daniel. Logo depois, no mesmo link, encontrei o SharpFFMpeg. Todos são Wrappers para o FFMpeg, um excelente programa freeware para conversão de vídeos de todos os formatos!

Infelizmente, ainda não obtive sucesso na utilização destas bibliotecas, mas assim que tiver boas notícias, estarei compartilhando com todos.