BT

Facebook Flow fornece uma verificação estática de tipos para JavaScript

| por Abel Avram Seguir 10 Seguidores , traduzido por Paulo Silva Seguir 0 Seguidores em 10 fev 2015. Tempo estimado de leitura: 4 minutos |

O Flow não quer forçar o desenvolvedor web a usar a camisa de força de tipos estáticos, realizando a maior parte de seu trabalho usando a inferência de tipos, sempre que possível e permite especificar quais arquivos JavaScript devem ser verificados e quais não. Quando desejado, os desenvolvedores podem utilizar a rigorosa verificação de tipo semelhante a verificação fornecida pelo TypeScript.

Quando o Flow foi projetado, o Facebook presupoe que a maioria dos códigos JavaScript existente já possuam alguma forma de "tipagem estática implícita" e considera que "mesmo que tipos não possam aparecer em qualquer parte do código, eles estão na mente do desenvolvedor como uma maneira de raciocinar sobre a correção do código", como explicado em um post no blog. Assim, o Facebook considera sua abordagem para verificações de tipo para JavaScript bastante diferente do TypeScript que faz "uma suposição mais fraca que a maior parte do código JavaScript é tipado de forma dinâmica, e que cabe ao desenvolvedor expressar o seu código de forma passível de tipagem estática." Como resultado, o Flow apontará o seguinte trecho de código como errado, sem a necessidade anotações de tipo explícitas:

  function onlyWorksOnNumbers(x) {
    return x * 10;
  }
  onlyWorksOnNumbers('Hello, world!');

Esta abordagem pode poupar uma grande quantidade de código necessária para grandes projetos. Em resumo, algumas das características do Flow são:

  • Tipos primitivos: Number, String e boolean, proibindo conversões implícitas entre eles
  • Os tipos estruturados associados a funções, objetos e matrizes;
  • Tipos polimórficos;
  • Suporta uma série de características do ECMAScript 6: desestruturação, classes, objetos estendidos, funções com parâmetros opcionais, Mapa, Set e Promise;
  • Suporta JSX e React.

O Flow sabe como lidar com null e undefined para se certificar de que eles não geram erros em tempo de execução. Por exemplo, este código gera um erro:

  function length(x) {
    return x.length;
  }

  var total = length('Hello') + length(null);

Enquanto este não gera:

  function length(x) {
    if (x !== null) {
      return x.length;
    } else {
      return 0;
    }
  }

  var total = length('Hello') + length(null);

O Flow está ciente de módulos para Node.js, sendo escalável através da execução no servidor e propagando o trabalho dos módulos entre vários servidores. Podendo exigir anotações para os tipos que devem ser acessados a partir de outros módulos.

O Flow é mais uma ferramenta para verificação de tipos JavaScript na caixa de ferramentas do desenvolvedor web, juntamente com o TypeScript da Microsoft e AtScript do Google. Ambas as ferramentas, Flow e AtScript, tem uma sintaxe para tipos muito semelhante ao TypeScript, mas fornecem recursos extras não existente na ferramenta da Microsoft.

O TypeScript é atualmente um subconjunto de funcionalidades do ES6 e que como consta no roteiro de atualizações suportará a maioria, se não todas, as funcionalidades presentes na versão 2 do ES6. A tipagem opcional é suportado pelo TypeScript através de anotações, tipos genéricos, interfaces e modificadores de visibilidade.

O AtScript tem como meta o ES6 e também fornecer tipo, campo e anotações de metadados, além de fazer reflexão da API em tempo de execução através das anotações. Ele foi criado para ser compatível com ES5, e atualmente pode ser compilado para ES5 e Dart.

De acordo com Avik Chaudhuri, o Facebook optou por desenvolver o Flow em vez de usar TypeScript, pois melhora a escalabilidade para grandes bases de código e tem um melhor controle sobre o React. Eles conseguiram inferir mais tipos, mesmo para códigos-fonte que estão sem anotação e pelo motivo que o Flow sabe como lidar com nulo ou indefinido. Para uma comparação mais aprofundada das três tecnologias recomendamos a leitura do post no blog do Axel Rauschmayer "Tipagem estática em via Microsoft TypeScript, Facebook Flow e Google AtScript".

Pode-se questionar o porque de tantas diferentes soluções para verificação de tipos em JavaScript e o que devemos fazer sobre tudo isso. A boa notícia é que a Microsoft, Facebook e Google estão colaborando sobre estas soluções, de acordo com Jonathan Turner da Microsoft:

A equipe do TypeScript está trabalhando com as duas equipes, Flow e AtScript, para ajudar a garantir que os recursos que já foram criadas pela comunidade de JavaScript possa ser usado em toda essas ferramentas. Há muita coisa e estes projetos podem aprender uns com os outros, e estamos ansiosos para trabalhar juntos daqui para frente e criando as melhores ferramentas que podemos para a comunidade. No longo prazo, também estamos trabalhando para dobrar as melhores características destas ferramentas em ECMAScript, o padrão por trás JavaScript.

O Flow vem com binários para Linux e Mac OS X e o código-fonte está disponível no GitHub.

Avalie esse artigo

Relevância
Estilo/Redação

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

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT