<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><em>Mise à jour :</em> Je pense que je vais finallement changer d’avis.
Pourquoi ?
Tout d’abord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf m’a laissé un commentaire et m’a appris l’existence d’une fonction <code>CoffeeScript.eval</code>. De plus, il faut voir CoffeeScript comme javascript avec une syntaxe similaire à Ruby et pas comme un langage similaire à Ruby.</p>
<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>
</div>
<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>
</ul>
</li>
</ul>
<p>Les deux derniers points étant de mon point de vue les plus problématiques.</p>
<p>Mais même si j’avais à travailler seul, je n’utiliserai certainement pas CoffeeScript.
Il s’agit d’un tier dont la moindre mise à jour pourrait rendre mon code inutilisable.
Cette situation m’est déjà arrivée plusieurs fois et c’est très désagrable.
Beaucoup plus que coder avec une mauvaise syntaxe.</p>
<h2id="digression">Digression</h2>
<p>Je suis attristé.
J’espérais tant pouvoir programmer Javascript avec une touche de Ruby.
En fin de compte, cette solution n’est pas pour moi.
Je vais devoir utiliser l’<em>horrible</em> syntaxe javascript pour l’instant.
À la limite j’aurai préféré un script Ruby2Js par exemple<supid="fnref:2"><ahref="#fn:2"rel="footnote">2</a></sup>.
Mais il me semble que ça serait un travail très difficile rien que pour simuler l’accès à la classe courante. </p>
<p>Typiquement <code>@x</code> est transformé en <code>this.x</code>. Mais le code suivant ne fait pas ce que j’attendrai de lui.</p>
<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>