L'erreur fréquente est de tenter de reprendre tel quel le code javascript. Aussi j'ai réalisé une vidéo explicative sur les modalités de re-factorisation d'un code javascript en coffeescript.
Je suis parti d'une application javascript générée pour le framework Express.
Pour des raisons de taille j'ai fractionné le vidéo en deux parties. Elles disponibles sur youtube respectivement ici pour la partie I et ici pour la partie II.
Les slides de la présentation et les videos intégrées sont disponibles également sur le site slideshare.
Il est possible de travailler directement en coffeescript sur des applications d'Express avec les produits : Zappa et Express-Coffee
Le résultat de la re-factorisation est le suivant:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
express = require 'express' | |
routes = require './routes' | |
http = require 'http' | |
app = express() | |
middleware = () -> | |
app.set 'port', process.env.PORT || 3000 | |
app.set 'views', __dirname + '/views' | |
app.set 'view engine', 'ejs' | |
app.use express.favicon() | |
app.use express.logger('dev') | |
app.use express.bodyParser() | |
app.use express.methodOverride() | |
app.use app.router | |
app.use express.static(__dirname + '/public') | |
error = () -> | |
app.use express.errorHandler() | |
app.configure middleware | |
app.configure 'development',error | |
app.get '/', routes.index | |
port = app.get 'port' | |
mesdg = () -> | |
console.log "Express server listening on port " + port | |
monserveur = http.createServer app | |
monserveur.listen port , mesdg |
- J'élimine les ';' et les mots clés 'var'.
- Les fonctions sont appelées sans les parenthèses autour des paramètres sauf pour les appels de fonction sans paramètre.
- Les fonctions anonymes sont sorties des blocs pour devenir des fonctions nommées.
- Les appels de fonction chaînés par un '.' sont individualisés.