O JavaScript é muito dinâmico hoje em dia, mas ainda vejo muito código legado, seja para otimizar a compatibilidade com versões anteriores ou simplesmente porque o código não foi mantido. Uma das práticas que me deixa encolhido é a codificação que cria efeitos colaterais indesejados. O que é um efeito colateral? Um trecho de código em que uma variável é criada e está disponível em um escopo quando não precisa estar. Vou mostrar aos senhores alguns exemplos e como evitar esses efeitos colaterais indesejados.
Array.prototype.forEach() em vez de for(var x = ...)
O looping em uma matriz JavaScript era tradicionalmente feito por meio de um for() loop:
var myArray = [1, 2, 3];
for(var x=0, length = myArray.length; x < length; x++) {
// ...
}
// "x" and "length" are side effects
O efeito colateral desse padrão é, no mínimo, o índice de execução, se não o comprimento também – eles estão disponíveis em todo o escopo. Array métodos de protótipo como map, forEach, e every permitem que o desenvolvedor evite esses efeitos colaterais:
[1, 2, 3].forEach(function(item, index, array) {
// No side effects! :)
});
Nenhuma variável “utilitária” precisa ser criada para o looping, evitando assim efeitos colaterais. Isso é chamado de programação “funcional”.
Funções autoexecutáveis
Se o senhor não leu Escondendo suas informações pessoais com JavaScripte o senhor não sabe como manter variáveis privadas em JavaScript, reserve alguns minutos para lê-lo. O mesmo padrão fornecido nessa publicação permite que o senhor evite efeitos colaterais por meio de funções autoexecutáveis:
// Example from MooTools source...
Browser.Request = (function(){
var XMLHTTP = function(){
return new XMLHttpRequest();
};
var MSXML2 = function(){
return new ActiveXObject('MSXML2.XMLHTTP');
};
var MSXML = function(){
return new ActiveXObject('Microsoft.XMLHTTP');
};
return Function.attempt(function(){
XMLHTTP();
return XMLHTTP;
}, function(){
MSXML2();
return MSXML2;
}, function(){
MSXML();
return MSXML;
});
})();
// The three vars are stuck in the self-executing function, they don't "leak" out
A essência é que o senhor pode fazer um monte de processamento dentro da função autoexecutável (um novo escopo) sem permitir o vazamento de variáveis – o único item retornado ou vazado é o valor de retorno desejado.
O aprimoramento do seu código inclui evitar efeitos colaterais, e o JavaScript facilita isso se o senhor seguir essas práticas básicas!