SlideShare uma empresa Scribd logo
1 de 10
Desenvolvimento de aplicações web em Dart
Roger Ritter1, Artur Nunes2
1Instituto de Ciências Exatas e Geociências – Universidade de Passo Fundo (UPF)
Caixa Postal 611 – 99.052-900 – Passo Fundo – RS – Brasil
rogerritter@upf.br, artur.schiehl@gmail.com
Abstract. Through the desire to eliminate some problems and ballast legacy of
the JavaScript language arose Dart, Google's alternative to JavaScript. Due
to the emergence of this new language of the search giant, curiosity leads us
to better understand how it works and its application revealing its inception,
objectives and structure.
Resumo. Através do desejo de eliminar alguns problemas e o lastro legado da
linguagem JavaScript surgiu o Dart, uma alternativa do Google ao
JavaScript. Devido ao surgimento desta nova linguagem da gigante de
buscas, a curiosidade nos leva a conhecer melhor como é seu funcionamento
e a sua aplicação revelando seu surgimento, objetivos e sua estrutura.
1. Introdução
Mark S. Miller¹ em outubro de 2010 apresentava através de uma lista de e-mail interna
na Google Inc. uma alternativa ao JavaScript denominada inicialmente de ‘Dash’. Um
ano após reformulações era apresentada na conferência de GOTO na Universidade de
Aarhus, em Aarhus, Dinamarca, a linguagem ‘Dart’ ou ‘Dartlang’ (Dart Language) por
Gilad Bracha² e Lars Bak³.
Segundo Schürmann (2012) o código escrito na linguagem de programação Dart
do Google se parece muito com uma mistura de JavaScript e Java com uma pitada de
Scala. Essa semelhança é intencional: a linguagem de programação foi projetada com
base no desejo de eliminar alguns problemas e o lastro legado do JavaScript. A premissa
é que os programas Dart possam ser executados mais rapidamente e com melhor
segurança, que trabalhem em qualquer dispositivo compatível com Internet e que sejam
adequados para projetos ainda maiores no qual mostrem o objetivo desta nova
linguagem para o grupo.
Existe disponível no site oficial da linguagem Dart [DARTLANG, 2013] a
documentação oficial, ressaltando que quando este artigo foi escrito a versão mais
recente da documentação era a versão 0.42.
_________________________
¹Mark S. Miller: Americano, projetista da linguagem Caja, atualmente trabalhando na Google Inc. como
cientista de pesquisas e membro do comitê ECMAScript (JavaScript)
²Gilad Bracha: É criador da linguagem Newspeak e engenheiro de software do Google Inc. pesquisador
na área de linguagens de programação orientadas a objeto.
²Lars Bak: Dinamarquês, é um veterano em máquinas virtuais orientadas a objetos, atualmente
trabalhando na Google Inc. onde contribuí com o navegador Chrome através do motor de JavaScript V8.
No site oficial do Dart é possível obter exemplos de funcionamento e tutoriais
para quem quiser se aventurar com esta promissora linguagem.
Com duas formas que fazer uma aplicação entrar em funcionamento, a
linguagem pode ser compilada através de um gerador de código JavaScript ou rodar em
uma máquina virtual com suporte a Dart, como pode ser visto no Esquemático 1.
Esquemático 1. Execução do Dart.
Tiobe (2013) destaca que a linguagem JavaScript é geralmente considerado
como uma linguagem de programação no qual é fácil cometer erros. A linguagem
JavaScript é interpretado, por isso, a maioria dos erros aparecem apenas em tempo de
execução. Destaca também que por estes fatores o Google Inc. está projetando o Dart,
que ocupa atualmente a posição 80 em seu ranking (figura 1), como sucessor do
JavaScript. Mas também outras linguagens de programação foram projetadas para gerar
o código JavaScript em vez de escrevê-lo manualmente. Exemplos disso são
CoffeeScript, atualmente ocupando a posição 139 em seu ranking.
Figura 1. Indicador de popularidade das linguagens de programação, segundo a Tiobe.
2. Objetivo do Dart
Schürmann (2012) destaca que Dart é, sobretudo, um substituto adequado do PHP, pois
além da máquina virtual, o projeto oferece um par de bibliotecas cujas funções
oferecem suporte à manipulação conveniente da árvore de um site DOM (Document
Object Model ou Modelo de Objeto de Documentos).
Segundo Miller (2010) JavaScript possui deficiências que não podem ser fixadas
na evolução da linguagem. Adotando uma estratégia em duas partes para o futuro do
JavaScript:
- Harmônico (de baixo risco): Visando continuar a trabalhar em conjunto para
evoluir o JavaScript.
- Dash (de alto risco): Desenvolver uma nova linguagem, visando manter a
dinâmica do JavaScript, com uma melhora no desempenho e passível de ferramentas
para grandes projetos.
Miller (2010) descreveu o principal objetivo do Dart, desde o seu nascimento, é
substituir JavaScript como a linguagem principal embutida nos navegadores com a
preponderância de eliminar alguns problemas e o lastro legado do JavaScript,
procurando manter as peças que fizeram a internet ser bem sucedida, mas preencher
lacunas que todos concordam que ele tem.
3. Trabalhando com Dart
Segundo Dartlang (2013), Dart foi projetado para o fácil desenvolvimento de
aplicativos modernos e capazes de implementação de alto desempenho para web. Por
ser uma linguagem de tipagem opcional, mesmo que haja um tipo de objeto definido, o
mesmo pode ser violado sem que seja interrompida a execução. São organizados de
forma modular em unidade chamadas de bibliotecas, responsáveis pelo encapsulamento
que podem ser mutuamente recursiva.
Dart foi mesclando com vários facilitadores, como por exemplo, o seu editor
fortemente baseado no Eclipse (figura 2), versão em linhas no qual usuários podem
abreviar uma definição de função individual, classes, serviços de contêiner, paralelismo
e acesso DOM.
Schürmann (2012) destaca que Dart está em um estágio muito inicial de
desenvolvimento e, portanto, não é adequado para uso em produção. Inventores do Dart
intencionalmente lançaram a sua especificação em um estágio inicial para coletar tantas
sugestões de melhorias quanto fosse possível, bem como para melhorar a aceitação. É
também precisamente por isso que a especificação da linguagem tem sido colocada sob
a licença Creative Commons Atribution 3.0 e o código do programa publicado pelo
projeto sob a licença BSD Google [GOOGLE, 2013].
Dart ainda dispõem de um ambiente online, denominado Dartboard,
[DARTBOARD, 2013] para que desenvolvedores testem, conheçam e explorem a nova
linguagem.
Figura 2. Ambiente de Trabalho do Dart, fortemente baseado no Eclipse.
Segundo Dartlang (2013) o Dart pode haver três tipos de erros que são tratáveis:
- Erros de Compilação: Devido a sua falta de tratamento, param a execução e a
compilação do programa;
- Avisos Estáticos: Encontrados em tempo de execução, porém não influenciam
na execução do programa, servem apenas para o aprimoramento do desenvolvimento do
código;
- Erros do tipo Dinâmico: Também encontrados em tempo de execução. Caso o
erro não seja tratado, a parte do código que o envolve é ignorada.
3.1. Tipos de Dados Suportados
Dart suporta os tipos de dados listados na figura 3 no qual são objetos internos.
É possível, em Dart, criar listas e mapas com um simples comando new,
conforme código 1.
Código 1. Criar uma nova lista.
As variáveis que ainda não tiveram um valor atribuído automaticamente têm o
valor especial null.
Figura 3. Tipos de dados suportados pelo Dart.
Como no PHP, o Dart pode inserir o conteúdo de variáveis em Strings:
Código 2. Variáveis em String.
Dentro das chaves {} pode até haver expressões completas ou chamadas de
função.
3.2. main()
O início de um programa é definido por main()como em Java (código 3), através das
classes e superclasses suportados pelo Dart podemos repetir menos escrita de código e
definir classes e métodos abstratos. Além disso Dart é uma linguagem orientada a
objetos em todos os sentidos e, como no JavaScript, as variáveis podem assumir valores
arbitrários a qualquer momento.
Código 3. A semelhança da linguagem com Java.
3.3. Clássico
O Dart herdou interfaces do Java. Quando uma classe implementa uma interface, ela
garante que a função especificada na interface seja fornecida. Logo uma classe pode
implementar várias interfaces, mas apenas herda exatamente uma classe (ou seja, usa
extends para estender a classe). Se o nome da variável ou uma função começa com um
sublinhado ela é privada, e só é possível acessar a variável ou função dentro da própria
classe.
3.4. Serviço de Contêiner
O Dart contém os tipos genéricos, também conhecidos como generics, com os quais
provavelmente estamos familiarizados por causa do Java. Programadores C++ também
conhecem esse conceito como templates, no qual é possível usá-los para criar
rapidamente recipientes para objetos arbitrários, nas quais, as listas de funções
embutidas e mapas são genéricos.
Por exemplo, List<Car> cria uma lista de objetos Carro, conforme código 4.
Código 4. Serviço de Contêiner em Dart.
3.5. Paralelismo
Programadores normalmente mudam as tarefas que precisam ser executadas em
processos paralelos separados e, em seguida, trabalham duro para unir os resultados
intermediários. O Dart remove as dores de cabeça desse processo: um objeto derivado
da classe Isolate básica, se assim se deseja, é executado separadamente do programa
principal em seu próprio processo.
Para ser capaz de trocar resultados intermediários, os Isolates podem enviar
mensagens uns para os outros. Esta mensagem é primeiramente enfileirada até que o
receptor Isolate pegue o que é conhecido como uma porta. Este modelo lembra muito o
modelo atual do Erlang ou Scala. O código 5 mostra um exemplo completo.
Código 5. Serviço de Contêiner em Dart.
4. Comparando com outras linguagens
A linguagem Dart nasceu para disputar diretamente com o JavaScript, mas sua
tecnologia também já está sendo utilizada em conjunto com outras tecnologias
emergentes como por exemplo o HTML5.
4.1. JavaScript
Tanto o JavaScript quanto o Dart podem ser descritos em arquivos separados do HTML,
para JavaScript utiliza-se a extensão .js e para Dart utiliza-se a extensão .dart.
Ambos arquivos podem ser incluídos no HTML utilizando o mesmo código, para
Dart utiliza-se <script type = “application/dart” scr=
”nomeArquivo.dart”></script> e para JavaScript utiliza-se <script type =
“text/javascript” scr=”nomeArquivo.js”></script>.
Como em JavaScript, todas as declarações de funções possuem uma assinatura e
um corpo descrevendo o que deve-se fazer, porém, na assinatura também é indicado o
tipo de dado que a mesma irá retornar.
Código 6. Funções.
No código 6, verifica-se, que Dart não precisa informar que é um function,
porém declara o tipo de retorno, seguindo o mesmo padrão para a passagem de
parâmetros. Entretanto, se for um evento ocorrido com o mouse, é obrigatório o
parâmetro MouseEvent, diferente do JavaScript que já declara o evento no próprio
objeto. No código 6, já existe este objeto com uma declaração onMouseOver, já no Dart,
há uma chamada no main que é responsável por chamar a função, como pode ser visto
no código 7.
Código 7. Chamada de eventos.
Seguindo o código 7, ainda é possível analisar que na tag div referenciada pelo id
com valor mouseOver, em Dart a declaração do evento onMouseOver se torna
desnecessário, pois a linguagem já irá identificar em que objeto a referência se encontra,
assim podendo ativar os eventos correspondentes, separando as informações de script
das informações de marcação do HTML.
4.2. HTML5
Diferente de JavaScript a linguagem Dart, não faz disputa diretamente com HTML5,
mas sim aproveita a tecnologia de apresentação de conteúdo para desenvolver o
denominado Dartflash e outras bibliotecas no grupo DartGameDevs,
[DARTGAMESDEVS, 2013], segundo o grupo, Dart expõe todas as APIs do HTML5
disponível no navegador, incluindo lona e WebGL, Web Audio API, Web Sockets, entre
outras. Com Dart você pode escrever jogos 2D e 3D, tanto para single-player e multi-
players.
Com Dart e HTML5 podemos através do Gerente de Recursos, por exemplo,
adicionar imagens para o gerenciador de recursos, marcar com um nome único cada
URL e quando o gerente de recursos terminar de carregar as imagens, obter um
BitmapData conforme na figura 4.
Figura 4. BitmapData.
O código 8 representa o exemplo do BitmapData resultando na figura 4.
Código 8. Gerente de Recursos.
O Gerente de recursos é somente um exemplo do que se consegue fazer
utilizando a nova tecnologia Dart com HTML5.
5. Instalação
Encontra-se no site oficial [DARTLANG, 2013], todo material necessário para que seja
possível realizar o download e criar seus códigos.
No pacote é trazido o ambiente de desenvolvimento baseado na IDE Eclipse,
onde foi adaptado para dar suporte ao Dart e as demais linguagens necessárias para seu
funcionamento, como HTML e CSS, por exemplo. O pacote compreende a máquina
virtual necessária para compilar programas, o Chromium e um conversos para
JavaScript integrado com a IDE de desenvolvimento.
6. Conclusão
Tudo sobre Dart soa bastante atraente através de sua proposta, porém a linguagem conta
com uma pequena desvantagem, Dart está em estágio inicial de desenvolvimento,
portanto não é adequado para uso em produção, por mais que já existam alguns
exemplos de aplicação.
No site está se formando uma comunidade com intuito de difundir, aprimorar e
relatar acontecimentos sobre a linguagem. Há muitas questões que já foram realizadas e
respondidas, muitas delas acabaram se tornando base para novas implementações.
Dart terá um longo caminho pela frente, até que os principais navegadores deem
suporte e conquiste os desenvolvedores que seus métodos e técnicas devem ser mais
favoráveis a grande comunidade de programadores.
7. Referências
SCHÜRMANN, T. (2012) “Bull's-eye”, In: Linux Magazine.
TIOBE, (2013) “Tiobe Index”,
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html <Acessado em
25.Jun.2013>
MILLER, S. M. (2010) “Future of Javascript”, In: MarkMail,
http://markmail.org/message/uro3jtoitlmq6x7t <Acessado em 25.Jun.2013>
DARTLANG, (2013) “Dart: Structured Web Apps”, http://www.dartlang.org/
<Acessado em 25.Jun.2013>
GOOGLE, (2013) “Google BSD License”, http://code.google.com/intl/de-
DE/google_bsd_license.html, <Acessado em 25.Jun.2013>
DARTBOARD, (2013) “Try Dart”, http://try.dartlang.org/, <Acessado em
25.Jun.2013>
DARTGAMESDEVS, (2013) “DartGameDevs”, http://dartgamedevs.org/, <Acessado
em 25.Jun.2013>
funcionamento, como HTML e CSS, por exemplo. O pacote compreende a máquina
virtual necessária para compilar programas, o Chromium e um conversos para
JavaScript integrado com a IDE de desenvolvimento.
6. Conclusão
Tudo sobre Dart soa bastante atraente através de sua proposta, porém a linguagem conta
com uma pequena desvantagem, Dart está em estágio inicial de desenvolvimento,
portanto não é adequado para uso em produção, por mais que já existam alguns
exemplos de aplicação.
No site está se formando uma comunidade com intuito de difundir, aprimorar e
relatar acontecimentos sobre a linguagem. Há muitas questões que já foram realizadas e
respondidas, muitas delas acabaram se tornando base para novas implementações.
Dart terá um longo caminho pela frente, até que os principais navegadores deem
suporte e conquiste os desenvolvedores que seus métodos e técnicas devem ser mais
favoráveis a grande comunidade de programadores.
7. Referências
SCHÜRMANN, T. (2012) “Bull's-eye”, In: Linux Magazine.
TIOBE, (2013) “Tiobe Index”,
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html <Acessado em
25.Jun.2013>
MILLER, S. M. (2010) “Future of Javascript”, In: MarkMail,
http://markmail.org/message/uro3jtoitlmq6x7t <Acessado em 25.Jun.2013>
DARTLANG, (2013) “Dart: Structured Web Apps”, http://www.dartlang.org/
<Acessado em 25.Jun.2013>
GOOGLE, (2013) “Google BSD License”, http://code.google.com/intl/de-
DE/google_bsd_license.html, <Acessado em 25.Jun.2013>
DARTBOARD, (2013) “Try Dart”, http://try.dartlang.org/, <Acessado em
25.Jun.2013>
DARTGAMESDEVS, (2013) “DartGameDevs”, http://dartgamedevs.org/, <Acessado
em 25.Jun.2013>

Mais conteúdo relacionado

Semelhante a Desenvolvimento de aplicações web em Dart

Apostila iniciacao programacao - scratch
Apostila iniciacao programacao - scratchApostila iniciacao programacao - scratch
Apostila iniciacao programacao - scratchValter Neto
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYLucas Furtado de Oliveira
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafaelhugodrocha
 
xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletDenis L Presciliano
 
Flutter - Erick Lima
Flutter - Erick LimaFlutter - Erick Lima
Flutter - Erick LimaErick Farias
 

Semelhante a Desenvolvimento de aplicações web em Dart (20)

Poo frank
Poo frankPoo frank
Poo frank
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Apostila iniciacao programacao - scratch
Apostila iniciacao programacao - scratchApostila iniciacao programacao - scratch
Apostila iniciacao programacao - scratch
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
apostila de dev.pdf
apostila de dev.pdfapostila de dev.pdf
apostila de dev.pdf
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
 
Apostila de devc++ novo
Apostila de devc++ novoApostila de devc++ novo
Apostila de devc++ novo
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Professor rogerio-apostila
Professor rogerio-apostilaProfessor rogerio-apostila
Professor rogerio-apostila
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafael
 
xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdoclet
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Flutter - Erick Lima
Flutter - Erick LimaFlutter - Erick Lima
Flutter - Erick Lima
 

Mais de Roger Ritter

Arquitetura Orientada a Serviços e BPM
Arquitetura Orientada a Serviços e BPMArquitetura Orientada a Serviços e BPM
Arquitetura Orientada a Serviços e BPMRoger Ritter
 
Teste de Software em Ti Interna
Teste de Software em Ti InternaTeste de Software em Ti Interna
Teste de Software em Ti InternaRoger Ritter
 
A importância dos testes não funcionais
A importância dos testes não funcionaisA importância dos testes não funcionais
A importância dos testes não funcionaisRoger Ritter
 
Técnicas de Inteligência Artificial em Jogos Eletrônicos
Técnicas de Inteligência Artificial em Jogos EletrônicosTécnicas de Inteligência Artificial em Jogos Eletrônicos
Técnicas de Inteligência Artificial em Jogos EletrônicosRoger Ritter
 
Técnicas de inteligência artificial em jogos eletrônicoss
Técnicas de inteligência artificial em jogos eletrônicossTécnicas de inteligência artificial em jogos eletrônicoss
Técnicas de inteligência artificial em jogos eletrônicossRoger Ritter
 
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress[Iniciante] - Testes Unitários com WP-UNIT no Wordpress
[Iniciante] - Testes Unitários com WP-UNIT no WordpressRoger Ritter
 

Mais de Roger Ritter (7)

Arquitetura Orientada a Serviços e BPM
Arquitetura Orientada a Serviços e BPMArquitetura Orientada a Serviços e BPM
Arquitetura Orientada a Serviços e BPM
 
Teste de Software em Ti Interna
Teste de Software em Ti InternaTeste de Software em Ti Interna
Teste de Software em Ti Interna
 
Planning Onion
Planning OnionPlanning Onion
Planning Onion
 
A importância dos testes não funcionais
A importância dos testes não funcionaisA importância dos testes não funcionais
A importância dos testes não funcionais
 
Técnicas de Inteligência Artificial em Jogos Eletrônicos
Técnicas de Inteligência Artificial em Jogos EletrônicosTécnicas de Inteligência Artificial em Jogos Eletrônicos
Técnicas de Inteligência Artificial em Jogos Eletrônicos
 
Técnicas de inteligência artificial em jogos eletrônicoss
Técnicas de inteligência artificial em jogos eletrônicossTécnicas de inteligência artificial em jogos eletrônicoss
Técnicas de inteligência artificial em jogos eletrônicoss
 
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress[Iniciante] - Testes Unitários com WP-UNIT no Wordpress
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress
 

Desenvolvimento de aplicações web em Dart

  • 1. Desenvolvimento de aplicações web em Dart Roger Ritter1, Artur Nunes2 1Instituto de Ciências Exatas e Geociências – Universidade de Passo Fundo (UPF) Caixa Postal 611 – 99.052-900 – Passo Fundo – RS – Brasil rogerritter@upf.br, artur.schiehl@gmail.com Abstract. Through the desire to eliminate some problems and ballast legacy of the JavaScript language arose Dart, Google's alternative to JavaScript. Due to the emergence of this new language of the search giant, curiosity leads us to better understand how it works and its application revealing its inception, objectives and structure. Resumo. Através do desejo de eliminar alguns problemas e o lastro legado da linguagem JavaScript surgiu o Dart, uma alternativa do Google ao JavaScript. Devido ao surgimento desta nova linguagem da gigante de buscas, a curiosidade nos leva a conhecer melhor como é seu funcionamento e a sua aplicação revelando seu surgimento, objetivos e sua estrutura. 1. Introdução Mark S. Miller¹ em outubro de 2010 apresentava através de uma lista de e-mail interna na Google Inc. uma alternativa ao JavaScript denominada inicialmente de ‘Dash’. Um ano após reformulações era apresentada na conferência de GOTO na Universidade de Aarhus, em Aarhus, Dinamarca, a linguagem ‘Dart’ ou ‘Dartlang’ (Dart Language) por Gilad Bracha² e Lars Bak³. Segundo Schürmann (2012) o código escrito na linguagem de programação Dart do Google se parece muito com uma mistura de JavaScript e Java com uma pitada de Scala. Essa semelhança é intencional: a linguagem de programação foi projetada com base no desejo de eliminar alguns problemas e o lastro legado do JavaScript. A premissa é que os programas Dart possam ser executados mais rapidamente e com melhor segurança, que trabalhem em qualquer dispositivo compatível com Internet e que sejam adequados para projetos ainda maiores no qual mostrem o objetivo desta nova linguagem para o grupo. Existe disponível no site oficial da linguagem Dart [DARTLANG, 2013] a documentação oficial, ressaltando que quando este artigo foi escrito a versão mais recente da documentação era a versão 0.42. _________________________ ¹Mark S. Miller: Americano, projetista da linguagem Caja, atualmente trabalhando na Google Inc. como cientista de pesquisas e membro do comitê ECMAScript (JavaScript) ²Gilad Bracha: É criador da linguagem Newspeak e engenheiro de software do Google Inc. pesquisador na área de linguagens de programação orientadas a objeto. ²Lars Bak: Dinamarquês, é um veterano em máquinas virtuais orientadas a objetos, atualmente trabalhando na Google Inc. onde contribuí com o navegador Chrome através do motor de JavaScript V8.
  • 2. No site oficial do Dart é possível obter exemplos de funcionamento e tutoriais para quem quiser se aventurar com esta promissora linguagem. Com duas formas que fazer uma aplicação entrar em funcionamento, a linguagem pode ser compilada através de um gerador de código JavaScript ou rodar em uma máquina virtual com suporte a Dart, como pode ser visto no Esquemático 1. Esquemático 1. Execução do Dart. Tiobe (2013) destaca que a linguagem JavaScript é geralmente considerado como uma linguagem de programação no qual é fácil cometer erros. A linguagem JavaScript é interpretado, por isso, a maioria dos erros aparecem apenas em tempo de execução. Destaca também que por estes fatores o Google Inc. está projetando o Dart, que ocupa atualmente a posição 80 em seu ranking (figura 1), como sucessor do JavaScript. Mas também outras linguagens de programação foram projetadas para gerar o código JavaScript em vez de escrevê-lo manualmente. Exemplos disso são CoffeeScript, atualmente ocupando a posição 139 em seu ranking. Figura 1. Indicador de popularidade das linguagens de programação, segundo a Tiobe.
  • 3. 2. Objetivo do Dart Schürmann (2012) destaca que Dart é, sobretudo, um substituto adequado do PHP, pois além da máquina virtual, o projeto oferece um par de bibliotecas cujas funções oferecem suporte à manipulação conveniente da árvore de um site DOM (Document Object Model ou Modelo de Objeto de Documentos). Segundo Miller (2010) JavaScript possui deficiências que não podem ser fixadas na evolução da linguagem. Adotando uma estratégia em duas partes para o futuro do JavaScript: - Harmônico (de baixo risco): Visando continuar a trabalhar em conjunto para evoluir o JavaScript. - Dash (de alto risco): Desenvolver uma nova linguagem, visando manter a dinâmica do JavaScript, com uma melhora no desempenho e passível de ferramentas para grandes projetos. Miller (2010) descreveu o principal objetivo do Dart, desde o seu nascimento, é substituir JavaScript como a linguagem principal embutida nos navegadores com a preponderância de eliminar alguns problemas e o lastro legado do JavaScript, procurando manter as peças que fizeram a internet ser bem sucedida, mas preencher lacunas que todos concordam que ele tem. 3. Trabalhando com Dart Segundo Dartlang (2013), Dart foi projetado para o fácil desenvolvimento de aplicativos modernos e capazes de implementação de alto desempenho para web. Por ser uma linguagem de tipagem opcional, mesmo que haja um tipo de objeto definido, o mesmo pode ser violado sem que seja interrompida a execução. São organizados de forma modular em unidade chamadas de bibliotecas, responsáveis pelo encapsulamento que podem ser mutuamente recursiva. Dart foi mesclando com vários facilitadores, como por exemplo, o seu editor fortemente baseado no Eclipse (figura 2), versão em linhas no qual usuários podem abreviar uma definição de função individual, classes, serviços de contêiner, paralelismo e acesso DOM. Schürmann (2012) destaca que Dart está em um estágio muito inicial de desenvolvimento e, portanto, não é adequado para uso em produção. Inventores do Dart intencionalmente lançaram a sua especificação em um estágio inicial para coletar tantas sugestões de melhorias quanto fosse possível, bem como para melhorar a aceitação. É também precisamente por isso que a especificação da linguagem tem sido colocada sob a licença Creative Commons Atribution 3.0 e o código do programa publicado pelo projeto sob a licença BSD Google [GOOGLE, 2013]. Dart ainda dispõem de um ambiente online, denominado Dartboard, [DARTBOARD, 2013] para que desenvolvedores testem, conheçam e explorem a nova linguagem.
  • 4. Figura 2. Ambiente de Trabalho do Dart, fortemente baseado no Eclipse. Segundo Dartlang (2013) o Dart pode haver três tipos de erros que são tratáveis: - Erros de Compilação: Devido a sua falta de tratamento, param a execução e a compilação do programa; - Avisos Estáticos: Encontrados em tempo de execução, porém não influenciam na execução do programa, servem apenas para o aprimoramento do desenvolvimento do código; - Erros do tipo Dinâmico: Também encontrados em tempo de execução. Caso o erro não seja tratado, a parte do código que o envolve é ignorada. 3.1. Tipos de Dados Suportados Dart suporta os tipos de dados listados na figura 3 no qual são objetos internos. É possível, em Dart, criar listas e mapas com um simples comando new, conforme código 1. Código 1. Criar uma nova lista. As variáveis que ainda não tiveram um valor atribuído automaticamente têm o valor especial null.
  • 5. Figura 3. Tipos de dados suportados pelo Dart. Como no PHP, o Dart pode inserir o conteúdo de variáveis em Strings: Código 2. Variáveis em String. Dentro das chaves {} pode até haver expressões completas ou chamadas de função. 3.2. main() O início de um programa é definido por main()como em Java (código 3), através das classes e superclasses suportados pelo Dart podemos repetir menos escrita de código e definir classes e métodos abstratos. Além disso Dart é uma linguagem orientada a objetos em todos os sentidos e, como no JavaScript, as variáveis podem assumir valores arbitrários a qualquer momento. Código 3. A semelhança da linguagem com Java. 3.3. Clássico O Dart herdou interfaces do Java. Quando uma classe implementa uma interface, ela garante que a função especificada na interface seja fornecida. Logo uma classe pode implementar várias interfaces, mas apenas herda exatamente uma classe (ou seja, usa extends para estender a classe). Se o nome da variável ou uma função começa com um sublinhado ela é privada, e só é possível acessar a variável ou função dentro da própria classe. 3.4. Serviço de Contêiner O Dart contém os tipos genéricos, também conhecidos como generics, com os quais provavelmente estamos familiarizados por causa do Java. Programadores C++ também conhecem esse conceito como templates, no qual é possível usá-los para criar
  • 6. rapidamente recipientes para objetos arbitrários, nas quais, as listas de funções embutidas e mapas são genéricos. Por exemplo, List<Car> cria uma lista de objetos Carro, conforme código 4. Código 4. Serviço de Contêiner em Dart. 3.5. Paralelismo Programadores normalmente mudam as tarefas que precisam ser executadas em processos paralelos separados e, em seguida, trabalham duro para unir os resultados intermediários. O Dart remove as dores de cabeça desse processo: um objeto derivado da classe Isolate básica, se assim se deseja, é executado separadamente do programa principal em seu próprio processo. Para ser capaz de trocar resultados intermediários, os Isolates podem enviar mensagens uns para os outros. Esta mensagem é primeiramente enfileirada até que o receptor Isolate pegue o que é conhecido como uma porta. Este modelo lembra muito o modelo atual do Erlang ou Scala. O código 5 mostra um exemplo completo. Código 5. Serviço de Contêiner em Dart. 4. Comparando com outras linguagens A linguagem Dart nasceu para disputar diretamente com o JavaScript, mas sua tecnologia também já está sendo utilizada em conjunto com outras tecnologias emergentes como por exemplo o HTML5.
  • 7. 4.1. JavaScript Tanto o JavaScript quanto o Dart podem ser descritos em arquivos separados do HTML, para JavaScript utiliza-se a extensão .js e para Dart utiliza-se a extensão .dart. Ambos arquivos podem ser incluídos no HTML utilizando o mesmo código, para Dart utiliza-se <script type = “application/dart” scr= ”nomeArquivo.dart”></script> e para JavaScript utiliza-se <script type = “text/javascript” scr=”nomeArquivo.js”></script>. Como em JavaScript, todas as declarações de funções possuem uma assinatura e um corpo descrevendo o que deve-se fazer, porém, na assinatura também é indicado o tipo de dado que a mesma irá retornar. Código 6. Funções. No código 6, verifica-se, que Dart não precisa informar que é um function, porém declara o tipo de retorno, seguindo o mesmo padrão para a passagem de parâmetros. Entretanto, se for um evento ocorrido com o mouse, é obrigatório o parâmetro MouseEvent, diferente do JavaScript que já declara o evento no próprio objeto. No código 6, já existe este objeto com uma declaração onMouseOver, já no Dart, há uma chamada no main que é responsável por chamar a função, como pode ser visto no código 7. Código 7. Chamada de eventos. Seguindo o código 7, ainda é possível analisar que na tag div referenciada pelo id com valor mouseOver, em Dart a declaração do evento onMouseOver se torna desnecessário, pois a linguagem já irá identificar em que objeto a referência se encontra, assim podendo ativar os eventos correspondentes, separando as informações de script das informações de marcação do HTML.
  • 8. 4.2. HTML5 Diferente de JavaScript a linguagem Dart, não faz disputa diretamente com HTML5, mas sim aproveita a tecnologia de apresentação de conteúdo para desenvolver o denominado Dartflash e outras bibliotecas no grupo DartGameDevs, [DARTGAMESDEVS, 2013], segundo o grupo, Dart expõe todas as APIs do HTML5 disponível no navegador, incluindo lona e WebGL, Web Audio API, Web Sockets, entre outras. Com Dart você pode escrever jogos 2D e 3D, tanto para single-player e multi- players. Com Dart e HTML5 podemos através do Gerente de Recursos, por exemplo, adicionar imagens para o gerenciador de recursos, marcar com um nome único cada URL e quando o gerente de recursos terminar de carregar as imagens, obter um BitmapData conforme na figura 4. Figura 4. BitmapData. O código 8 representa o exemplo do BitmapData resultando na figura 4. Código 8. Gerente de Recursos. O Gerente de recursos é somente um exemplo do que se consegue fazer utilizando a nova tecnologia Dart com HTML5. 5. Instalação Encontra-se no site oficial [DARTLANG, 2013], todo material necessário para que seja possível realizar o download e criar seus códigos. No pacote é trazido o ambiente de desenvolvimento baseado na IDE Eclipse, onde foi adaptado para dar suporte ao Dart e as demais linguagens necessárias para seu
  • 9. funcionamento, como HTML e CSS, por exemplo. O pacote compreende a máquina virtual necessária para compilar programas, o Chromium e um conversos para JavaScript integrado com a IDE de desenvolvimento. 6. Conclusão Tudo sobre Dart soa bastante atraente através de sua proposta, porém a linguagem conta com uma pequena desvantagem, Dart está em estágio inicial de desenvolvimento, portanto não é adequado para uso em produção, por mais que já existam alguns exemplos de aplicação. No site está se formando uma comunidade com intuito de difundir, aprimorar e relatar acontecimentos sobre a linguagem. Há muitas questões que já foram realizadas e respondidas, muitas delas acabaram se tornando base para novas implementações. Dart terá um longo caminho pela frente, até que os principais navegadores deem suporte e conquiste os desenvolvedores que seus métodos e técnicas devem ser mais favoráveis a grande comunidade de programadores. 7. Referências SCHÜRMANN, T. (2012) “Bull's-eye”, In: Linux Magazine. TIOBE, (2013) “Tiobe Index”, http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html <Acessado em 25.Jun.2013> MILLER, S. M. (2010) “Future of Javascript”, In: MarkMail, http://markmail.org/message/uro3jtoitlmq6x7t <Acessado em 25.Jun.2013> DARTLANG, (2013) “Dart: Structured Web Apps”, http://www.dartlang.org/ <Acessado em 25.Jun.2013> GOOGLE, (2013) “Google BSD License”, http://code.google.com/intl/de- DE/google_bsd_license.html, <Acessado em 25.Jun.2013> DARTBOARD, (2013) “Try Dart”, http://try.dartlang.org/, <Acessado em 25.Jun.2013> DARTGAMESDEVS, (2013) “DartGameDevs”, http://dartgamedevs.org/, <Acessado em 25.Jun.2013>
  • 10. funcionamento, como HTML e CSS, por exemplo. O pacote compreende a máquina virtual necessária para compilar programas, o Chromium e um conversos para JavaScript integrado com a IDE de desenvolvimento. 6. Conclusão Tudo sobre Dart soa bastante atraente através de sua proposta, porém a linguagem conta com uma pequena desvantagem, Dart está em estágio inicial de desenvolvimento, portanto não é adequado para uso em produção, por mais que já existam alguns exemplos de aplicação. No site está se formando uma comunidade com intuito de difundir, aprimorar e relatar acontecimentos sobre a linguagem. Há muitas questões que já foram realizadas e respondidas, muitas delas acabaram se tornando base para novas implementações. Dart terá um longo caminho pela frente, até que os principais navegadores deem suporte e conquiste os desenvolvedores que seus métodos e técnicas devem ser mais favoráveis a grande comunidade de programadores. 7. Referências SCHÜRMANN, T. (2012) “Bull's-eye”, In: Linux Magazine. TIOBE, (2013) “Tiobe Index”, http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html <Acessado em 25.Jun.2013> MILLER, S. M. (2010) “Future of Javascript”, In: MarkMail, http://markmail.org/message/uro3jtoitlmq6x7t <Acessado em 25.Jun.2013> DARTLANG, (2013) “Dart: Structured Web Apps”, http://www.dartlang.org/ <Acessado em 25.Jun.2013> GOOGLE, (2013) “Google BSD License”, http://code.google.com/intl/de- DE/google_bsd_license.html, <Acessado em 25.Jun.2013> DARTBOARD, (2013) “Try Dart”, http://try.dartlang.org/, <Acessado em 25.Jun.2013> DARTGAMESDEVS, (2013) “DartGameDevs”, http://dartgamedevs.org/, <Acessado em 25.Jun.2013>