Paradigma | Multi-paradigma : basado en prototipos , funcional , imperativo , scripting |
---|---|
Diseñada por | Jeremy Ashkenas |
Desarrollador | Jeremy Ashkenas |
Apareció por primera vez | 13 de diciembre de 2009 |
Lanzamiento estable | 2.5.1 [1] / 31 de enero de 2020 |
SO | Multiplataforma |
Licencia | Licencia MIT |
Extensiones de nombre de archivo | .coffee, .litcoffee [ cita requerida ] |
Sitio web | coffeescript |
Influenciado por | |
Haskell , JavaScript , Perl , [ cita requerida ] Python , [2] Ruby , YAML [3] | |
Influenciado | |
MoonScript, LiveScript , JavaScript |
CoffeeScript es un lenguaje de programación que se compila en JavaScript . Agrega azúcar sintáctico inspirado en Ruby , Python y Haskell en un esfuerzo por mejorar la brevedad y legibilidad de JavaScript. [4] Las características adicionales específicas incluyen la comprensión de listas y la asignación de desestructuración .
El soporte de CoffeeScript está incluido en Ruby on Rails versión 3.1 [5] y Play Framework . [6] En 2011, Brendan Eich hizo referencia a CoffeeScript como una influencia en sus pensamientos sobre el futuro de JavaScript. [7] [8]
Historia [ editar ]
El 13 de diciembre de 2009, Jeremy Ashkenas realizó la primera confirmación en Git de CoffeeScript con el comentario: "confirmación inicial del lenguaje misterioso". [9] El compilador fue escrito en Ruby. El 24 de diciembre, realizó la primera publicación etiquetada y documentada, 0.1.0. El 21 de febrero de 2010, que cometió la versión 0.5, que sustituyó al compilador de rubí con un autoalojamiento versión en CoffeeScript pura. En ese momento, el proyecto había atraído a varios otros colaboradores en GitHub y recibía 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 para Hacker News , el sitio donde se anunció el proyecto por primera vez. [10] [11]
El 18 de septiembre de 2017, se introdujo la versión 2.0.0, [12] que "apunta a llevar CoffeeScript a la era moderna de JavaScript, cerrando las brechas en la compatibilidad con JavaScript mientras se conserva la sintaxis limpia que es el sello distintivo de CoffeeScript".
Sintaxis [ editar ]
Casi todo es una expresión en CoffeeScript, por ejemplo if
, switch
y las for
expresiones (que no tienen valor de retorno en JavaScript) devuelven un valor. Como en Perl , estas declaraciones de control también tienen versiones postfijas; por ejemplo, if
también se puede escribir en consequent if condition
forma.
Se pueden omitir muchos paréntesis y llaves innecesarias; por ejemplo, los bloques de código se pueden denotar con sangría en lugar de llaves, las llamadas a funciones son implícitas y los objetos literales a menudo se detectan automáticamente.
Para calcular el índice de masa corporal , se puede hacer (aquí en JavaScript ):
masa constante = 72 altura constante = 1.78 const 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 saludable!' si 18,5 < IMC < 25
Para calcular el máximo común divisor de dos enteros con el algoritmo de Euclides , en JavaScript por lo general se necesita un tiempo de bucle:
mcd = ( x , y ) => { do { z = x % y x = y y = z } while ( y ! == 0 ) return x }
Mientras que en CoffeeScript se puede usar una until
asignación de desestructuración [13] en su lugar:
mcd = (x, y) -> [ x , y ] = [ y , x % y ] hasta que y sea 0 x
Cualquier bucle for puede ser reemplazado por una lista de comprensión ; de modo que para calcular los cuadrados de los números impares positivos menores que diez (es decir, números cuyo módulo restante 2 es 1), se puede hacer:
alerta n * n para n en [ 1 .. 10 ] cuando n % 2 es 1
Alternativamente, hay:
alerta n * n para n en [ 1 .. 10 ] por 2
Se puede implementar una búsqueda lineal con una sola línea usando la palabra clave when:
names = [ "Ivan" , "Joanna" , "Nikolay" , "Mihaela" ] linearSearch = (searchName) -> alerta ( nombre ) para el nombre en los nombres cuando el nombre es searchName
La for ... in
sintaxis permite recorrer matrices, mientras que la for ... of
sintaxis permite recorrer objetos.
La ?
palabra clave comprueba rápidamente si una variable es null
o undefined
:
personCheck = -> si no es persona ? luego alert ( "Ninguna persona" ) else alert ( "Tener persona" ) person = null personCheck () person = "Ivan" personCheck ()
Esto alertaría a "Ninguna persona" si la variable es null
o undefined
y "Tener persona" si hay algo allí.
Un fragmento de JavaScript común que usa la biblioteca jQuery es:
$ ( documento ). ready ( function () { // El código de inicialización va aquí })
O incluso simplemente:
$ ( function () { // El código de inicialización va aquí })
En CoffeeScript, la function
palabra clave se reemplaza por el ->
símbolo, y se usa sangría en lugar de llaves, como en otros lenguajes de reglas externos como Python y Haskell. Además, los paréntesis generalmente se pueden omitir, usando el nivel de sangría en su lugar para denotar una función o bloque. Por lo tanto, el equivalente de CoffeeScript del fragmento anterior es:
$ ( documento ). listo -> # El código de inicialización va aquí
O solo:
$ -> # El código de inicialización va aquí
La interpolación de cadenas de estilo Ruby se incluye en CoffeeScript. Las cadenas entre comillas dobles permiten valores interpolados, utilizando # {...}, y las cadenas entre comillas simples son literales. [14]
author = "Wittgenstein" quote = "Una imagen es un hecho. - # { author } "frase = " # { 22 de / 7 } es una aproximación de π decente"
CoffeeScript ha sido criticado por sus inusuales reglas de alcance. [15] [16] En particular, no permite el sombreado de variables que hace que el razonamiento sobre el código sea más difícil y propenso a errores en algunos patrones de programación básicos establecidos y dados por sentado desde que se definieron los principios de programación procedimental .
Por ejemplo, con el siguiente fragmento de código en JavaScript, no es necesario mirar fuera del {}
bloque -bloque para estar seguro de que ninguna foo
variable posible en el alcance externo puede anularse accidentalmente:
// ... function baz () { var foo = "bar" consola . log ( `foo = $ { foo } ` ) } // ... }
En CoffeeScript no hay forma de saber si el alcance de una variable está limitado a un bloque o no sin mirar fuera del bloque.
Desarrollo y distribución [ editar ]
El compilador CoffeeScript ha sido autohospedado desde la versión 0.5 y está disponible como una utilidad Node.js ; sin embargo, el compilador principal no se basa en Node.js y se puede ejecutar en cualquier entorno de JavaScript . [17] Una alternativa a la utilidad Node.js es el complemento Coffee Maven, un complemento para el sistema de compilación Apache Maven . El complemento utiliza el motor JavaScript de Rhino escrito en Java . [ cita requerida ]
El sitio oficial en CoffeeScript.org tiene un botón "Probar CoffeeScript" en la barra de menú; al hacer clic en él, se abre una ventana modal en la que los usuarios pueden ingresar a CoffeeScript, ver la salida de JavaScript y ejecutarlo directamente en el navegador. El sitio js2coffee [18] proporciona traducción bidireccional.
Últimas incorporaciones [ editar ]
- Los mapas de origen permiten a los usuarios eliminar los errores de su código CoffeeScript directamente, lo que respalda los rastreos de CoffeeScript en los errores de tiempo de ejecución.
- CoffeeScript admite una forma de programación literaria , con la extensión de archivo
.coffee.md
o.litcoffee
. Esto permite que el código fuente de CoffeeScript se escriba 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 [ editar ]
Iced CoffeeScript es un superconjunto de CoffeeScript que agrega dos nuevas palabras clave: await
y defer
. Estas adiciones simplifican el flujo de control asincrónico, haciendo que el código se parezca más a un lenguaje de programación procedimental , eliminando la cadena de devolución de llamada. Se puede utilizar en el servidor y en el navegador. [19]
Adopción [ editar ]
El 13 de septiembre de 2012, Dropbox anunció que su base de código del lado del navegador se había reescrito de JavaScript a CoffeeScript, [20] sin embargo, se migró a TypeScript en 2017. [21]
La guía de estilo interna de GitHub decía una vez "escribir JS nuevo en CoffeeScript", y aunque ya no lo hace, todos los consejos en la guía de estilo hacen referencia a cómo escribir un buen CoffeeScript, [22] y su editor de texto Atom también está escrito en idioma. [23]
Pixel Game Maker MV utiliza CoffeeScript como parte de su entorno de desarrollo de juegos. [24]
Ver también [ editar ]
- Haxe
- Nim (lenguaje de programación)
- Smalltalk ámbar
- Clojure
- Dart (lenguaje de programación)
- Kotlin (lenguaje de programación)
- LiveScript
- Opa (lenguaje de programación)
- Elm (lenguaje de programación)
- Mecanografiado
- PureScript
Referencias [ editar ]
- ^ "Versión 2.5.1" . 31 de enero de 2020 . Consultado el 1 de febrero de 2020 .
- ^ https://coffeescript.org/ "CoffeeScript toma prestadas comparaciones encadenadas de Python"
- ^ Heller, Martin (18 de octubre de 2011). "Levanta la nariz a Dart y huele el CoffeeScript" . InfoWorld . Consultado el 15 de julio de 2020 .
- ^ Alex MacCaw (enero de 2012). El librito sobre CoffeScript . O'Reilly Media . ISBN 978-1-4493-2105-5.
- ^ Josh Peek (13 de abril de 2011). "Tweet por miembro del equipo principal de Rails" .
- ^ "AssetsCoffeeScript - 2.5.x" . www.playframework.com . Consultado el 31 de octubre de 2016 .
- ^ Eich, Brendan. " Armonía de mis sueños "
- ^ Eich, Brendan. " Mi presentación JSConf.US "
- ^ Github. 'compromiso inicial del lenguaje misterioso'
- ^ Noticias de hackers. Anuncio de CoffeeScript 1.0.0 publicado por Jeremy Ashkenas el 24 de diciembre de 2010
- ^ Noticias de hackers. 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 con el alcance implícito en CoffeeScript" . Consultado el 13 de octubre de 2018 .
- ^ "El alcance de CoffeeScript es una locura" . Consultado el 13 de octubre de 2018 .
- ^ CoffeeScript Archivado el 27 de abril de 2012 en la Wayback Machine . Jashkenas.github.com. Consultado el 21 de julio de 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 sumerge en CoffeeScript" . Consultado el 11 de mayo de 2013 .
- ^ Goldstein, David (13 de mayo de 2020). "La gran migración de CoffeeScript a mecanografiado de 2017" . Dropbox.Tech . Consultado el 30 de junio de 2020 .
- ^ "JavaScript · Styleguide · GitHub" . Github.com. Archivado desde el original el 15 de agosto de 2013 . Consultado el 30 de noviembre de 2015 .
- ^ Código fuente de Atom . github.com. Consultado el 22 de julio de 2015.
- ^ Cullen, Daniel. "PIXEL GAME MAKER MV (PC)" . Juegos centrados en Cristo . Consultado el 15 de enero de 2021 .
Lectura adicional [ editar ]
- Lee, Patrick (14 de mayo de 2014). CoffeeScript en acción (Primera ed.). Publicaciones Manning . pag. 432. ISBN 978-1617290626.
- Grosenbach, Geoffrey (12 de mayo de 2011). "Conoce CoffeeScript" (Primera ed.). PeepCode . Cite journal requiere
|journal=
( ayuda ) - Bates, Mark (31 de mayo de 2012). Programación en CoffeeScript (Primera ed.). Addison-Wesley . pag. 350. ISBN 978-0-321-82010-5.
- MacCaw, Alex (31 de enero de 2012). The Little Book on CoffeeScript (Primera ed.). O'Reilly Media . pag. 62. ISBN 978-1449321055.
- Burnham, Trevor (3 de agosto de 2011). CoffeeScript: Desarrollo acelerado de JavaScript (Primera edición). Estantería pragmática . pag. 138 . ISBN 978-1934356784.
Enlaces externos [ editar ]
- Página web oficial