Por supuesto, un gran profesional es la cantidad de azúcar sintáctica que conduce a un código más corto en muchos casos. En http://jashkenas.github.com/coffee-script/ hay ejemplos impresionantes. Por otro lado, tengo dudas de que estos ejemplos representen códigos de aplicaciones complejas del mundo real. En mi código, por ejemplo, nunca agrego funciones a objetos desnudos, sino a sus prototipos. Además, la función del prototipo está oculta para el usuario, lo que sugiere una OOP clásica en lugar de un Javascript idiomático.
El ejemplo de comprensión de matriz se vería en mi código probablemente así:
cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...
javascript
coffeescript
Philip
fuente
fuente
Respuestas:
Soy el autor de un próximo libro sobre CoffeeScript:
http://pragprog.com/titles/tbcoffee/coffeescript
Estaba convencido de que valía la pena usar CoffeeScript después de una semana de jugar con él, a pesar de que el lenguaje tenía solo unos pocos meses en ese momento y tenía muchos más asperezas que ahora. El sitio oficial hace un gran trabajo al enumerar (la mayoría de) las características del idioma, por lo que no las repetiré aquí. Más bien, solo diré que los pros del lenguaje son:
El número 3 recibe mucha más atención que los dos primeros (incluso en mi libro), pero cuanto más lo pienso, más me doy cuenta de que no hice el salto solo por la bonita sintaxis; Di el salto porque el lenguaje me empujó hacia un JavaScript mejor y menos propenso a errores. Para dar algunos ejemplos rápidos:
var
, sombrear una variable con el mismo nombre (excepto con argumentos con nombre) o tener variables en diferentes archivos que interactúan (consulte https://stackoverflow.com/questions / 5211638 / pattern-for-coffeescript-modules / 5212449 ).->
es muchísimo más fácil de escribir quefunction(){}
, es más fácil usar devoluciones de llamada. La sangría semántica deja en claro cuando las devoluciones de llamada están anidadas. Y=>
hace que sea más fácil de preservarthis
cuando sea apropiado.unless x
es más fácil de analizar para los angloparlantes queif (!x)
, yif x?
es más fácil queif (x != null)
, dar solo dos ejemplos, puede gastar menos ciclos cerebrales en la sintaxis lógica y más en la lógica misma.Una gran biblioteca como Underscore.js puede solucionar algunos de estos problemas, pero no todos.
Ahora para los contras:
Obviamente, creo que los profesionales superan los inconvenientes para mí personalmente, pero ese no será el caso para cada persona, equipo o proyecto. (Incluso Jeremy Ashkenas escribe mucho JavaScript). CoffeeScript se ve mejor como un excelente complemento para JavaScript, no como un reemplazo.
fuente
=>
en la documentación? Eso es impresionante . (Los otros puntos también fueron buenos, muy buena respuesta imparcial con una lista honesta de contras. :)Foo.prototype.bar = ...
líneas por todas partes, ¡lo cual es una locura!). Es una excelente manera de organizar el código limpiamente. Por otro lado, puede hacer que las personas usen OOP incluso cuando un enfoque funcional es mucho más elegante.Tenemos una base de código JavaScript algo grande y hace aproximadamente un mes decidimos probar CoffeeScript. Uno de nuestros desarrolladores comenzó migrando uno de nuestros módulos de JS a CS usando http://js2coffee.org/ . Esta herramienta fue bastante útil y tardó unas dos o tres horas en portar unas 1000 líneas de JavaScript. Algunas observaciones que hemos notado en ese punto:
El código resultante de CoffeeScript era bastante legible.
Lo compilamos de nuevo a JavaScript y fue bastante fácil de navegar y depurar. Mientras estábamos portando ese módulo, otro desarrollador de nuestro equipo encontró un error en él. Estos dos desarrolladores corrigieron ese error en nuestro antiguo código JavaScript y en el nuevo código JavaScript que salió del compilador CS. Trabajaron de forma independiente y les llevó aproximadamente la misma cantidad de tiempo (15-20 minutos).
Debido al hecho de que era un puerto, el código resultante no usaba funciones específicas de Coffee que fueran apropiadas o deseables. Si escribiéramos en CoffeeScript desde cero, el código sería más idiomático. Debido a eso más tarde, decidimos que no portaremos el código existente.
En general, la legibilidad de la función más corta y el objeto más pequeño aumentó en cierta medida. Sin embargo, para métodos más largos ese no era el caso en absoluto. Los mayores ahorros de hinchazón provienen
->
y son explícitosreturn
, pero aparte de eso, nuestro código no se había vuelto significativamente más corto o más simple. Algunas piezas de sintaxis parecían bastante confusas, especialmente los literales de objetos. CS omite llaves entre las definiciones de los miembros y combina con "todo es una expresión" e implícitoreturn
que hizo que algunos bits de código fueran bastante difíciles de leer.Aquí está JavaScript:
Y así es como se vería el código correspondiente de CoffeeScript:
Como es ahora, es bastante difícil darse cuenta de que la declaración de retorno comienza en la
(*)
línea. En nuestro proyecto, dependemos en gran medida de los literales de objetos: los pasamos como parámetros de función y los devolvemos de otras funciones. En muchos casos, estos objetos tienden a ser bastante complejos: con miembros de diferentes tipos y varios niveles de anidamiento. En nuestro caso, la sensación general era que el código CoffeeScript era realmente más difícil de leer que el código JavaScript simple.Aunque la depuración de CoffeeScript resultó ser más fácil de lo que esperábamos, la experiencia de edición se ha degradado bastante. No pudimos encontrar un buen editor / IDE para este idioma. No hemos estandarizado el editor / IDE para el código del lado del cliente para nuestro proyecto y, de hecho, todos utilizamos diferentes herramientas. De hecho, todos en un equipo están de acuerdo en que cuando cambian a CoffeeScript obtienen un soporte bastante pobre de su herramienta. Los complementos IDE y editor están en una forma muy temprana y, en algunos casos, ni siquiera nos pueden dar un resaltado de sintaxis adecuado o soporte de sangría. No hablamos de fragmentos de código o refactorización. Usamos WebStorm, Eclipse, NetBeans, VisualStudio, Notepad ++ y SublimeText2.
Hablando de herramientas, debo mencionar que el compilador CoffeScript viene como un paquete Node JS. Somos una tienda primaria de Java / .NET, por lo que todos están desarrollando en cajas de Windows. Hasta hace poco, el soporte de Windows era casi inexistente en Node. No pudimos hacer que el compilador CoffeeScript se ejecutara en Windows, así que por el momento decidimos seguir con las
<script type="text/coffeescript">
etiquetas y el compilador sobre la marcha basado en el navegador.El compilador es bastante rápido y no aumenta mucho el tiempo de inicio. La desventaja es que el JavaScript resultante se
eval
edita y es un poco difícil colocar puntos de interrupción en las herramientas de desarrollo de los navegadores (especialmente en IE8). Si tenemos dificultades con la depuración, precompilamos el código CoffeeScript con la misma herramienta de migración que mencioné anteriormente, pero aún así no es muy conveniente.Otras promesas de CoffeeScript, como la
var
inserción automática o la gestión semitransparente dethis
con el operador de flecha gruesa (=>
) resultaron no proporcionar tanta ganancia como esperábamos. Ya usamos JSLint como parte de nuestro proceso de compilación y escribimos código en unES3 x ES5-Strict
subconjunto del lenguaje. De todos modos, el hecho de que Coffee produzca el mismo tipo de código "limpio" es algo bueno . ¡Ojalá todos los marcos del lado del servidor produjeran marcas válidas de HTML5 y CSS3 también!Dicho esto, no diría que CoffeeScript ahorra mucho tiempo al poner
var
palabras clave para mí. Desaparecidosvar
s son fácilmente capturados por JSLint y son fácilmente corregibles. Además, una vez que te corrigen por un tiempo, de todas formas comienzas a escribir JavaScript correctamente . Por lo tanto, no diría que el café es realmente tan útil en este sentido.Evaluamos CoffeeScript durante aproximadamente una semana. Todos los miembros del equipo escribían código en él y compartimos nuestras experiencias entre nosotros. Escribimos un código nuevo con él y portamos un código existente cuando lo creíamos conveniente. Nuestros sentimientos sobre el idioma fueron mixtos.
En general, diría que no aceleró nuestro desarrollo, pero tampoco nos ha frenado. Algunas ganancias de velocidad debido a menos tipeo y menos superficie de error fueron compensadas por ralentizaciones en otras áreas, principalmente soporte de herramientas. Después de una semana , decidimos que no exigiremos el uso de CoffeeScript, pero tampoco lo prohibiremos . Dada una libre elección, en la práctica nadie la usa, al menos por ahora. De vez en cuando pienso en crear prototipos de alguna característica nueva y luego convertir el código a JavaScript antes de integrarlo con el resto del proyecto para comenzar más rápido, pero aún no he probado ese enfoque.
fuente
Pros
ver la respuesta de Trevor Burnham .
Además, puedes pensar en ti mismo como un tipo moderno, que está haciendo cosas de moda, en lugar de jugar con la suciedad de JavaScript.
Contras
CoffeeScript no es más que azúcar sintáctica y gafas rosas.
Para cosas fáciles: CoffeeScript es redundante, porque hacer cosas fáciles es fácil en cualquier lenguaje. Y jQuery es probablemente incluso más simple que CoffeeScript.
Para cosas difíciles, debes entender tu medio. Y su medio es HTML, DOM y CSS, Javascript es simplemente una herramienta para interconectarlos, sin embargo, todas las API están escritas específicamente para Javascript. Usar otro lenguaje, que luego se compilaría en uno "real", es bastante arriesgado, ya sea Java (GWT), Dart o CoffeeScript.
Los antipatrones o la ignorancia banal de las reglas del lenguaje se pueden solucionar leyendo uno o dos buenos libros. Y estoy bastante seguro de que Coffeescript tiene sus propios antipatrones.
El soporte de IDE para Coffeescript es incluso peor que para JS.
fuente
El mayor profesional, en mi opinión es:
Coffescript directo se compila en el javascript que debería haber escrito, pero no lo hizo, porque no era sencillo.
Hay algunos rincones desagradables de javascript que solo se evitan con vigilancia, ejemplos fuera de mi cabeza:
Si escribe coffeescript, todos esos se manejan automáticamente .
Los inconvenientes son, en mi opinión, en su mayoría menores:
fuente
pros
El ejemplo de trabajo anterior de Andrew que encontré es esclarecedor. Creo que la legibilidad de sus retornos literales de objetos existentes se mejoraría simplemente identificando manualmente el retorno
regreso
// objeto literal aquí
Las herramientas IDE se han mejorado, TextMate y Cloud9 son compatibles con CoffeeScript. Es cierto que el soporte de Windows se ha retrasado (¿no es cierto para el desarrollo web en general?
contras
El navegador interpretado por CoffeeScript puede ser difícil de depurar.
Es una capa adicional sobre JavaScript que requiere cierta comprensión y consideración por parte de los desarrolladores.
fuente
pros
contras
fuente