JAVASCRIPT: A LINGUAGEM MAIS INCOMPREENDIDA

JAVASCRIPT: A LINGUAGEM MAIS INCOMPREENDIDA

JavaScript é, por necessidade, uma das linguagens de programação da Web mais amplamente utilizadas. Em contraste, suas bases e princípios mais fundamentais não são compreendidos pela maioria dos desenvolvedores que acreditam conhecer a linguagem bastante bem. Para saber como surgiu essa situação, devemos conhecer sua evolução ao longo da curta história da Web:

Foi em 1995 quando Brendan Eich foi contratado para desenvolver uma linguagem de script para a versão 2.0 do anteriormente famoso “Netscape Navigator”. A Netscape recentemente adicionou suporte para a tecnologia Java da Sun, então eles pediram a Brendan para desenvolver uma linguagem que fosse como o irmão pateta do Java e o JavaScript nasceu, como uma linguagem tão simples que até mesmo os hobbistas poderiam usá-la. A propósito, se você não quer soar como um amador, nunca cometa o erro clássico de se referir ao JavaScript como Java. A Microsoft teve que incorporar essa nova linguagem de script ao Internet Explorer para ser competitiva na corrida da tecnologia da web.

Mas o tempo passou, a Netscape perdeu a guerra dos navegadores com a Microsoft e seus desenvolvedores liderados por Brendan, formaram a fundação Mozilla que atualmente organiza o desenvolvimento das seguintes versões do JavaScript. É por isso que o seu navegador, Firefox, é o que melhor oferece suporte aos novos recursos de idioma.

Programadores e o JavaScript

Nesse ponto, surgem muitos programadores que, baseados em bibliotecas desenvolvidas por outros, podem fingir que conhecem JavaScript, até que sejam solicitados a desenvolver algo fora do que a biblioteca ou os plug-ins que podem encontrar permitem. Plugins que muitas vezes são desenvolvidos por pessoas que também não entendem muito bem a linguagem, então podemos encontrar bugs sérios, como vazamentos de memória que fazem o computador travar ao deixar a página aberta por um tempo.

Quando o JavaScript é usado no servidor, com o não tão recente Node.js, a situação é muito pior, em um ambiente onde quase todas as chamadas são assíncronas, onde muito mais código precisa ser implementado e os desenvolvedores não entendem a linguagem, uma quantidade de espaguete, repetição e erros é gerada no código que torna esses tipos de projetos impossíveis de manter.

O problema com esses desenvolvedores é que eles aprenderam a usar a linguagem anos atrás e mesmo com livros e tutoriais desatualizados, saindo com a falsa sensação de que já dominavam a linguagem para sempre, mas essa não é a realidade. JavaScript, como todas as outras tecnologias na Web, é uma linguagem que nunca é totalmente compreendida porque está em constante evolução, e aqueles que não têm a capacidade de ser autodidata não podem segui-la. Muitos dos desenvolvedores que aprenderam com a documentação das primeiras versões do JavaScript, quando o JavaScript era uma linguagem fácil, não perceberam como ele evoluiu para um tipo de linguagem orientada a objetos diferente de qualquer outra.

Conceitos básicos como encerramentos, herança prototípica, interpretando o contexto disso de acordo com a chamada ou simplesmente entendendo qual é o escopo de uma variável, são conceitos que muitos programadores soam como chineses ou não sabem que devem ser entendidos de uma forma diferente em JavaScript. Essas diferentes características que o JavaScript atual possui em relação a outras linguagens, é o que o torna uma das linguagens mais difíceis de aprender.

function foo1(){
this.var1 = 2;
this.var2 = 3;
var4 = 10;
var var5 = 11;
}

function foo2(){
this.var1 = 0;
this.var4 = 7;
}

var obja = new foo2();
foo2.prototype.var3 = 5;
foo2.prototype = new foo1();
foo2.prototype.var3 = 6;
var objb = new foo2();
var objc = new foo2();
objb.var4 = 8;

console.log(“obja.var3: ” + obja.var3);
console.log(“obja.var2: ” + obja.var2);
console.log(“objb.var3: ” + objb.var3);
console.log(“objb.var1: ” + objb.var1);
console.log(“objb[‘var4’]: ” + objb[‘var4’]);
console.log(“objb.var2: ” + objb.var2);
obja.var1 = 10;
obja.constructor.prototype.var2 = 9;
console.log(“objc.var1: ” + objc.var1);
console.log(“objc.var2: ” + objc.var2);
console.log(“var4: ” + var4);
console.log(“(typeof var5): ” + (typeof var5));

var var6 = ‘!’;
var foo3 = function(var7){
console.log(“(typeof var6) +’ ‘+ var4: ” + (typeof var6) + ‘ ‘ + var4);
var var6 = ‘hola’;
this.var6 = ‘adios’;
return function(var7){
var var8 = {};
var8.a = 12;
var var9 = 14;

this.show = function(){
console.log( ‘var6 + var7: ‘ + var6 + var7 );
};
this.getVar8 = function(){
return var8;
};
this.getVar9 = function(){
return var9;
};

};
}();
foo3.var6 = ‘adios’;

var objd = new foo3(‘ mundo’);
objd.show();
var aux = objd.getVar8();
aux[‘a’] = 13
aux = objd.getVar9();
aux = 15;
console.log(‘objd.getVar8().a ‘+objd.getVar8().a);
console.log(‘objd.getVar9() ‘+objd.getVar9());
foo4.apply(obja);
console.log(var6);

function foo4(){
console.log(‘this.var1: ‘ + this.var1);
}

Todos podem aprender

Quando falamos em código cliente em um navegador, esse desconhecimento vai além da linguagem e dos métodos definidos no ECMAScript, chegando aos objetos DOM e BOM que o navegador fornece à linguagem. Por exemplo, não é incomum encontrar programadores que nunca ouviram falar do bubbling ou captura de evento definido no DOM Nível 2 (a especificação mais recente é 3 e 4 está em desenvolvimento) e não vamos falar sobre novas extensões e APIs definidas. pelo WHATWG na especificação HTML5, como Web workers, Web Sockets ou Web storage.

Se formos aos conceitos avançados da língua, o que acontece com 99% dos desenvolvedores, não é que soe como chinês, mas sim como a língua do céu, que é o que os chineses dizem quando querem dizer que algo lhes soa familiar. para o chinês. Refiro-me a conceitos como padrões de programação (por exemplo currying ou memoização), saber como medir o desempenho e como otimizar o código, saber quais partes não devem ser usadas (que foram mantidas para compatibilidade com versões anteriores), compreender o complexidade ciclomática, sabendo como usar ferramentas para medir a qualidade do código, ferramentas para realizar testes de unidade, etc.

Autor: Filipe Lúcio de Andrade Sá Pessoa

CATEGORIES

COMMENTS