2 min read

I <3 Coffescript

Per anni ho giudicato la sintassi di ruby "la mia sintassi", concisa, potente, semplice e al tempo stesso ho sempre giudicato javascript un male necessario. La gran parte del javascript scritto nelle pagine web è un accrocchio, è difficile da leggere e strutturato male.

Tuttavia la programmazione (web) sta tornando sempre più lato client, quindi javascript lo standard de-facto della programmazione web lato client non può essere ignorato da qualsiasi programmatore lato server, PHP, Ruby, Python, Java che sia.

Dunque, bisogna arrendersi?
No

Cos'è Coffeescript

In passato alcuni hanno provato a convertire tipo Ruby in Javascript, ma vista la diversità dei linguaggi, questi progetti non sono mai stati usati in progetti reali, per fortuna Jeremy Ashkenas ha trovato un modo per farci digerire il male minore: Coffeescript.

Coffescript è un compilatore scritto in Coffeescript (la prima versione era in Ruby) che permette di transcompilare o "tradurre" del "javascript leggibile e coinciso" in Javascript. Questa compilazione può avvenire lato client nel browser (solo per test) o lato server, tramite V8.
Tutte le librerie scritte in javascript (es. jQuery) possono essere richiamate da Coffeescript e il file javascript ottenuto è javascript quindi non cambia nulla lato browser web.

Esempio

Potrei farvi una spiegazione dei construtti base di questo linguaggio, ma la documentazione ufficiale è ottima. Preferisco trattare subito un caso d'uso classico (struttura ad oggetti + callback) e sono sicuro che un qualsiasi professionista web poliglotta sarà in grado di decifrarlo.


class Countdown

constructor: (count) ->
@self = @
@count = @default_count = count
@display_ui = $('#display')

stop: (cb=->) ->
clearTimeout(@tick)
cb()

reset: ->
console.log 'reset'
@display_ui.html @self.default_count
@self.stop(=> @count = @self.default_count )

run: ->
if @count > 0
@count--
@display_ui.html @count
@tick = setTimeout (=> @self.run() ), 1000
else
@self.reset()

main

$ ->

c = new Countdown(20)

bind events

$('#start_btn').click -> c.run()
$('#stop_btn').click -> c.stop()
$('#reset_btn').click -> c.reset()​

http://jsfiddle.net/Rg5ra/

http://jsfiddle.net/Uefcg/ (grazie a Federico per una versione migliorata)

Qualche nota:

  • @self = @ Non è specifico di Coffeescript, ma è un modo per accedere a this del costruttore e ai suoi metodi anche dalle callback.
  • stop: (cb=->) -> Abbiamo la possibilità di passare valori di default come argomenti
  • -> vs => In entrambi i casi avvolgono il codice indentato con una function(){ code_here } ma nel primo caso non è possibile accedere ai metodi dell'oggetto.

Per maggiori informazioni guardate il codice javascript generato su jsfiddle e provate con la documentazione interattiva. Se non siete ancora convinti sull’utilità di questa piccola astrazione, cliccate qui.