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).
javascript
dart
marko
fuente
fuente
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.Respuestas:
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:
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.
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.
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.
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.
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.
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 un
MockDuck implements Duck
Constructores con nombre. Puede dar nombres de constructores, lo que realmente ayuda con la lectura. Por ejemplo:
var duck = new Duck.fromJson(someJsonString)
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.
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.
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.
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.
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.
Interpolación de cuerdas. Esta es solo una buena característica, que facilita la composición de una cadena:
var msg = "Hello $friend!";
noSuchMethod Dart es un lenguaje dinámico, y puede manejar llamadas a métodos arbitrarios con
noSuchMethod()
.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.
Sobrecarga del operador. Las clases de dardos pueden definir el comportamiento de operadores como
+
o-
. Por ejemplo, podría escribir código comonew 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! :)
fuente
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
fuente
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]WebSocket
tener 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.
fuente
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 .
fuente