CoffeeScript es un lenguaje de programación que se compila a JavaScript . Agrega azúcar sintáctico inspirado en Ruby , Python y Haskell en un esfuerzo por mejorar la brevedad y legibilidad de JavaScript. [ 4 ] [ 5 ] Algunas características añadidas incluyen comprensión de listas y asignación desestructurada .
El soporte para CoffeeScript está incluido en Ruby on Rails versión 3.1 [ 6 ] y Play Framework . [ 7 ] En 2011, Brendan Eich hizo referencia a CoffeeScript como una influencia en sus ideas sobre el futuro de JavaScript. [ 8 ] [ 9 ]
Historia
El 13 de diciembre de 2009, Jeremy Ashkenas hizo el primer commit de Git de CoffeeScript con el comentario "commit inicial del lenguaje misterioso". [ 10 ] El compilador estaba escrito en Ruby. El 24 de diciembre, hizo la primera versión etiquetada y documentada, 0.1.0. El 21 de febrero de 2010, hizo commit de la versión 0.5, que reemplazó el compilador de Ruby con una versión autoalojada en CoffeeScript puro. Para entonces, el proyecto había atraído a varios otros colaboradores en GitHub y estaba recibiendo más de 300 visitas a la página por día.
El 24 de diciembre de 2010, Ashkenas anunció el lanzamiento de la versión estable 1.0.0 en Hacker News , el sitio donde el proyecto se anunció por primera vez. [ 11 ] [ 12 ]
El 18 de septiembre de 2017 se presentó la versión 2.0.0, [ 13 ] que "tiene como objetivo llevar CoffeeScript a la era moderna de JavaScript, cerrando brechas de compatibilidad con JavaScript y conservando la sintaxis limpia que es el sello distintivo de CoffeeScript".
Sintaxis
Casi todo es una expresión en CoffeeScript, por ejemplo, ify switchlas forexpresiones (que no tienen valor de retorno en JavaScript) devuelven un valor. Al igual que en Perl y Ruby, estas sentencias de control también tienen versiones sufijas; por ejemplo, iftambién se puede escribir en consequent if conditionforma.
Se pueden omitir muchos paréntesis y llaves innecesarios; por ejemplo, los bloques de código se pueden indicar mediante sangría en lugar de llaves, las llamadas a funciones son implícitas y los literales de objeto a menudo se detectan automáticamente.
Para calcular el índice de masa corporal en JavaScript , se podría escribir:
sea masa = 72 ; sea altura = 1.78 ; sea IMC = masa / altura ** 2 ; si ( 18.5 <= IMC && IMC < 25 ) alerta ( '¡Estás sano!' );Con CoffeeScript, el intervalo se describe directamente:
masa = 72 altura = 1,78 IMC = masa / altura ** 2 alerta '¡Estás sano!' si 18,5 <= IMC < 25Para calcular el máximo común divisor de dos enteros con el algoritmo euclidiano , en JavaScript normalmente se necesita un bucle while :
let mcd = ( x , y ) => { hacer { [ x , y ] = [ y , x % y ]; } mientras ( y !== 0 ) devolver x ; }Mientras que en CoffeeScript se puede usar until[ 14 ] en su lugar:
mcd = (x, y) -> [ x , y ] = [ y , x % y ] hasta que y sea 0 xLa ?palabra clave comprueba rápidamente si una variable es nullo undefined :
personCheck = -> if not person ? then alert ( "No hay persona" ) else alert ( "Hay persona" ) person = null personCheck () person = "Ivan" personCheck ()Esto alertaría "No hay persona" si la variable es nullo undefinedy "Hay persona" si hay algo allí.
Un fragmento de código JavaScript común anterior a ES6 que utiliza la biblioteca jQuery es:
$ ( document ). ready ( function () { // Aquí va el código de inicialización });O incluso simplemente:
$ ( función () { // El código de inicialización va aquí });En CoffeeScript, la functionpalabra clave se reemplaza por el ->símbolo y se usa la indentación en lugar de las llaves, como en otros lenguajes con reglas de indentación como Python y Haskell. Además, generalmente se pueden omitir los paréntesis, usando el nivel de indentación para indicar una función o bloque. Por lo tanto, el equivalente en CoffeeScript del fragmento anterior es:
$ ( document ) .ready -> # El código de inicialización va aquíO simplemente:
$ -> # Aquí va el código de inicializaciónCoffeeScript incluye interpolación de cadenas al estilo Ruby. Las cadenas entre comillas dobles permiten valores interpolados, usando #{ ... }, y las cadenas entre comillas simples son literales. [ 15 ]
autor = "Wittgenstein" cita = "Una imagen es un hecho. -- #{ autor } "frase = " #{ 22 / 7 } es una aproximación decente de π"Cualquier bucle for puede ser reemplazado por una comprensión de lista ; de modo que para calcular los cuadrados de los números impares positivos menores que diez (es decir, números cuyo resto módulo 2 es 1), se puede hacer lo siguiente:
alerta n * n para n en [ 1 .. 10 ] cuando n % 2 es 1Como alternativa, existe:
alerta n * n para n en [ 1 .. 10 ] por 2Se puede implementar una búsqueda lineal con una sola línea utilizando la palabra clave when:
nombres = [ "Ivan" , "Joanna" , "Nikolay" , "Mihaela" ] BúsquedaLineal = (nombreBuscado) -> alerta ( nombre ) para nombre en nombres cuando nombre es nombreBuscadoLa for ... insintaxis permite iterar sobre matrices, mientras que la for ... ofsintaxis permite iterar sobre objetos.
CoffeeScript ha sido criticado por sus inusuales reglas de alcance . [ 16 ] [ 17 ] En particular, prohíbe por completo el sombreado de variables , lo que dificulta el razonamiento sobre el código y lo hace propenso a errores en algunos patrones de programación básicos establecidos y dados por sentados desde que se definieron los principios de la programación procedimental .
Por ejemplo, con el siguiente fragmento de código en JavaScript no es necesario mirar fuera del {}bloque para saber con seguridad que ninguna foovariable posible en el ámbito externo puede ser sobrescrita incidentalmente:
// ... function baz () { var foo = "bar" ; console . log ( `foo = ${ foo } ` ); } // ... }En CoffeeScript no hay forma de saber si el ámbito de una variable está limitado a un bloque o no sin mirar fuera de ese bloque.
Desarrollo y distribución
El compilador CoffeeScript se ha autoalojado desde la versión 0.5 y está disponible como una utilidad de Node.js ; sin embargo, el compilador principal no depende de Node.js y puede ejecutarse en cualquier entorno JavaScript . [ 18 ] Una alternativa a la utilidad de Node.js es el Coffee Maven Plugin, un complemento para el sistema de compilación Apache Maven . El complemento utiliza el motor JavaScript Rhino escrito en Java .
El sitio oficial CoffeeScript.org tiene un botón "Probar CoffeeScript" en la barra de menú; al hacer clic en él, se abre una ventana modal donde los usuarios pueden ingresar código CoffeeScript, ver el resultado en JavaScript y ejecutarlo directamente en el navegador. El sitio js2coffee [ 19 ] ofrece traducción bidireccional.
Últimas incorporaciones
- Los mapas de origen permiten a los usuarios depurar su código CoffeeScript directamente, y admiten el rastreo de errores de CoffeeScript en caso de errores en tiempo de ejecución.
- CoffeeScript admite una forma de programación literaria , utilizando la extensión de archivo
.coffee.md.html.litcoffee. Esto permite escribir el código fuente en Markdown . El compilador tratará los bloques con sangría (la forma en que Markdown indica el código fuente) como código e ignorará el resto como comentarios.
Extensiones
Iced CoffeeScript es un superconjunto de CoffeeScript que añade dos nuevas palabras clave: awaity defer. Estas adiciones simplifican el flujo de control asíncrono, haciendo que el código se parezca más a un lenguaje de programación procedimental , eliminando la cadena de devoluciones de llamada. Se puede usar en el lado del servidor y en el navegador. [ 20 ]
Adopción
El 13 de septiembre de 2012, Dropbox anunció que su código base del lado del navegador había sido reescrito de JavaScript a CoffeeScript, [ 21 ] sin embargo, fue migrado a TypeScript en 2017. [ 22 ]
La guía de estilo interna de GitHub decía una vez "escribe el nuevo JS en CoffeeScript", aunque ya no lo hace, [ 23 ] y su editor de texto Atom también estaba escrito en ese lenguaje, con la configuración escrita en CSON ("CoffeeScript Object Notation"), una variante de JSON . [ 24 ] [ 25 ]
Pixel Game Maker MV utiliza CoffeeScript como parte de su entorno de desarrollo de juegos. [ 26 ]
Véase también
Referencias
- ↑ "2.7.0" . 24 de abril de 2022. Consultado el 9 de agosto de 2022 .
- ↑ https://coffeescript.org/ "CoffeeScript toma prestadas las comparaciones encadenadas de Python"
- ↑ Heller, Martin (18 de octubre de 2011). "Desprecia a Dart y descubre CoffeeScript" . InfoWorld . Consultado el 15 de julio de 2020 .
- ↑ MacCaw, Alex (28 de febrero de 2012). El pequeño libro sobre CoffeeScript: Guía del desarrollador de JavaScript para crear mejores aplicaciones web (1.ª ed.). O'Reilly Media . ISBN 978-1-4493-2105-5.
- ↑ Thomas, Lucas (2017). El pequeño libro sobre CoffeeScript (1.ª ed.). CreateSpace Independent Publishing Platform. ISBN 978-1-5472-1072-5.
- ↑ Peek, Josh (13 de abril de 2011). "Tweet de un miembro del equipo principal de Rails" .
- ↑ "AssetsCoffeeScript - 2.5.x" . www.playframework.com . Consultado el 31 de octubre de 2016 .
- ↑ Eich, Brendan. " La armonía de mis sueños "
- ↑ Eich, Brendan. " Mi presentación en JSConf.US "
- ↑ Github. 'Commit inicial del lenguaje misterioso'
- ↑ Hacker News. Anuncio de CoffeeScript 1.0.0 publicado por Jeremy Ashkenas el 24 de diciembre de 2010.
- ↑ Hacker News. Anuncio original de CoffeeScript publicado por Jeremy Ashkenas el 24 de diciembre de 2009.
- ↑ coffeescript.org Anunciando CoffeeScript 2
- ↑ CoffeeScript llama a esto " coincidencia de patrones ", que es un uso no estándar de ese término.
- ↑ "Página oficial de CoffeeScript" . Consultado el 20 de noviembre de 2013 .
- ↑ "El problema del alcance implícito en CoffeeScript" . Consultado el 13 de octubre de 2018 .
- ↑ "El alcance de CoffeeScript es una locura" . 25 de julio de 2013. Consultado el 13 de octubre de 2018 .
- ↑ CoffeeScript archivado el 27/04/2012 en Wayback Machine . Jashkenas.github.com. Consultado el 21/07/2013.
- ↑ Sta Cruz, Rico. "js2coffee" . Consultado el 11 de mayo de 2014 .
- ↑ "Sitio web oficial de IcedCoffeeScript" .
- ↑ Wheeler, Dan; Mahkovec, Ziga; Varenhorst, Chris (13 de septiembre de 2012). "Dropbox se adentra en CoffeeScript" . Recuperado el 11 de mayo de 2013 .
- ↑ Goldstein, David (13 de mayo de 2020). "La gran migración de CoffeeScript a TypeScript de 2017" . Dropbox.Tech . Recuperado el 30 de junio de 2020 .
- ↑ "JavaScript · Styleguide · GitHub" . Github.com. Archivado del original el 15 de agosto de 2013. Consultado el 30 de noviembre de 2015 .
- ↑ "Código fuente de Atom" . GitHub . Consultado el 26 de junio de 2021 .
- ↑ "Personalización básica" . Manual de vuelo de Atom . GitHub . Archivado del original el 29 de abril de 2024. Consultado el 29 de abril de 2024 .
- ↑ Cullen, Daniel. "Pixel Game Maker MV (PC)" . Christ Centered Gaming . Consultado el 15 de enero de 2021 .
Lecturas adicionales
- Lee, Patrick (14 de mayo de 2014). CoffeeScript en acción (1.ª ed.). Manning Publications . pág. 432. ISBN 978-1617290626.
- Grosenbach, Geoffrey (12 de mayo de 2011). Conozca CoffeeScript (1.ª ed.). PeepCode.
- Bates, Mark (31 de mayo de 2012). Programación en CoffeeScript (1.ª ed.). Addison-Wesley . pág. 350. ISBN 978-0-321-82010-5.
- Burnham, Trevor (3 de agosto de 2011). CoffeeScript: Desarrollo acelerado de JavaScript (1.ª ed.). Pragmatic Bookshelf . pág . 138. ISBN 978-1934356784.
- Lenguajes de programación dinámicos
- Lenguajes de programación creados en 2009
- Familia de lenguajes de programación JavaScript
- Lenguajes de programación basados en prototipos
- Software que utiliza la licencia MIT.
- Compiladores de código fuente a código fuente
- Lenguajes de programación de alto nivel
- Software de 2009
- Proyectos de software libre
- Lenguajes de scripting