¿Dart tiene características útiles para programadores web?

33

http://www.dartlang.org/

Revisé el sitio muy brevemente y tuve curiosidad. ¿Hay alguna ventaja de usar Dart? ¿Es solo un reemplazo para JavaScript?

Parece un Java más simple. Al escribir bastante C # en el trabajo, el lenguaje se parece mucho a lo que estoy acostumbrado, por lo que aprender la sintaxis parece muy fácil de aprender. ¿Alguien tiene alguna opinión o experiencia con el idioma?

(En comparación con CoffeeScript (= no estoy haciendo la sintaxis de Ruby) la sintaxis me parece más familiar).

marko
fuente
18
El comentario de Doug Crockford es divertido: "Por lo tanto, he pensado durante mucho tiempo ... si pudiera tomar una hoja de papel limpia y escribir un nuevo idioma que conserve toda la bondad de Javascript ... no habría surgido con algo como Dart ".
MebAlone
2
@MebAlone Ho-ho-ho, qué perspicaz. Qué meneo que es Crockford. Wisecracks sobre la sabiduría.
funkybro
11
@MebAlone Los diseñadores del lenguaje Dart no intentaban crear un nuevo lenguaje que conservara todas las bondades de JavaScript. Intentaban idear un lenguaje de lenguaje orientado a objetos basado en clases para el navegador.
MarkJ
1
Que Is there any advantages of using Dart?significa ¿Ventaja sobre qué y cómo medido ? Hay una variedad de lenguajes que compilan a JavaScript. La mayoría de ellos hacen algo mucho mejor que Dart. Algunos hacen la mayoría de las cosas mejor que Dart. Y, por ejemplo, si haces C #, entonces ScriptSharp podría ser interesante para ti. Si bien entre todos los lenguajes que compilan a JavaScript estaría lejos de ser mi primera opción, para usted presentaría una transición muy fácil, posiblemente incluso permitiendo portar el código existente sin problemas.
back2dos
1
@MebAlone Douglas está un poco en conflicto. Los desarrolladores que se quejan no aceptan nuevas ideas, pero decir que dart es malo en 2012 cuando solo se lanzó hace 2 días. Han anunciado que vendría hace 2 años. Como dart aborda algunas de las cosas con las que Douglas no está contento en JS (no hay funciones de constructor con el prototipo "colgando suelto"). Mientras mantiene las cosas que le gustan (como cierres). En varias presentaciones lo he visto alabar el prototipo y luego criticar la sintaxis de las funciones del constructor (tiene razón). Luego "lo resuelve" mostrando un patrón de módulo que ignora por completo la existencia del prototipo.
HMR

Respuestas:

65

Gracias por tu pregunta! Descargo de responsabilidad completo, trabajo en el equipo Dart.

Probablemente la mejor ventaja que Dart tiene hoy es que es familiar para C #, Java, C ++ y la mayoría de los desarrolladores de JavaScript. Muchos desarrolladores tienen un conjunto de expectativas en torno a su lenguaje (OO basado en clases, alcance léxico, sintaxis familiar) y sus herramientas (finalización de código, refactorización, navegación de código, depuración) que Dart pretende cumplir y superar.

Aquí hay algunas cosas que me gustan del idioma:

  1. Tipos estáticos opcionales. Cuando estoy creando prototipos o simplemente escribiendo pequeños scripts, no uso un montón de tipos estáticos. Simplemente no los necesito, y no quiero empantanarme con la ceremonia. Sin embargo, algunos de esos scripts evolucionan en programas más grandes. A medida que los scripts escalan, tiendo a querer clases y anotaciones de tipo estático.

  2. Inocente hasta que se pruebe su culpabilidad. Dart se esfuerza por minimizar las situaciones que resultan en un error en tiempo de compilación. Muchas condiciones en Dart son advertencias, que no detienen la ejecución de su programa. ¿Por qué? De acuerdo con la moda del desarrollo web, es imperativo permitir que los desarrolladores prueben un poco de código, presionen la recarga y vean qué sucede. El desarrollador no debería tener que probar primero que todo el programa es correcto antes de probar una esquina del código.

  3. Alcance léxico. Esto es increíble, si no estás acostumbrado. En pocas palabras, la visibilidad de las variables, e incluso esto , está definida por la estructura del programa. Esto elimina una clase de rompecabezas en la programación web tradicional. No es necesario volver a vincular funciones para mantener esto a lo que piensa o espera.

  4. Clases reales al horno en el idioma.Está claro que la mayoría de los desarrolladores quieren trabajar en clases, ya que la mayoría de los marcos de desarrollo web ofrecen una solución. Sin embargo, una "clase" del marco A no es compatible con el marco B, en el desarrollo web tradicional. Dart usa las clases de forma natural.

  5. Funciones de nivel superior. Una parte dolorosa de Java es que todo tiene que ponerse en una clase. Esto es un poco artificial, especialmente cuando desea definir algunas funciones de utilidad. En Dart, puede definir funciones en el nivel superior, fuera de cualquier clase. Esto hace que la composición de la biblioteca se sienta más natural.

  6. Las clases tienen interfaces implícitas. La eliminación de interfaces explícitas simplifica el lenguaje. Ya no es necesario definir IDuck en todas partes, todo lo que necesita ahora es una clase Duck. Debido a que cada clase tiene una interfaz implícita, puede crear unMockDuck implements Duck

  7. Constructores con nombre. Puede dar nombres de constructores, lo que realmente ayuda con la lectura. Por ejemplo:var duck = new Duck.fromJson(someJsonString)

  8. Constructores de fábricas.El patrón de fábrica es bastante común, y es agradable verlo en el lenguaje. Un constructor de fábrica puede devolver un singleton, un objeto de un caché o un objeto de un subtipo.

  9. Aislamientos Atrás quedaron los días de compartir el estado mutable entre hilos (una técnica propensa a errores). Un aislamiento de Dart es un montón de memoria aislado, capaz de ejecutarse en un proceso o subproceso separado. Los aislamientos se comunican enviando mensajes a través de puertos. Los aislamientos funcionan en Dart VM y pueden compilarse para trabajadores web en aplicaciones HTML5.

  10. Dart compila a JavaScript.Esto es críticamente importante, ya que JavaScript es la lengua franca de la web. Las aplicaciones Dart deberían ejecutarse en la web moderna.

  11. Herramientas fuertes El proyecto Dart también incluye un editor. Encontrará la finalización de código, refactorización, soluciones rápidas, navegación de código, depuración y más. Además, IntelliJ tiene un complemento Dart.

  12. Bibliotecas Puede organizar el código Dart en bibliotecas, para facilitar el espacio de nombres y la reutilización. Su código puede importar una biblioteca, y las bibliotecas pueden reexportarse.

  13. Interpolación de cuerdas. Esta es solo una buena característica, que facilita la composición de una cadena:var msg = "Hello $friend!";

  14. noSuchMethod Dart es un lenguaje dinámico, y puede manejar llamadas a métodos arbitrarios con noSuchMethod().

  15. Genéricos Ser capaz de decir "esta es una lista de manzanas" le da a sus herramientas mucha más información para ayudarlo y detectar los posibles errores temprano. Afortunadamente, sin embargo, los genéricos de Dart son más simples de lo que probablemente estás acostumbrado.

  16. Sobrecarga del operador. Las clases de dardos pueden definir el comportamiento de operadores como +o -. Por ejemplo, podría escribir código como new Point(1,1) + new Point(2,2).

Dicho todo esto, hay muchas más bibliotecas de JavaScript por ahí.

Personalmente, creo que hay espacio en la web para muchos idiomas. Si la aplicación es increíble y se ejecuta en la mayoría de los navegadores modernos, no me importa mucho en qué idioma está escrita. Mientras usted, el desarrollador, esté contento, sea productivo y se lance en la web, eso es ¡lo que importa! :)

Seth Ladd
fuente
Muchos lenguajes de programación modernos (Ruby, Scala, Python) incluyen algún tipo de mecanismo de herencia múltiple, y esto viene en JDK8. ¿Está esto planeado para Dart?
MebAlone
44
+1 en el punto n. ° 1: la escritura dinámica es bastante adecuada para scripts pequeños (es decir, nivel de "validación de formulario"). Algo más allá de eso y encuentro indispensable la red de seguridad de la escritura estática.
funkybro
2
@MebAlone Espero que veamos a los mixins llegar a Dart en un futuro próximo.
Seth Ladd
Sorprendido Snap-shotting no fue mencionado - IMO una de las mejores características de Dart.
mythz
@mythz No mencioné las instantáneas porque todavía no están implementadas por completo. Pero sí, ¡son geniales!
Seth Ladd
11

Al escribir bastante C # en el trabajo, el lenguaje se parece mucho a lo que estoy acostumbrado

Ese es un punto sobre Dart. Javascript se considera un lenguaje incómodo con pocos modismos generales. En un lenguaje como Java, a menudo hay una forma natural de abordar un problema. Por ejemplo, si mantiene un inventario de tabla, en Java o C # creará una tabla de clase.

Javascript no tiene clases, es posible que desee utilizar prototipos, pero se sienten incómodos y no proporcionan una estructura tan fuerte y herramientas de encapsulación. (Al menos no sin hacer acrobacias). La herencia, la composición, etc. es incómoda con los prototipos de Javascript. Es por eso que la mayoría de las personas usan mapas hash simples para almacenar datos. O usan bibliotecas de terceros como prototipo que le brinda una experiencia de clase.

Entonces la conveniencia es una cosa, estructura la otra. Javascript simplemente no escala bien porque no hay una forma estándar de estructurar aplicaciones a gran escala. Sin embargo, actualmente estas bibliotecas de terceros se están volviendo muy populares. (Como backbone.js)

Dart es algo para resolver eso. Está ahí para brindarle la conveniencia estructural de Java y, además, no tiene todas estas características incómodas de JS. (La mayoría de ellos relacionados con mecanografía débil).

Entonces la respuesta es sí: clases, herencia, ...: "OOP tradicional". (La mayoría de las aplicaciones web JS del mundo real utilizan el método de devolución de llamada basado en jQuery como estructura principal). Y tiene una forma flexible de tipeo estático, sin embargo, ese no es el punto clave de venta.

Por cierto: es posible que desee leer este correo "interno" de Google con fecha 2010: Futuro de Javascript

Javascript tiene fallas fundamentales que no se pueden solucionar simplemente evolucionando el lenguaje. Adoptaremos una estrategia de dos frentes para el futuro de Javascript ... Desarrolle un nuevo lenguaje (llamado Dash) que tenga como objetivo mantener la naturaleza dinámica de Javascript pero tenga un mejor perfil de rendimiento y sea capaz de herramientas para grandes proyectos. .

Philip
fuente
55
No todos consideran Javascript "un lenguaje incómodo". A menudo hay una forma natural de abordar un problema. Con demasiada frecuencia requiere técnicas (programación funcional, sobrecarga del operador, mixins, programación genérica) que no son compatibles con Java. La herencia, la composición, etc. no es incómoda con los prototipos de Javascript. Es simplemente diferente de Java y C #, pero similar a Ruby, LUA y Perl.
Kevin Cline
1
Mmm ... la primera vez que escucho algo bueno sobre los prototipos. ¿Pero de qué manera ves prototipos JS similares a Ruby?
Philip
1
necesitas salir (del mundo de Java) más a menudo. Mire la metaprogramación de Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) y verá que la resolución del nombre del miembro Ruby es similar a (pero IMO más complicada que) la resolución del nombre del miembro Javascript.
Kevin Cline
jQuery de ninguna manera promueve un enfoque de devolución de llamada más de lo que la API DOM (que esencialmente envuelve) o el núcleo JS mismo hace o Dart tendría. Los prototipos son el mecanismo de herencia que nos permite hacer cosas que las clases no pueden. Compare clases con constructores de funciones, que encapsulan vars de instancias internas muy bien, no prototipos. No es que su mediana de nivel de talento bean / getter-setter spamming Java o C # dev tenga la más mínima idea de para qué sirve la encapsulación o el desarrollador promedio de Google tenga la más mínima idea de cómo escribir JavaScript.
Erik Reppen
@ErikReppen: si usa jQuery exclusivamente para la manipulación DOM, puede escribir código que casi no necesita devoluciones de llamada, en caso de que lo combine con otros marcos como backbone.js. Los eventos vinculantes con jQuery promueven mucho las devoluciones de llamadas (anónimas). backbone.js tiene en mi humilde opinión un enfoque más estructurado.
Philip
5

Para mí, me da la oportunidad de estructurar mi código mejor que JavaScript con alcance y clases.

Es similar a Java y JavaScript y con el editor Dart, tuve una adaptación casi nula. Empecé a codificar de inmediato.

var ws = new [Moz]WebSockettener que atender a diferentes navegadores es molesto. Dart compila a código JavaScript compatible con los navegadores populares.

Mi desafío es principalmente interactuar con el código JavaScript. De alguna manera encuentro formas de evitarlo, pero sería mejor si es parte de Dart.

Abiola
fuente
De acuerdo, @Abiola, Dart necesita una mejor interoperabilidad de JavaScript. Está muy en el radar, espero con ansias lo que el equipo inventa.
Seth Ladd
0

El enfoque de Java / C # está definitivamente sesgado en golpear a JS desde el comienzo de la web 2.0 Esto se debe a una diferenciación artificial (o muy real y necesaria) entre los idiomas del lado del cliente y los idiomas del lado del servidor. Creo que esto es para que el lenguaje del lado del servidor pueda permanecer en el 'control' de los dominios de problemas centrales de las aplicaciones web y para demarcar el código menos serio (código ui) del código comercial (del lado del servidor). También creo que a Java le encanta seguir siendo un kernel del lado del servidor ya que perdió la guerra de la GUI con los applets debido principalmente a Flash y HTML 5. Ahora tiene RedTamarin un proyecto AS3 NodeJS-esque aludiendo a un futuro mezclado pluralista de paradigmas unificados de front-end y backend .

Vodbro
fuente