BT

ECMAScript 5: Novidades no JavaScript e o futuro da linguagem

por Jonathan Allen , traduzido por Rodrigo Urubatan em 18 Abr 2011 |

[Ed.: Esta notícia foi adaptada pelo tradutor]

No evento MIX11 realizado na semana passada, Doug Crockford, um dos maiores especialistas em JavaScript da atualidade, destacou que embora o ECMAScript 5 tenha sido lançado no final de 2009, apenas recentemente começou a ser suportado pelos browsers. Na sua apresentação, que serviu de base para esta notícia, Crockford detalhou as principais inovações da versão 5.

O ECMAScript 5 é, na verdade, composto de duas linguagens, ES5/Default e ES5/Strict. As próximas versões serão criadas sobre o ES5/Strict e é recomendável evitar a utilização do ES5/Default.

Um grande esforço foi realizado para que o padrão correspondesse à realidade do mercado. Nos casos em que a maioria dos browsers estava em conflito com o padrão, o próprio padrão foi alterado.

Objetivos

Os principais objetivos do novo ECMAScript são:

  • Não quebrar a web
  • Melhorar a linguagem para os usuários da linguagem (programadores)
  • Aumentar Segurança para terceiros (mashups)
  • Evitar mudanças de sintaxe

Os objetivos não foram todos atingidos, mas se chegou perto. O maior problema foi a introdução de novos elementos de sintaxe que, se forem utilizados, podem causar problemas em browsers mais antigos. As alterações de sintaxe incluem:

  • A inclusão de uma vírgula no final da definição inline de um objeto não cria mais um elemento adicional no array resultante
  • Palavras reservadas podem ser utilizadas como nomes de propriedades de objetos
  • Na sintaxe para propriedades, métodos de escrita e de leitura agora são suportados nas chamadas "propriedades de acesso"
  • Literais destrings com múltiplas linhas

Sintaxe de propriedades

No ECMAScript 5 existem dois tipos de propriedades: de dados e de acesso. Uma propriedade de dados é analoga a um campo ou variavel de instância em outras linguagens orientadas a objetos. Já as de acesso são como as propriedades do .NET.

Além de um valor, propriedades de acesso têm diversas características:

  • writable: Quando configurado para false, o valor da propriedade não pode mais ser alterado
  • enumerable: Se alterado para false, a propriedade não pode mais ser listada em laços "for-in"
  • configurable: Se configurado como false a propriedade não pode mais ser alterada ou removida
  • get/set: Métodos de leitura e escrita da propriedade

Para configurar todas as propriedades de um objeto, é possível chamar os métodos preventExtensions, seal, ou freezepara "selar" o objeto.

Novos métodos

A maior parte das funcionalidades adicionadas nesta versão veio em forma de funções. Existe uma tabela de compatibilidade ECMAScript 5 com uma lista de novas funções e o estado atual de suporte nos diversos browsers. Alguns dos destaques incluem:

  • Métodos para examinar e controlar os metadados de um objeto, inclusive para torná-lo imutável e não extensível
  • Métodos para acessar arrays utilizando um estilo mais funcional, incluindo map, filter, reduce, e forEarch
  • Representação padronizada para datas em forma de texto. O formato escolhido é uma simplificação do padrão ISO 8601.
  • Funções para converter objetos de e para JSON. Estes métodos deverão ter desempenho muito maior que os disponibilizados por bibliotecas em uso atualmente.

Modo estrito

O modo estrito (strict) foi criado para prevenir muitos dos problemas causados pelas más decisões no design da linguagem no passado. De forma semelhante ao que acontece com "Option Explicit" no Visual Basic, os desenvolvedores são encorajados a utilizar este modo sempre que possível. Utilizar o modo estrito é fácil, basta adicionar no início de um arquivo ou de uma função o comando 'use strict',

É recomendado definir este modo em funções e não no arquivo inteiro, para evitar problemas com a concatenação de arquivos feita por otimizadores de JavaScript. Quando isto acontece, um arquivo pode ser alterado por engano para o modo estrito, mesmo que o código nele não seja compatível.

Algumas mudanças necessárias para a utilização do modo estrito são:

  • Novas palavras reservadas: implements, interface, let, package, private, protected, public, static, e yield. Elas ainda não estão em uso, mas podem vir a ser no ECMAScript 6.
  • Não há mais variáveis globais implícitas dentro de funções
  • A variável implícita this deixou de apontar para o objeto global. Dessa forma, agora é preciso escrever "window.addEventListener" em vez de apenas "addEventListener".
  • Da forma similar, as operações "apply" e "all" não serão executadas por padrão sobre o objeto global
  • Remoção da declaração "with". O argumento para a mudança é frequente causa de problemas de desempenho, além de não existir forma segura de utilizar esta construção. E a remoção das variáveis globais implícitas elimina a maior parte dos motivos para a existencia do "with".
  • A tentativa de escrever em uma propriedade "writeable:false" vai gerar uma exceção em vez de falhar silenciosamente. O mesmo acontece ao se tentar apagar uma propriedade "configurable:false".
  • "eval" é executado em um escopo restrito
  • a variável implicita "arguments" não aponta mais para os parâmetros de uma função, o que vai permitir melhoras de desempenho no futuro
  • arguments.caller e arguments.callee foram removidos
  • Números não podem mais ser representados utilizando a notação octal (o recurso foi considerado desnecessário).
  • Nomes duplicados na declaração de um objeto ou em parâmetros de uma função são considerados como erro de sintaxe
  • Esquecer de utilizar "new" gera uma exceção e não chama um método no objeto global

É altamente recomendada a utilização do JSLint para verificar estaticamente o código e procurar por violações do modo estrito. Isto reduz muito a possiblidade de problemas.

Preocupações políticas e tecnológicas

Mesmo tendo o ECMA um bom relacionamento com os desenvolvedores de browsers, existe um distanciamento entre o órgão e o W3C. Poucas reuniões ocorreram entre as duas organizações e as que aconteceram resultaram em pouco além de planos para agendar outra reunião. Esta falta de cooperação tem evitado que se chegue a uma solução definitiva para certos problemas, como a necessidade de concatenar arquivos JavaScript e o efeito disso no modo estrito, por exemplo.

Além disso, a especificação de JSON (que é definida pelo W3C) esta congelada, então adicionar uma nova forma de declarar datas que seja suportada por ela vai criar a necessidade de um novo formato.

Próximas versões

Nada está confirmado, mas em cerca de dois anos poderemos ver uma sintaxe mais limpa e mais expressiva no ECMAScript, com recursos como tail recursion, módulos e namespaces, bem como proxies para propriedades inexistentes. Este é apenas o início e existe a preocupação constante de não adicionar recursos demais de uma vez. Foi isso que causou o abandono do ECMAScript 4.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT