A variável "Mochileiro das Galáxias" no javascript

O termo é novo, mas o conceito é antigo. Sabe aquela variável que você cria no javascript, global, que você acessa em qualquer função, em qualquer js? Eis o seu mochileiro da galáxia!

O conceito é simples, e foi batizado por autores de livros sobre Java usando o famoso livro Guia do Mochileiro da Galáxia; no livro, o protagonista descobre que seu melhor amigo é um extraterrestre e logo após, a Terra é destruída; a partir daí, começa uma grande viagem por várias galáxias. Na programação Java, é comum ver desenvolvedores criarem objetos (esqueça o conceito de variável por enquanto) que viajam entre diversas camadas da aplicação, funcionando como faz-tudo, passando por cima de qualquer escopo e, muitas vezes, tornando impossível descobrir quem está realmente alterando o quê no seu programa.
* a primeira vez que vi esse termo foi num artigo da revista Mundo Java, exposto em partes aqui.

 Agora, imagine: se em Java que a orientação a objetos é algo inerente ao desenvolvimento, imagine a dor-de-cabeça que tais variáveis (podem ser objetos também) podem causar no javascript, onde o desenvolvedor pode simplesmente implementar da forma que quiser – e, tenham certeza, a forma mais rápida é sempre aquela que dá mais brecha para problemas bizarros.
E digo isso por experiência própria: quantas vezes eu não criei uma variável global no javascript, e meses depois ia lá implementar (ou alguém da equipe ia pegar meu código) algo e do nada coisas começavam a quebrar… até descobrir que eu havia criado 2 variáveis globais!!!

Certamente a orientação a objetos ajuda -e muito – a diminuir essa questão. Para quem desenvolve e acha pataquada, dê um passo atrás e procure pelos benefícios da mesma. Existe claro a curva de aprendizado, há novos paradigmas para quem vêm da programação estruturada, é mais complexa, mas vale a pena a longo prazo.
Ao mesmo tempo, orientação a objetos não é tudo. Se fosse, implementações em Java não teriam tal problema.

Aqui vão algumas sugestões (e que podem valer para outras linguagens):

  • usar o mínimo possível de variáveis globais
  • dar nomes que façam sentido às suas variáveis, isso diminui o problema de você criar uma variável global com nomes iguais (como javascript é interpretado e não compilado, não existe uma verificação de variáveis sendo instanciadas com o mesmo nome, o que não ocorre no primeiro caso)
  • sempre que for criar uma variável, usar a diretiva var. Por exemplo, quando for num laço for usar um contador, fazer:
        for(var i=0; i<array.length; i++)
    

    Porque? Assim você garante que sua variável i comece sempre com o valor igual a 0 (vai por mim, já passei por muitos perrengues por ter variáveis em contadores não inicializadas)

  • documentar as funções/classes – o que elas fazem, quais e de onde vêm os parâmetros utilizados, etc…; isso ajuda muito você a, no futuro, entender porque aquela variável global está fazendo ali e de onde ela veio.
  • nunca, jamais nessa vida, utilizar variáveis globais em retornos de métodos ajax. Porque? Eles são assíncronos. Logo, você pode acessar uma variável que está com um valor qualquer num momento, assumir que está correta, e o valor mudar no instante seguinte – levando você a loucura sem entender porque o fluxo esperado não é seguido. E, denovo, vão por mim: já tive dores de cabeça com isso :-/

 

*se alguém tiver outras sugestões, por favor, enviem 🙂

E eu não estou aqui querendo dizer "não usem variáveis globais"; até porque eu sei o quão difícil é em muitos momentos desenvolver em javascript, devido às suas limitações. A idéia é apenas usar com cuidado 🙂

Compiz Fusion

Todo usuário do Linux deve ter ouvido falar do Compiz Fusion, a fusão entre o Beryl e o Compiz. Beryl e Compiz eram projetos da comunidade com o mesmo propósito: ser um gerenciador de janelas e desktop (conhecidos como composite window manager) que permite inserir efeitos e alterar a interface gráfica. Num certo momento, os "cabeças" de ambos projetos perceberam que ambos tinham a mesma finalidade e que seus avanços estavam indo devagar demais, então resolveram juntar os dois projetos e criar o Compiz Fusion. A primeira versão fi lançada em Agosto de 2007.

Compiz Fusion

Veja abaixo um vídeo do que o Compiz Fusion é capaz de fazer, ele é auto-explicativo 🙂

O Compiz Fusion é ideal para quem quer customizar a interface gráfica do Linux, seja para ganhar uma usabilidade maior – um dos chamarizes é a opção de você criar o seu desktop em forma de cubo, ganhando 4 áreas de trabalho, ou poder colocar uma dock semelhante à do Mac, ou ainda usar efeitos que deixam seu trabalho mais divertido.

Dock
Exemplo de uma dock que pode ser usada com o Compiz Fusion

O Compiz Fusion hoje em dia trabalha muito bem em cima tanto do Gnome quanto da KDE. Tutoriais na net de como instalar, existem em profusão, informando como fazer para cada versão de cada distro. Minha experiência é de ver o Compiz Fusion rodando no Ubuntu e no Redhat, e a performance vem melhorando a cada release. (Obs.: uma placa de vídeo de 256mb já da conta). E vale ressaltar também que, sendo um projeto da comunidade e que é muito procurado pelos usuários, atualizações são constantes: bug fixes e novos plugins são disponibilizados com uma velocidade incrível 🙂

CSS3 – vai ou não vai?

Depois de muito tempo, consegui colocar (em parte) em dia a leitura dos meus feeds. E me deparei com esse artigo que fala um pouco sobre o CSS3: dá dicas de alguns frameworks, manuais de boas práticas e o que pode ser feito e o que as empresas (e fundações) que cuidam dos browsers tem feito para dar suporte ao CSS3.

Para quem trabalha com desenvolvimento web, a simples olhada no que o CSS3 se propõe a nos disponibilizar nos faz abrir um belo sorriso. Digno de emoticon

Poder colocar imagens, sombras, curvas, etc… nas bordas, uso de seletores mais potente, múltiplos backgrounds, etc… farão (algum dia) a vida do desenvolvedor de interfaces ficar mais produtiva.

O grande problema, ainda, é o suporte: poucos browsers dão suporte a esses padrões novos. O Opera 9.5 é o mais avançado, enquanto o Firefox 3 que saiu recentemente dá um suporte bem menor. E a Microsoft diz que em 5 (?????) anos a versão do IE terá todo o suporte ao CSS3.
Até lá, muita gente ainda estará usando versões antigas do IE (que não terão tal suporte), e dificilmente o IE perderá em 5 anos a hegemonia de mercado. Logo, infelizmente, pouca luz no fim do túnel é vista para quem quiser aplicar o CSS3 sem se preocupar em escrever folhas de estilo diferentes para browsers diferentes

De qualquer forma, fica a dica do CSS3 Info que fala a respeito das novas implementações e dá exemplos. E ainda há a documentação oficial da W3C; um pouco mais confusa, mas é a referência mais profunda a respeito.