30 de dez. de 2012

O que é que o Java não tem?

Recentemente apresentei uma palestra no Ti no Vale que aborda sobre alguns recursos que várias linguagens de programação, modernas e muito antigas, possui, mas que a linguagem Java não implementa.

 

22 de dez. de 2012

Javascript: as partes boas

A pouco tempo terminei de ler o livro Javascript: The Good Parts, escrito pelo Douglas Crockford e lançado em 2008. O livro é excelente e tenta colocar um ponto final na discussão sobre Javascript ser uma linguagem ruim, mas sem tentar esconder os pontos negativos da linguagem.

O autor passa por vários aspectos da linguagem como: sintaxe, objetos, arrays, regex e sobre organização de código. Mas os tópicos mais interessantes do livro, com certeza são os que abordam funções, herança e os apêndices que abordam as partes ruins do Javascript e como evitá-las.

No capítulo sobre funções ele aborda assuntos importantes no dia-a-dia de quem usa muito javascript como escopo de função, Closure, callbacks. Esses assuntos podem trazer alguma confusão quando o background do programador é de linguagens que não suportam tals features, especialmente Closure e callbacks. Funções como cidadões de primeira classe (ou de primeira ordem), apesar de ser algo comum em várias linguagens modernas, como Python e Ruby, não é suportado por linguagens como Pascal e Java que são largamente usadas em faculdades e escolas técnicas. O que pode causar estranheza em grande parte dos programadores ao ver um código Javascript que use isso.

Outra caracteristica pouco compreedida por alguns e muito bem explicada pelo Crockford no livro, é o conceito de herança em Javascript, que usa Herança por protótipo. Na Herança por protótipo, basicamente, objetos herdam diretamente de outros objetos. Não existe o conceito de classes.

A primeira linguagem que implementou herança por protótipo, foi a linguagem Self. Outras linguagens, como Lua e Io, também usam esse esquema de herança. O entendimento de herança as vezes é camuflado em uma sintaxe que lembra o conceito clássico de orientação a objetos. No livro são mostradas várias formas de se fazer herança em Javascript.

Já nos apêndices do livro, Crockford aborda como evitar as partes ruins do Javascript. Um dos exemplos que é mais simples é o uso do operador '==', que pode causar muita confusão e difucultar na hora de debugar algum código. Por exemplo:
'' == '0'          // false
0 == ''            // true
0 == '0'           // true
false == 'false'   // false
false == '0'       // true
false == undefined // false
false == null      // false
null == undefined  // true
' \t\r\n ' == 0    // true
Usando o operador '===' todos os resultados acima resultariam false.
'' === '0'          // false
0 === ''            // false
0 === '0'           // false
false === 'false'   // false
false === '0'       // false
false === undefined // false
false === null      // false
null === undefined  // false
' \t\r\n ' === 0    // false
O Livro, apesar de pequeno, 172 páginas, contém bastante conteúdo e é uma ótima referência para quem deseja se aprofundar em Javascript. Recomendo.