Dart ha qualche funzione utile per i programmatori web?


33

http://www.dartlang.org/

Ho controllato il sito molto brevemente e sono diventato curioso. Ci sono dei vantaggi nell'usare Dart? È solo un sostituto di JavaScript?

Sembra Java più semplice. Scrivendo un sacco di C # al lavoro, la lingua sembra molto simile a quella a cui sono abituato, quindi imparare la sintassi sembra un gioco da ragazzi imparare. Qualcuno ha qualche opinione o esperienza con la lingua?

(Rispetto a CoffeeScript (= Non sto eseguendo la sintassi di Ruby) la sintassi mi sembra più familiare).


18
Il commento di Doug Crockford è divertente: "Quindi, ho pensato a lungo ... se potessi prendere un foglio di carta pulito e scrivere una nuova lingua che mantenga tutta la bontà di Javascript ... Non sarei venuto fuori con qualcosa come Dart. "
MebAlone,

2
@MebAlone Ho-ho-ho, che perspicacia. Che stronzo che è Crockford. Wisecracks sulla saggezza.
funkybro,

11
@MebAlone I progettisti del linguaggio Dart non stavano cercando di inventare un nuovo linguaggio che mantenga tutta la bontà di JavaScript. Stavano cercando di trovare un linguaggio linguistico basato su classi e orientato agli oggetti per il browser.
MarkJ,

1
Cosa Is there any advantages of using Dart?significa? Vantaggio rispetto a cosa e misurato come ? Esiste una gamma di lingue compilabili in JavaScript. Molti di loro fanno qualcosa di molto meglio di Dart. Alcuni fanno la maggior parte delle cose meglio di Dart. E per esempio, se fai C #, ScriptSharp potrebbe essere interessante per te. Mentre tra tutte le lingue che si compilano in JavaScript sarebbe ben lungi dall'essere la mia prima scelta, per te presenterebbe una transizione molto semplice, che potrebbe anche consentire il porting di codice esistente indolore.
back2dos,

1
@MebAlone Douglas è un po 'in conflitto. Gli sviluppatori che si lamentano non accettano nuove idee, ma dire che il dardo è male nel 2012, quando è stato appena rilasciato 2 giorni fa. Hanno annunciato che sarebbe arrivato 2 anni fa. Come il dardo affronta alcune delle cose di cui Douglas non è soddisfatto in JS (nessuna funzione di costruzione con prototipo "loose loose"). Pur mantenendo le cose che gli piacciono (come le chiusure). In diverse presentazioni l'ho visto elogiare il prototipo, quindi criticare la sintassi delle funzioni del costruttore (ha ragione). Quindi "risolve" mostrando un modello di modulo che ignora completamente l'esistenza del prototipo.
HMR,

Risposte:


65

Grazie per la tua domanda! Disclaimer completo, lavoro nel team Dart.

Probabilmente il miglior vantaggio che Dart ha oggi è che ha familiarità con gli sviluppatori C #, Java, C ++ e la maggior parte degli sviluppatori JavaScript. Molti sviluppatori hanno una serie di aspettative intorno al loro linguaggio (OO basato sulla classe, ambito lessicale, sintassi familiare) e ai loro strumenti (completamento del codice, refactoring, navigazione del codice, debug) che Dart mira a soddisfare e superare.

Ecco alcune cose che mi piacciono della lingua:

  1. Tipi statici opzionali. Quando sto prototipando o semplicemente scrivendo piccoli script, non uso un sacco di tipi statici. Semplicemente non ne ho bisogno e non voglio impantanarmi con la cerimonia. Tuttavia, alcuni di questi script si evolvono in programmi più grandi. Mentre gli script si ridimensionano, tendo a desiderare classi e annotazioni di tipo statico.

  2. Innocente fino a prova contraria. Dart si sforza di ridurre al minimo le situazioni che provocano un errore di compilazione. Molte condizioni in Dart sono avvisi, che non impediscono l'esecuzione del programma. Perché? In linea con la moda dello sviluppo web, è indispensabile consentire agli sviluppatori di provare un po 'di codice, premere Ricarica e vedere cosa succede. Lo sviluppatore non dovrebbe prima provare che l'intero programma è corretto prima di provare un angolo del codice.

  3. Ambito lessicale. È fantastico, se non ci sei abituato. In poche parole, la visibilità delle variabili e anche questo è definita dalla struttura del programma. Ciò elimina una classe di enigmi nella programmazione web tradizionale. Non c'è bisogno di funzioni di ri-legano a mantenere questo a ciò che si pensa o si aspettano.

  4. Classi reali cotte nella lingua. È chiaro che la maggior parte degli sviluppatori vuole lavorare in classe, poiché la maggior parte dei framework di sviluppo web offre una soluzione. Tuttavia, una "classe" dal framework A non è compatibile con il framework B, nello sviluppo web tradizionale. Il dardo usa le classi in modo naturale.

  5. Funzioni di alto livello. Una parte dolorosa di Java è che tutto deve essere inserito in una classe. Questo è un po 'artificiale, soprattutto quando si desidera definire alcune funzioni di utilità. In Dart, puoi definire le funzioni al livello più alto, al di fuori di qualsiasi classe. Questo rende la composizione della libreria più naturale.

  6. Le classi hanno interfacce implicite. L'eliminazione di interfacce esplicite semplifica il linguaggio. Non è più necessario definire IDuck ovunque, tutto ciò di cui hai bisogno ora è una classe Duck. Poiché ogni classe ha un'interfaccia implicita, puoi crearne unaMockDuck implements Duck

  7. Costruttori nominati. Puoi dare nomi ai costruttori, il che aiuta davvero con la leggibilità. Per esempio:var duck = new Duck.fromJson(someJsonString)

  8. Costruttori di fabbrica. Il modello di fabbrica è abbastanza comune ed è bello vederlo cotto nella lingua. Un costruttore di fabbrica può restituire un singleton, un oggetto da una cache o un oggetto di un sottotipo.

  9. Gli isolati. Sono finiti i giorni della condivisione dello stato mutevole tra i thread (una tecnica soggetta a errori). Un isolato Dart è un heap di memoria isolato, in grado di essere eseguito in un processo o thread separato. Gli isolati comunicano inviando messaggi tramite le porte. Isola il lavoro nella VM Dart e può essere compilato per i lavoratori Web nelle app HTML5.

  10. Dart si compila in JavaScript. Ciò è di fondamentale importanza, poiché JavaScript è la lingua franca del web. Le app Dart dovrebbero essere eseguite sul Web moderno.

  11. Strumenti forti. Il progetto Dart spedisce anche un editore. Troverai completamento del codice, refactoring, soluzioni rapide, navigazione del codice, debug e molto altro. Inoltre, IntelliJ ha un plugin Dart.

  12. Biblioteche. È possibile organizzare il codice Dart in librerie, per semplificare la spaziatura dei nomi e la riusabilità. Il codice può importare una libreria e le librerie possono riesportare.

  13. Interpolazione di stringhe. Questa è solo una bella funzionalità, che semplifica la composizione di una stringa:var msg = "Hello $friend!";

  14. noSuchMethod Dart è un linguaggio dinamico e puoi gestire chiamate di metodo arbitrarie con noSuchMethod().

  15. Generics. Essere in grado di dire "questo è un elenco di mele" fornisce ai tuoi strumenti molte più informazioni per aiutarti e individuare tempestivamente potenziali errori. Fortunatamente, però, i generici di Dart sono più semplici di quelli a cui probabilmente sei abituato.

  16. Sovraccarico dell'operatore. Le classi di freccette possono definire comportamenti per operatori come +o -. Ad esempio, potresti scrivere codice come new Point(1,1) + new Point(2,2).

Detto questo, ci sono molte più librerie JavaScript là fuori.

Personalmente, credo che ci sia spazio sul web per molte lingue. Se l'app è fantastica e funziona nella maggior parte dei browser moderni, non mi interessa tanto la lingua in cui è scritta. Fintanto che tu, lo sviluppatore, sei felice, produttivo e lancio sul Web, questo è cosa importa! :)


Molti linguaggi di programmazione moderni (Ruby, Scala, Python) includono una sorta di meccanismo di ereditarietà multipla, e questo è in arrivo in JDK8. È previsto per Dart?
MebAlone,

4
+1 sul punto n. 1 - la digitazione dinamica è abbastanza adeguata per script di piccole dimensioni (ovvero livello di "validazione del modulo"). Qualsiasi cosa oltre a ciò e trovo indispensabile la rete di sicurezza della tipizzazione statica.
funkybro,

2
@MebAlone Mi aspetto che vedremo mixin venire su Dart nel prossimo futuro.
Seth Ladd,

Lo snap-shotting sorpreso non è stato menzionato - IMO una delle migliori caratteristiche di Dart.
Mythz,

@mythz Non ho menzionato le istantanee perché non sono ancora state implementate fino in fondo. Ma sì, sono fantastici!
Seth Ladd,

11

Scrivendo un sacco di C # al lavoro, il linguaggio sembra molto simile a quello a cui sono abituato

Questo è un punto su Dart. Javascript è considerato un linguaggio imbarazzante con pochi idiomi generali. In un linguaggio come Java esiste spesso un modo naturale per affrontare un problema. Ad esempio, se si mantiene un inventario della tabella, in Java o C # verrà creata una tabella di classi.

Javascript non ha classi, potresti voler usare prototipi ma si sentono scomodi e non forniscono strumenti di incapsulamento e struttura così forti. (Almeno non senza fare acrobazie.) L'ereditarietà, la composizione ecc. È scomoda con i prototipi Javascript. Ecco perché la maggior parte delle persone usa semplici mappe hash per archiviare dati. Oppure usano librerie di terze parti come prototipo che ti danno un'esperienza di classe.

Quindi la convenienza è una cosa, struttura l'altra. Javascript non si adatta bene perché non esiste un modo standard per strutturare app di grandi dimensioni. Tuttavia, attualmente tali librerie di terze parti stanno diventando molto popolari. (Come backbone.js)

Il dardo è qualcosa per risolverlo. È lì per darti la convenienza strutturale di Java e inoltre non ha tutte queste imbarazzanti funzionalità JS. (La maggior parte di essi riguardava la digitazione debole.)

Quindi la risposta è sì: classi, eredità, ...: "OOP tradizionale". (La maggior parte delle webapp del mondo reale JS là fuori usano la callback di jQuery basata come struttura principale.) E ha una forma libera di tipizzazione statica, ma questo non è il punto chiave di vendita.

A proposito: potresti voler leggere questo "interno" mailing di Google del 2010: Future of Javascript

Javascript ha difetti fondamentali che non possono essere risolti semplicemente evolvendo il linguaggio. Adotteremo una strategia su due fronti per il futuro di Javascript ... Sviluppa un nuovo linguaggio (chiamato Dash) che mira a mantenere la natura dinamica di Javascript ma ha un profilo prestazionale migliore ed è suscettibile di strumenti per grandi progetti. .


5
Non tutti considerano Javascript "una lingua scomoda". Esiste spesso un modo naturale per affrontare un problema. Troppo spesso richiede tecniche (programmazione funzionale, sovraccarico dell'operatore, mixin, programmazione generica) che non sono supportate da Java. Ereditarietà, composizione, ecc. Non è imbarazzante con i prototipi Javascript. È solo diverso da Java e C #, ma simile a Ruby, LUA e Perl.
Kevin Cline,

1
Mmm ... la prima volta che sento qualcosa di buono sui prototipi. Ma in che modo vedi i prototipi JS simili a Ruby?
Filippo,

1
devi uscire (dal mondo Java) più spesso. Guarda la metaprogrammazione di Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) e vedrai che la risoluzione dei nomi dei membri Ruby è simile alla risoluzione dei nomi dei membri Javascript (ma IMO più complicata di).
Kevin Cline,

jQuery in nessun modo forma o forma promuove un approccio di callback più che l'API DOM (che essenzialmente avvolge) o core JS stesso o Dart avrebbe. I prototipi sono il meccanismo di ereditarietà che ci consente di fare cose che le classi non possono fare. Confronta le classi con i costruttori di funzioni, che incapsulano bene le istanze interne, non i prototipi. Non che il tuo livello medio di talento / getter-setter spamming Java o sviluppatore C # abbia la minima idea di cosa sia utile l'incapsulamento o che lo sviluppatore medio di Google abbia la minima idea di come scrivere JavaScript.
Erik Reppen,

@ErikReppen: se si utilizza jQuery esclusivamente per la manipolazione del DOM, è possibile scrivere codice che difficilmente ha bisogno di callback, nel caso in cui lo si combini con altri framework come backbone.js. Gli eventi vincolanti con jQuery promuovono molto callback (anonimi). backbone.js ha IMHO un approccio più strutturato.
Philip

5

Per me, mi dà la possibilità di strutturare il mio codice meglio di JavaScript con ambito e classi.

È simile a Java e JavaScript e con l'editor Dart, ho avuto quasi zero adattamento. Ho iniziato subito a scrivere codice.

var ws = new [Moz]WebSocketdover provvedere a browser diversi è fastidioso. Dart si compila in codice JavaScript compatibile con i browser più diffusi.

La mia sfida è principalmente l'interfaccia con il codice JavaScript. In qualche modo trovo il modo di aggirarlo, ma sarebbe meglio se fa parte di Dart.


D'accordo, @Abiola, Dart ha bisogno di una migliore interoperabilità JavaScript. È molto sul radar, non vedo l'ora di scoprire il team.
Seth Ladd,

0

L'approccio Java / C # è decisamente distorto nel bussare a JS sin dall'inizio del web 2.0 Ciò è dovuto a una differenziazione artificiale (o molto reale e necessaria) tra linguaggi lato client e linguaggi lato server. Penso che sia così che il linguaggio lato server possa mantenere il "controllo" dei domini problematici principali delle app Web e delimitare il codice meno grave (codice UI) dal codice aziendale (lato server). Anche Java penso che ami rimanere un kernel lato server dal momento che ha perso la guerra della GUI con applet a causa in gran parte di Flash e HTML 5. Ora hai RedTamarin un progetto AS3 di tipo NodeJS che allude a un futuro pluralistico di paradigmi unificati di front e backend .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.