<linkrel="alternate"lang="fr"xml:lang="fr"title="Pourquoi je n'utiliserai pas CoffeeScript (malheureusement)"type="text/html"hreflang="fr"href="/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"/>
<linkrel="alternate"lang="en"xml:lang="en"title="Why I won't use CoffeeScript (sadly)"type="text/html"hreflang="en"href="/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"/>
<p><spanclass="sc"><abbrtitle="Trop long à lire">tlàl</abbr> : </span> Qu’est-ce qui n’allait pas avec Coffeescript? La meta-programmation, il faut le “vendre” aux autres, une nouvelle étape de compilation intermédiaire sans fournir les avantages de Cappuccino, la sensation que c’est un peu instable.</p>
<p>Le commentaire le mieux classé de <ahref="http://news.ycombinator.com/item?id=2053956">la question suivante</a> posée sur HackerNews mentionnait <ahref="http://coffeescript.org">CoffeeScript</a>.
Récemment j’ai beaucoup programmé en javascript.
Je me suis décidé à créer mon propre framework MVC minimal pour client javascript.<supid="fnref:1"><ahref="#fn:1"rel="footnote">1</a></sup></p>
<p>Je me suis battu avec l’horrible syntaxe de javascript. C’était comme revenir des années dans le passé :</p>
<ul>
<li>une syntaxe à la Java très verbeuse ;</li>
<li>une syntaxe follement verbeuse et étrange pour la programmation orientée objet ;</li>
<li>pas de manière naturelle de se référer à l’instance d’une classe ;</li>
<li>etc…</li>
</ul>
<p>J’étais tellement ennuyé par tous ces point qu’il était arrivé un moment où je commençais à vouloir faire mon propre CoffeeScript.</p>
<p>J’ai fini une première version de mon framework MVC en javascript et j’ai appris l’existence de CoffeeScript. Merci à git, j’ai immédiatement créé une nouvelle branche dans le seul but d’essayer CoffeeScript.</p>
<p>Voici mon expérience :</p>
<ol>
<li>J’ai dû installer <code>node.js</code> et utiliser <code>npm</code> simplement pour utiliser CoffeeScript. Ce n’était pas très difficile, mais pas aussi facile que ce que j’aurai aimé.</li>
<li>Les fichier javascript existants ne sont pas compatible avec coffee.</li>
<li>Il n’y a pas script pour aider à transformer les anciens fichiers javascripts en fichier coffee. Du coups j’ai dû faire ça manuellement.
Merci à <ahref="http://vim.org">vim</a>, il ne fut pas très difficile de transformer 90% des fichiers avec des expressions régulières.
L’option <code>--watch</code> de coffee était très utile pour debugger cette transformation.
Cependant, il m’a fallu écrire mon propre script pour que tous mes fichiers soient <em>watchés</em> dans tous les sous-répertoires.</li>
<li>Quelque chose à laquelle je n’avais pas pensé. J’ai fait un peu de meta-programmation en javascript en utilisant <code>eval</code>. Mais pour que celà fonctionne correctement, il faut que la chaîne de caractère que je passe à <code>eval</code> soit codée en javascript et pas en coffee. C’est un peu comme écrire dans deux langages différents au même endroit. Ça ne me parraissait vraiment pas agréable.</li>
</ol>
<h2id="conclusion">Conclusion</h2>
<p>Avantages :</p>
<ul>
<li>Code plus lisible : CoffeeScript résoud la majorité des problèmes de syntaxes de javascript</li>
<li>Concision : j’ai gagné 14% de lignes, 22% de mots et 14% de caractères.</li>
</ul>
<p>Inconvénients :</p>
<ul>
<li>Ajout d’une nouvelle étape de compilation avant de pouvoir vérifier le comportement de mon site</li>
<li>Facilité d’utilisation : il m’a fallu créer un script pour gérer la génératio automatique des fichiers</li>
<li>Il faut apprendre un autre langage proche de ruby</li>
<li>La meta-programmation devient une expérience désagréable</li>
<li>Je dois convaincre les personnes travaillant avec moi :
<ul>
<li>d’installer <code>node.js</code>, <code>npm</code> et CoffeeScript ;</li>
<li>de se souvenir de lancer un script à chaque session de codage ;</li>
<li>d’apprendre un autre language proche de ruby.</li>
<p>Sachant celà, la notation <code>@</code> perd tout son intérêt pour moi.</p>
<hr/><divclass="footnotes">
<ol>
<liid="fn:1">
<p>Je sais que ce n’est certainement ni la meilleure ni la plus productive des décisions. Mais j’aime bien fabriquer les choses pour savoir comment tout fonctionne dans le détail.<ahref="#fnref:1"rev="footnote">↩</a></p>
</li>
<liid="fn:2">
<p>Je sais qu’il existe un projet <code>rb2js</code>, mais il ne résoud pas le problème dont je parle.<ahref="#fnref:2"rev="footnote">↩</a></p>