Javascript como linguagem de primeira classe

Qual é a principal linguagem que você usa no seu projeto? Se você desenvolve projetos web, é muito provável que a resposta seja Ruby, Java, PHP, Go. Esses são exemplos de linguagens de primeira classe, não por ser Ruby ou Java, mas pela maneira como devs as tratam.

Se você escreve código Java, é bem provável que seu código seja testado, que a equipe tenha métricas e que o código seja bem organizado dentro de packages, modules, libs ou qualquer outra maneira. Mas e quanto aos scripts JavaScript? Fica tudo dentro de um arquivo só? Todos jogados dentro de uma mesma pasta? E testes?

Por que tratar JavaScript assim?

Mais uma vez, se você desenvolve projetos web, as chances de que você utilize JavaScript são grandes. Dando uma rápida olhada no GitHub, podemos notar que JavaScript é de longe a linguagem que está mais presentes nos repositórios (https://github.com/languages) e a tendência é crescer.

Independente de qual linguagem ou framework (claro que com algumas exceções), JavaScript desempenha um papel muito importante no projeto, desde o bom e velho JQuery até Backbone, Angular ou Node.

Muito da “usabilidade” do projeto, ou até mesmo funcionalidades, dependem extremamente do JavaScript. E como todo código escrito, o código JavaScript também precisa ser mantido. Então por que não facilitar a manutenção do código JavaScript?

Como tratar JavaScript como primeira classe?

Algumas formas de tratar JavaScript como uma linguagem de primeira classe já foram faladas brevemente neste post. Agora vou tomar emprestado as dicas do grande Fabio Pereira, vale a pena conferir o post e a apresentação dele em: http://fabiopereira.me/blog/2011/12/08/javascript-as-a-first-class-language/

Talvez o mais básico dos conselhos seja utilizar testes automatizados. Da mesma forma que ter uma boa suíte de testes automatizados ajuda na hora de manter e atualizar um código Ruby, os códigos JavaScript também podem se beneficiar bastante desta prática.

Ferramentas não faltam, mas alguns bons exemplos que já utilizei/utilizo Jasmine, JSTestDriver e Sinon.js. Vale a pena conferir as páginas de cada um dos projetos e entender um pouco de cada um e como eles podem ajudar.

Outra dica legal é modularizar o código. Uma boa maneira de agrupar códigos ou funções que não possuem um “objeto” é adicionar namespace nos seus script. Por exemplo, ao invés de jogar uma função em um arquivo js e incluir ele diretamente nas páginas você pode adicioná-las no “objeto” JQuery, por exemplo:

onlyNumbersFilter = function(){ ... }
$.filters.onlyNumbers = function(){ ... }

Outra ideia e dividir os scripts dentro das pastas e transformá-los em “módulos”. Dessa maneira você pode agrupar módulos parecidos na mesma pasta e dar uma ordem lógica aos seus JavaScripts. Uma ferramenta legal para isso é o Require.js que facilita a inclusão de módulos e é bem utilizado por quem desenvolve com Node.JS.

Por fim, uma outra boa ideia para garantir um mínimo comum de legibilidade e qualidade do código, e facilitar a chegada de novos devs, é utilizar uma ferramenta para análise sintática do código. Essas ferramentas validam desde ponto e vírgulas no final das instruções (e outras convenções de código) até possíveis erros no código. Um bom exemplo de ferramenta é o JSHint que pode ser personalizado de acordo com as necessidades da equipe.