O Dart possui algum recurso útil para programadores da Web?

33

http://www.dartlang.org/

Eu verifiquei o site muito brevemente e fiquei curioso. Existe alguma vantagem em usar o Dart? É apenas um substituto para JavaScript?

Parece Java mais simples. Ao escrever bastante C # no trabalho, o idioma se parece muito com o que estou acostumado, então aprender a sintaxe parece muito fácil de aprender. Alguém tem alguma opinião ou experiência com o idioma?

(Comparado ao CoffeeScript (= não estou fazendo a sintaxe do Ruby), a sintaxe me parece mais familiar).

marko
fonte
18
O comentário de Doug Crockford é divertido: "Então, pensei por um longo tempo ... se eu pudesse pegar uma folha de papel limpa e escrever uma nova linguagem que retenha toda a bondade do Javascript ... eu não teria surgido com qualquer coisa como Dart. "
MebAlone 9/09/12
2
@MebAlone Ho-ho-ho, que perspicaz. Que sacode que Crockford é. Wisecracks sobre sabedoria.
funkybro
11
@MebAlone Os designers da linguagem Dart não estavam tentando criar uma nova linguagem que retenha toda a bondade do JavaScript. Eles estavam tentando criar uma linguagem de linguagem orientada a objetos e baseada em classe para o navegador.
MarkJ
1
O que Is there any advantages of using Dart?significa isso ? Vantagem sobre o que e medido como ? Há uma variedade de idiomas que são compilados para JavaScript. A maioria deles faz algo muito melhor que o Dart. Alguns fazem a maioria das coisas melhor que o Dart. E, por exemplo, se você faz C #, o ScriptSharp pode ser interessante para você. Embora entre todas as linguagens que compilam o JavaScript esteja longe de ser minha primeira escolha, você apresentaria uma transição muito fácil, possivelmente até permitindo portar códigos existentes sem dor.
back2dos
1
@MebAlone Douglas está um pouco em conflito. Os desenvolvedores queixosos não aceitam novas idéias, mas dizem que o dardo é ruim em 2012, quando foi lançado apenas 2 dias atrás. Eles anunciaram que viria 2 anos atrás. Como o dardo aborda algumas das coisas com as quais Douglas não está satisfeito no JS (nenhum construtor funciona com o protótipo "loose hanging"). Enquanto mantém as coisas que ele gosta (como fechamentos). Em várias apresentações, eu o vi elogiar o protótipo e depois criticar a sintaxe das funções do construtor (ele está certo). Em seguida, "resolve", mostrando um padrão de módulo que ignora completamente a existência do protótipo.
HMR

Respostas:

65

Obrigado pela sua pergunta! Isenção total, trabalho na equipe do Dart.

Provavelmente, a melhor vantagem que o Dart tem hoje é que ele é familiar para desenvolvedores de C #, Java, C ++ e a maioria dos desenvolvedores JavaScript. Muitos desenvolvedores têm um conjunto de expectativas em torno de seu idioma (OO baseado em classe, escopo lexical, sintaxe familiar) e suas ferramentas (conclusão de código, refatoração, navegação de código, depuração) que o Dart pretende atender e exceder.

Aqui estão algumas coisas que eu gosto sobre o idioma:

  1. Tipos estáticos opcionais. Quando estou fazendo prototipagem ou simplesmente escrevendo pequenos scripts, não uso muitos tipos estáticos. Só não preciso deles e não quero ficar atolado com a cerimônia. No entanto, alguns desses scripts evoluem para programas maiores. À medida que os scripts são dimensionados, eu tendem a querer classes e anotações de tipo estático.

  2. Inocente até que se prove a culpa. O Dart se esforça para minimizar as situações que resultam em um erro em tempo de compilação. Muitas condições no Dart são avisos, que não impedem a execução do seu programa. Por quê? De acordo com a moda do desenvolvimento da Web, é imperativo permitir que os desenvolvedores experimentem um pouco de código, carreguem em recarregar e vejam o que acontece. O desenvolvedor não precisa primeiro provar que o programa inteiro está correto antes de testar um canto do código.

  3. Escopo lexical. Isso é incrível, se você não está acostumado. Simplificando, a visibilidade das variáveis, e mesmo isso , é definida pela estrutura do programa. Isso elimina uma classe de quebra-cabeças na programação tradicional da web. Não é necessário vincular novamente as funções para manter isso como você pensa ou espera.

  4. Aulas reais assadas no idioma. É claro que a maioria dos desenvolvedores deseja trabalhar em sala de aula, pois a maioria das estruturas de desenvolvimento da Web oferece uma solução. No entanto, uma "classe" da estrutura A não é compatível com a estrutura B, no desenvolvimento tradicional da web. Dart usa classes naturalmente.

  5. Funções de nível superior. Uma parte dolorosa do Java é que tudo precisa ser colocado em uma classe. Isso é um pouco artificial, especialmente quando você deseja definir algumas funções utilitárias. No Dart, você pode definir funções no nível superior, fora de qualquer classe. Isso torna a composição da biblioteca mais natural.

  6. Classes têm interfaces implícitas. A eliminação de interfaces explícitas simplifica o idioma. Não é mais necessário definir o IDuck em todos os lugares, tudo o que você precisa agora é de uma classe Duck. Como toda classe tem uma interface implícita, você pode criar umMockDuck implements Duck

  7. Construtores nomeados. Você pode dar nomes aos construtores, o que realmente ajuda na legibilidade. Por exemplo:var duck = new Duck.fromJson(someJsonString)

  8. Construtores de fábricas. O padrão de fábrica é bastante comum e é bom ver isso inserido no idioma. Um construtor de fábrica pode retornar um singleton, um objeto de um cache ou um objeto de um subtipo.

  9. Isola. Longe vão os dias de compartilhamento de estado mutável entre threads (uma técnica propensa a erros). Um isolado Dart é um heap de memória isolado, capaz de executar em um processo ou thread separado. Isola a comunicação enviando mensagens pelas portas. Isola o trabalho na VM Dart e pode ser compilado para trabalhadores da Web em aplicativos HTML5.

  10. O Dart é compilado para JavaScript. Isso é extremamente importante, pois o JavaScript é a língua franca da web. Os aplicativos Dart devem ser executados na web moderna.

  11. Ferramentas fortes. O projeto Dart também envia um editor. Você encontrará a conclusão, refatoração, correções rápidas, navegação de código, depuração e muito mais. Além disso, o IntelliJ possui um plug-in Dart.

  12. Bibliotecas. Você pode organizar o código Dart em bibliotecas, para facilitar o espaçamento de nomes e a reutilização. Seu código pode importar uma biblioteca e as bibliotecas podem reexportar.

  13. Interpolação de cadeias. Este é apenas um recurso interessante, facilitando a composição de uma string:var msg = "Hello $friend!";

  14. noSuchMethod Dart é uma linguagem dinâmica e você pode lidar com chamadas de método arbitrárias com noSuchMethod().

  15. Genéricos. Ser capaz de dizer "esta é uma lista de maçãs" fornece muito mais informações às suas ferramentas para ajudá-lo e detectar erros potenciais mais cedo. Felizmente, porém, os genéricos do Dart são mais simples do que você provavelmente está acostumado.

  16. Sobrecarga do operador. As classes Dart podem definir o comportamento para operadores como +ou -. Por exemplo, você pode escrever código como new Point(1,1) + new Point(2,2).

Dito tudo isso, existem muito mais bibliotecas JavaScript por aí.

Pessoalmente, acredito que há espaço na web para muitos idiomas. Se o aplicativo é incrível e é executado na maioria dos navegadores modernos, não me importo com o idioma em que ele está escrito. Desde que você, o desenvolvedor, seja feliz, produtivo e inicie na Web, isso é o que importa! :)

Seth Ladd
fonte
Muitas linguagens de programação modernas (Ruby, Scala, Python) incluem algum tipo de mecanismo de herança múltipla, e isso está chegando no JDK8. Isso está planejado para o Dart?
MebAlone 10/09/12
4
+1 no ponto 1 - a digitação dinâmica é bastante adequada para pequenos scripts (isto é, nível "validação de formulário"). Qualquer coisa além disso e considero indispensável a rede de segurança da digitação estática.
funkybro
2
@MebAlone Espero ver mixins chegarem ao Dart no futuro próximo.
precisa saber é o seguinte
Snap-shotting surpreso não foi mencionado - IMO é uma das melhores características de Dart.
Mythz # /
@mythz Eu não mencionei os instantâneos porque eles ainda não foram implementados. Mas sim, eles são legais!
Seth Ladd
11

Ao escrever bastante C # no trabalho, a linguagem parece muito com o que estou acostumado

Esse é um ponto sobre o Dart. Javascript é considerado uma linguagem estranha com poucos idiomas gerais. Em uma linguagem como Java, geralmente há uma maneira natural de abordar um problema. Por exemplo, se você mantiver um inventário de tabela, em Java ou C #, você criará uma classe Tabela.

O Javascript não possui classes, convém usar protótipos, mas eles se sentem estranhos e não fornecem ferramentas de estrutura e encapsulamento tão fortes. (Pelo menos não sem truques.) Herança, composição etc. são estranhas com os protótipos Javascript. É por isso que a maioria das pessoas usa mapas simples de hash para armazenar dados. Ou eles usam bibliotecas de terceiros como protótipo, o que oferece uma experiência de classe.

Portanto, conveniência é uma coisa, estrutura a outra. O Javascript não tem uma boa escala porque não existe uma maneira padrão de estruturar aplicativos em grande escala. No entanto, atualmente, essas bibliotecas de terceiros estão se tornando realmente populares. (Como backbone.js)

Dardo é algo para resolver isso. Está lá para oferecer a conveniência estrutural do Java e, além disso, ele não possui todos esses recursos JS desajeitados. (A maioria deles está relacionada à digitação fraca.)

Portanto, a resposta é sim: classes, herança, ...: "OOP tradicional". (A maioria dos webapps JS do mundo real usa o retorno de chamada do jQuery, abordado como estrutura principal.) E possui uma forma flexível de digitação estática, mas esse não é o principal ponto de venda.

BTW: você pode querer ler esta correspondência "interna" do Google de 2010: Futuro do Javascript

O Javascript possui falhas fundamentais que não podem ser corrigidas apenas com a evolução da linguagem. Adotaremos uma estratégia dupla para o futuro do Javascript ... Desenvolva uma nova linguagem (chamada Dash) que visa manter a natureza dinâmica do Javascript, mas ter um melhor perfil de desempenho e ser passível de ferramentas para grandes projetos. .

Philip
fonte
5
Nem todo mundo considera o Javascript "uma linguagem estranha". Geralmente, existe uma maneira natural de abordar um problema. Com muita freqüência, são necessárias técnicas (programação funcional, sobrecarga do operador, mixins, programação genérica) que não são suportadas pelo Java. Herança, composição etc. não são estranhos com os protótipos de Javascript. É apenas diferente de Java e C #, mas semelhante ao Ruby, LUA e Perl.
Kevin cline
1
Mmm ... primeira vez que ouço algo de bom sobre protótipos. Mas de que maneira você vê protótipos JS semelhantes ao Ruby?
Philip
1
você precisa sair (do mundo Java) com mais frequência. Veja a metaprogramação do Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) e verá que a resolução de nomes de membros do Ruby é semelhante à (mas IMO é mais complicada que) a resolução de nomes de membros do Javascript.
Kevin cline
O jQuery de forma alguma promove uma abordagem de retorno de chamada, assim como a API DOM (que essencialmente envolve) ou o próprio JS principal ou o Dart teria. Protótipos são o mecanismo de herança que nos permite fazer coisas que as classes não podem. Compare classes com construtores de funções, que encapsulam vários exemplos de instâncias internas, não protótipos. Não que seu spam mediano de spam / getter-setter com nível de talento Java ou C # dev tenha a menor idéia de para que serve o encapsulamento ou o desenvolvedor comum do Google tenha a menor idéia de como escrever JavaScript.
Erik Reppen
@ErikReppen: se você usa o jQuery exclusivamente para manipulação do DOM, pode escrever um código que quase não precisa de retorno de chamada, caso o combine com outros frameworks como o backbone.js. A ligação de eventos com o jQuery promove muito retornos de chamada (anônimos). O backbone.js possui uma abordagem mais estruturada do IMHO.
Philip
5

Para mim, isso me dá a chance de estruturar meu código melhor que o JavaScript com escopo e classes.

É semelhante ao Java e JavaScript e, com o editor Dart, tive quase nenhuma adaptação. Comecei a codificar imediatamente.

var ws = new [Moz]WebSocketter que atender a diferentes navegadores é irritante. O Dart compila para código JavaScript compatível com navegadores populares.

Meu desafio é principalmente fazer interface com o código JavaScript. De alguma forma, encontro maneiras de contornar isso, mas seria melhor se fizesse parte do Dart.

Abiola
fonte
Concordado, @Abiola, o Dart precisa de uma melhor interoperabilidade de JavaScript. Está muito no radar, estou ansioso pelo que a equipe criar.
Seth Ladd
0

A abordagem Java / C # é definitivamente tendenciosa ao derrubar o JS desde o início da web 2.0. Isso ocorre devido a uma diferenciação artificial (ou muito real e necessária) entre as linguagens do lado do cliente e as linguagens do lado do servidor. Eu acho que isso é para que a linguagem do lado do servidor possa permanecer no 'controle' dos principais domínios problemáticos dos aplicativos da web e para demarcar o código menos sério (código da interface do usuário) do código comercial (do lado do servidor). Também acho que o Java adora continuar sendo um kernel do lado do servidor, pois perdeu a guerra da GUI com os applets devido principalmente ao Flash e ao HTML 5. Agora você tem o RedTamarin um projeto AS3 no estilo NodeJS, aludindo a um futuro combinado plural de paradigmas unificados de front e back-end .

Vodbro
fonte