Creio que todo mundo que se envolveu com desenvolvimento web já teve alguma dor de cabeça com JavaScript. Ou era um script que funcionava no Internet Explorer e não funcionava nos outros, ou um script que funcionava nos outros e não no Internet Explorer (o caso mais comum).
Nascida nas entranhas do Netscape, JavaScript já começa com uma propaganda enganosa: nada tem a ver com Java. Exceto, talvez, por herdarem a sintaxe do C e C++. Porém, semanticamente, JavaScript está muito mais próxima de Self , uma linguagem baseada no conceito de protótipo.
Mas seu maior problema é a falta de padronização das implementações dos navegadores. Usar o W3 DOM resolve muita coisa, mas existem bugs e chatices que a gente descobre com o tempo. Você pode ter problemas com arredondamento de números de ponto flutuante (mas isso não é culpa do JavaScript). Gostaria de usar o appendChild em uma tabela no Internet Explorer? Você precisa do TBODY na tabela. Em muitos casos, o Internet Explorer implementa as mesmas funcionalidades do DOM com nome diferente, só pra complicar. Sendo justos: nem todas elas são do JavaScript. Algumas vezes o navegador implementa CSS de forma incorreta - e ficamos frustrados ao usar DOM para mexer com CSS (Essa combinação de DOM, com CSS e HTML recebeu o simpático nome de DHTML, que nos tempos de Ajax, está em alta). Aliás, usar DOM, já é uma frustração. Em Ruby, ReXML e em Python, CElementTree resolvem a parada de forma muito mais concisa.
Porém, eu gosto de JavaScript. Com ela eu senti pela primeira vez o gosto de objetos de primeira classe funções anônimas, e closures. Num certo sentido, ela me preparou muito mais para Lua do que PHP.
O fato dela suportar objetos de primeira classe e closures, leva a alguns pontos interessantíssimos. Hoje, existem uma diversidade de bibliotecas para se trabalhar com JavaScript. A maioria dela foi escrita por programadores com fluência em outra linguagem. A maioria deles optou por deixar JavaScript mais parecida com a sua linguagem favorita.
Alguns exemplos, da biblioteca Prototype:
//Prototype (JavaScript / Ruby)
// alert "1", "2", "3" ... "50"
50.times(function(n) {
alert(n);
}};
// alerts "a is at 0" then "b is at 1" then "c is at 2"
["a", "b", "c"].each(function(item, index) {
alert(item + " is at " + index);
});
// adicionaEnumerable aos nós filhos da div
var children = $A($("mydiv").childNodes);
// muda a classe para "highlighted" para todos os nós filhos
// de "mydiv"
children.each(function(child) {
child.setAttribute("class", "highlighted");
});
Além dela, existe o MochiKit, desenvolvido por Bob Ippolito, que implementa algumas coisas de python na sua biblioteca. Por exemplo, o MochiKit.Async é inspirado no twisted, e o MochiKit.Iter é inspirado no módulo itertools do python.
var d = getElementsByTagAndClassName('DIV', 'draggable');
forEach(d,
function(elem) {
connect(elem, 'onmousedown', Drag.start);
});
//função map
var arrayOne = [1, 2, 3, 4, 5];
var arrayTwo = [1, 5, 2, 4, 3];
var arrayThree = [5, 2, 1, 3, 4];
var biggestElements = map(objMax, arrayOne, arrayTwo, arrayThree);
assert( objEqual(biggestElements, [5, 5, 3, 4, 5]) );
Existem além dessas bibliotecas outras, que fazem JavaScript ser mais parecido com Java, por exemplo.
Apesar de todas as desvantagens de JavaScript, não tem como fugir dele - é a única alternativa 100% suportada para programação client-side na web. E como ele suporta closures, funções de primeira classe e funções anônimas, é razoavelmente fácil torná-lo mais fácil de digerir. Poucas linguagens são estensíveis dessa maneira.
(Brendan Eich está preparando algumas coisas mais pythônicas para as próximas versões de JavaScript. Veja mais em: http://weblogs.mozillazine.org/roadmap/archives/2006/02/js_and_python_news.html )
Subscribe: 



