Tag Archives: JavaScript

Meus livros favoritos sobre JavaScript

JavaScript é uma linguagem bonita. Dinâmica, com tipagem fraca e herança prototípica, é difícil de se entender e usar corretamente. É mais do que um brinquedo.

Já faz um tempo que eu estou com vontade de escrever sobre JavaScript. Resolvi falar um pouco sobre as duas melhores fontes que eu li até agora, além do Google obviamente.

São eles:

Um clássico. Ouvi falar muito sobre ele em vários cantos da Internet e decidi comprar quando foi citado em quase todas as palestras da trilha JavaScript do The Developer’s Conference 2011. É um livro muito bem estruturado, abordando todos os aspectos da linguagem “pura” (sem trabalhar com APIs, bibliotecas, etc). Fala muito sobre a sintaxe e apresenta a idéia das bad parts da linguagem, ou seja, daquelas features que mais prejudicam do que ajudam.

Entretanto, é um livro bastante denso e dificilmente se entende tudo o que ele está falando numa primeira leitura. Cheguei a ler alguns capítulos três vezes até começar a entender o que estava falando. Recomendo fortemente mexer com JavaScript enquanto lê o livro, além de aprofundar assuntos mais complicados, como expressões regulares e closures.

Ao final, fala sobre o JSON (JavaScript Object Notation), mostrando algumas de suas vantagens e apresentando o código de um parser seguro para ele, feito em JavaScript. É uma boa forma de ver se está entendendo a linguagem: tentando ler algum código.

Esse livro tem uma idéia bem diferente do anterior: Nele, o autor ensina a idéia básica por trás do desenvolvimento voltado a testes, apresentando a ferramenta JsTestDriver e mostrando vários usos simples. Depois, o livro começa.

Há vários capítulos explicando como as funções são implementadas pelos interpretadores, como funciona a prototype chain, enfim, o que acontece por trás do JavaScript. Muita atenção é dada para aplicações de closures (como memoização e a module pattern).

Depois, muito se fala sobre a herança de objetos – primeiro mostrando a quantidade de gambiarra necessária para se implementar “algo parecido com classes”, depois partindo para a belíssima forma de herança aproveitando-se natureza prototípica de JavaScript. E ele não acaba aí. Ainda tem capítulos falando sobre event delegation, feature detection e aplicações de Test-Driven Development, tendo um capítulo dedicado ao Node.js, por exemplo.

É um livro incrivelmente completo e que ajuda a cimentar os conhecimentos sobre JavaScript mostrando um número tremendo de exemplos e de soluções práticas que eu consigo ver uso imediato hoje em dia.

Também estou esperando para ler o Secrets of the JavaScript Ninja (John Resig, Bear Bibeault), que foi escrito pelo Resig, criador do jQuery. Diz-se que o livro “ensina você a escrever sua própria biblioteca JavaScript”. Espero ansioso.

Atenção ao usar Array.prototype.reduce

Estava trabalhando na avaliadora de times do Mojambo (typeCalc) e comecei a usar bastante map(), reduce() e afins para simplificar o código.

Depois de uns testes, cheguei a um problema que levei uns minutos para entender e corrigir, mas que me parece bastante fácil de cometer. Primeiro, a sintaxe do método Array.prototype.reduce é:

Tem mais dois parâmetros no callback (índice do elemento e o array sendo percorrido), mas não são necessários agora. O valor de acumulador é, inicialmente, initialValue. A ideia é utilizar reduce() para calcular um valor a partir de todos os elementos do array.

O que eu estava fazendo envolvia um callback assim:

O problema é que o valor do acumulador é o valor retornado pela última iteração, então ele inicia em initialValue, processa o primeiro elemento e se torna undefined. A solução é simplória:

Fiquei tão bravo por ter deixado isso passar que julguei necessário colocar um post na Internet a respeito. Espero ajudar alguém.