CoffeeScript

Revisión del 10:06 16 ene 2014 de Adrianeth jc.jiguani2 (discusión | contribuciones) (Página creada con '{{ Ficha Software |nombre= CoffeeScript |familia=Lenguajes de Programación Estructurada. |imagen=Coffeescript.png |descripción= Lenguaje de Programación Web Estructurada. |cr...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
CoffeeScript
Información sobre la plantilla
Parte de la familia Lenguajes de Programación Estructurada.
Coffeescript.png
Lenguaje de Programación Web Estructurada.
CreadorJeremy Ashkenas
Lanzamiento inicial2010
IdiomaInglés

CoffeeScript es un lenguaje de programación estructurado que se compila a JavaScript y que se ha tornado muy popular dentro de la comunidad Node.js y Rails. Básicamente es una reescritura sintáctica de JavaScript. La sintaxis que utiliza CoffeeScript es muy parecida a Ruby o Python. El código en archivos .coffee no se interpreta como JavaScript, sino que se compila a archivos .js. Este lenguaje inspirado en Ruby, Python y Haskell permite mejorar la brevedad y la legibilidad de JavaScript, y añade características más sofisticadas, como la comprensión de listas y la coincidencia de patrones. CoffeeScript compila previsiblemente a JavaScript y los programas se pueden escribir por lo general en 1/3 menos de líneas de código sin ningún efecto en el rendimiento ni en el tiempo de ejecución.

Historia

Jeremy Ashkenas comenzó con el proyecto CoffeeScript el 13 de Diciembre del 2009 con un misterioso e intrigante comentario en su primer commit en GitHub "initial commit of the mystery language". Comenzó creando el compilador en Ruby pero en apenas 3 meses cambio de idea e hizo que el compilador estuviese escrito con su propio lenguaje, CoffeeScript. El 24 de diciembre, hizo el primer lanzamiento etiquetados y documentados, 0.1.0. El 21 de febrero de 2010, publicó la versión 0.5, que sustituyó al compilador de Ruby con uno escrito en CoffeeScript puro El proyecto pronto fue seguido por multitud de desarrolladores en GitHub, donde tanto Jeremy como el resto de contribuyentes añadían nuevas características cada mes. El 24 de diciembre de 2010, Ashkenas anunció el lanzamiento de estable 1.0.0 en Hacker News, el sitio donde se anunció el proyecto por primera vez. El lenguaje volvió a tener un empujón en la escena web, cuando en Abril del 2011 David Heinemeier Hansson confirmó los rumores que decían que CoffeeScript iba a estar incluido en la versión 3.1 de Ruby on Rails.

Ventajas de utilizar CoffeeScript

  • Así como los preprocesadores CSS nos ayudan a escribir CSS de forma más simple, CoffeeScript nos permite trabajar de forma más sencilla con el código JavaScript.
  • Podemos escribir menos código, sabiendo que además vamos a estar siguiendo buenas prácticas y nuestro proyecto será más legible.
  • Es una buena idea leer el resultado compilado de nuestro código, ya que como CoffeeScript sigue patrones establecidos, podemos aprender varias cosas nuevas.
  • Brinda varias Formas de Trabajo.

Formas de Trabajo

  • REPL: Si en la consola escribimos el comando coffee sin parámetros, se abrirá un shell interactivo parecido al IRB de Ruby. Es una buena herramienta para experimentos rápidos.
  • Compilación a demanda: Podemos indicarle a CoffeeScript que queremos compilar todos los archivos de un directorio y que el resultado lo coloque en otro directorio. Para ello, tenemos que ejecutar el siguiente comando:
coffee -o directorioSalida/ -c directorioEntrada/
  • Compilación al vuelo: De la forma anterior, cada vez que hacemos un cambio y queremos que se compile, tenemos que ejecutar el comando. Si en su lugar queremos que CoffeScript esté vigilando si hay cambios y que automáticamente compile, podemos ejecutar este comando:
coffee -w -o directorioSalida/ -c directorioEntrada/
  • Compilación en un solo archivo: Las opciones anteriores producirán un archivo JavaScript por cada archivo CoffeeScript. Muchos archivos JavaScript incrementan la cantidad de peticiones HTTP del navegador. Para evitarlo, podemos hacer que todos los archivos compilen en uno solo:
coffee -j directorioSalida/archivo.js -c directorioEntrada/*.coffee

Sintaxis

Muchas sentencias de JavaScript se pueden utilizar como expresiones en CoffeeScript, por ejemplo if, switch y for. Estas declaraciones de control también tienen versiones de Postfix. Un principio general es que muchos de los paréntesis son innecesarios y se pueden omitir ya que la sangría puede ser utilizada en lugar de la llaves para denotar bloques de código, las llamadas a funciones son implícitas (los paréntesis necesarios para una llamada a una función en JavaScript se puede omitir), los literales de objetos son a menudo detectados automáticamente, y así sucesivamente.

Compilación

El compilador CoffeeScript se ha escrito en CoffeeScript desde la versión 0.5 y está disponible como una utilidad de Node.js, sin embargo, el núcleo del compilador no se basa en Node.js y se puede ejecutar como cualquier JavaScript. Una alternativa a la utilidad de Node.js es el Coffee Maven Plugin, un plugin para el popular sistema de construcción Apache Maven. El complemento utiliza el motor de JavaScript Rhino, que está escrito en Java. El sitio oficial CoffeeScript.org tiene una sección llamada «Try CoffeeScript» en la barra de menú, haciendo clic en él se abre una ventana modal en la que los usuarios pueden introducir código CoffeeScript, ver la salida en JavaScript, y ejecutarlo directamente en el navegador. El sitio js2coffee ofrece traducción bi-direccional.

Ejemplos de Código

  • Variables: En CoffeeScript, las variables no requieren la palabra reservada var. Solamente indicamos su nombre y el valor que va a poseer.
nombre = "Minombre"
edad = 25

Con los strings, podemos utilizar el símbolo # seguido de llaves, para agregar el contenido de una variable a otra:

// mostrará Minombre Apellido
apellido = "#{nombre} Apellido" 
  • Funciones: Las funciones se definen de la siguiente manera.
   ...
No se indica la palabra return, ya que siempre se devuelve el resultado de la última línea de código.
saludar = ->
   "Hola mundo"

saludo = (nombre) ->
   "Hola #{nombre}"

Las funciones pueden llamarse utilizando o no los paréntesis:

saludo "Minombre"
  • Arreglos: Se pueden inicializar arreglos de diferentes formas.
//1 - una sola línea
arreglo = ["Hola", "como", "estan?"]
//2 - multi línea
arreglo = [
   "Hola", 
   "como", 
   "estan?"
]
// 3 - sin comas
arreglo = [
   "Hola" 
   "como" 
   "estan?"
]
//4 - mezcla
arreglo = [
   "Hola", "como", 
   "estan?"
]
  • Objetos: Al crear objetos JSON, podemos evitar las comas y las llaves.
Object = 
   miembro: 
       nombre: "Gene Simmons",
       instrumento: "bajo"
   miembro: 
       nombre: "Paul Stanley",
       instrumento: "guitarra"
   miembro: 
       nombre: "Ace Frehley",
       instrumento: "guitarra"
   miembro: 
       nombre: "Peter Criss",
       instrumento: "batería"
  • Rangos: Los rangos no son una estructura estándar de JavaScript, por lo cual se compilan como arreglos. Se crean indicando dos enteros separados por dos puntos en medio de corchetes.
dias = [1..7]
  • Clases: Las clases se crean indicando la palabra class en conjunto con el nombre de la misma. Los métodos que posea esta, se indican con dos puntos seguidos del operador ->.

Los atributos de la clase se indican con una arroba.

// forma 1
class Auto
   constructor: (marca) ->
       @marca = marca

// forma 2 - indicando la propiedad en la lista de argumentos
class Auto
   constructor: (@marca) -> 

Para crear una instancia de la clase se utiliza el operador new.

miAuto = new Auto
  • Equivalencias: CoffeeScript nos provee de alias para los operadores de JavaScript, lo cual ayuda a que nuestro código sea más legible.
COFFEESCRIPT            JAVASCRIPT
is                      ===
isnt                    !==
not                     !
and                     &&
or                      ||
yes, on                 true
no, off                 false
of                      in

Por ejemplo:

// CoffeeScript
mostrar() if luz is on

// JavaScript
if(luz === true) {
   mostrar();
}

Además, nos provee de un operador nuevo llamado "operador existencial"; el cual es un signo de pregunta ?. Este operador nos devuelve verdadero a menos que la variable sea null o undefined.

// CoffeeScript
volumen = 5 if musica?

// JavaScript
if(typeof musica !== "undefined" && musica !== null) {
   volumen = 5;
}

Referencias