De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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, switchy las forexpresiones (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, iftambién se puede escribir en consequent if conditionforma.

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 untilasignació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 ... insintaxis permite recorrer matrices, mientras que la for ... ofsintaxis permite recorrer objetos.

La ?palabra clave comprueba rápidamente si una variable es nullo 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 nullo undefinedy "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 functionpalabra 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 foovariable 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.mdo .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: awaity 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 ]

  1. ^ "Versión 2.5.1" . 31 de enero de 2020 . Consultado el 1 de febrero de 2020 .
  2. ^ https://coffeescript.org/ "CoffeeScript toma prestadas comparaciones encadenadas de Python"
  3. ^ Heller, Martin (18 de octubre de 2011). "Levanta la nariz a Dart y huele el CoffeeScript" . InfoWorld . Consultado el 15 de julio de 2020 .
  4. ^ Alex MacCaw (enero de 2012). El librito sobre CoffeScript . O'Reilly Media . ISBN 978-1-4493-2105-5.
  5. ^ Josh Peek (13 de abril de 2011). "Tweet por miembro del equipo principal de Rails" .
  6. ^ "AssetsCoffeeScript - 2.5.x" . www.playframework.com . Consultado el 31 de octubre de 2016 .
  7. ^ Eich, Brendan. " Armonía de mis sueños "
  8. ^ Eich, Brendan. " Mi presentación JSConf.US "
  9. ^ Github. 'compromiso inicial del lenguaje misterioso'
  10. ^ Noticias de hackers. Anuncio de CoffeeScript 1.0.0 publicado por Jeremy Ashkenas el 24 de diciembre de 2010
  11. ^ Noticias de hackers. Anuncio original de CoffeeScript publicado por Jeremy Ashkenas el 24 de diciembre de 2009
  12. ^ coffeescript.org Anunciando CoffeeScript 2
  13. ^ CoffeeScript llama a esto " coincidencia de patrones ", que es un uso no estándar de ese término.
  14. ^ "Página oficial de CoffeeScript" . Consultado el 20 de noviembre de 2013 .
  15. ^ "El problema con el alcance implícito en CoffeeScript" . Consultado el 13 de octubre de 2018 .
  16. ^ "El alcance de CoffeeScript es una locura" . Consultado el 13 de octubre de 2018 .
  17. ^ CoffeeScript Archivado el 27 de abril de 2012 en la Wayback Machine . Jashkenas.github.com. Consultado el 21 de julio de 2013.
  18. ^ Sta Cruz, Rico. "js2coffee" . Consultado el 11 de mayo de 2014 .
  19. ^ "Sitio web oficial de IcedCoffeeScript" .
  20. ^ Wheeler, Dan; Mahkovec, Ziga; Varenhorst, Chris (13 de septiembre de 2012). "Dropbox se sumerge en CoffeeScript" . Consultado el 11 de mayo de 2013 .
  21. ^ 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 .
  22. ^ "JavaScript · Styleguide · GitHub" . Github.com. Archivado desde el original el 15 de agosto de 2013 . Consultado el 30 de noviembre de 2015 .
  23. ^ Código fuente de Atom . github.com. Consultado el 22 de julio de 2015.
  24. ^ 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