her.esy.fun/src/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html

165 lines
12 KiB
HTML
Raw Normal View History

2021-04-18 10:23:24 +00:00
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>YBlog - Pas de CoffeeScript pour moi (malheureusement)</title>
<meta name="keywords" content="Coffeescript" />
<link rel="shortcut icon" type="image/x-icon" href="../../../../Scratch/img/favicon.ico" />
2022-10-26 09:38:50 +00:00
<link rel="stylesheet" type="text/css" href="../../../../css/y.css" />
2021-05-25 20:25:47 +00:00
<link rel="stylesheet" type="text/css" href="/css/legacy.css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
2021-04-18 10:23:24 +00:00
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="apple-touch-icon" href="../../../../Scratch/img/about/FlatAvatar@2x.png" />
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->
<!-- IndieAuth -->
<link href="https://twitter.com/yogsototh" rel="me">
<link href="https://github.com/yogsototh" rel="me">
<link href="mailto:yann.esposito@gmail.com" rel="me">
<link rel="pgpkey" href="../../../../pubkey.txt">
</head>
<body lang="fr" class="article">
<div id="content">
<div id="header">
<div id="choix">
<span id="choixlang">
<a href="../../../../Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/">Anglais</a>
</span>
<span class="tomenu"><a href="#navigation">↓ Menu ↓</a></span>
<span class="flush"></span>
</div>
</div>
<div id="titre">
<h1>Pas de CoffeeScript pour moi (malheureusement)</h1>
</div>
<div class="flush"></div>
<div id="afterheader" class="article">
<div class="corps">
<div>
<img src="../../../../Scratch/img/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/main.png" alt="Title image" />
</div>
<div class="encadre">
<p><em>Mise à jour :</em> Je pense que je vais finallement changer davis. Pourquoi ? Tout dabord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf ma laissé un commentaire et ma appris lexistence dune 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>
</div>
<div class="intro">
<p><span class="sc"><abbr title="Trop long; pas lu">tlpl</abbr>: </span> Quest-ce qui nallait 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 cest un peu instable.</p>
</div>
<p>Le commentaire le mieux classé de <a href="http://news.ycombinator.com/item?id=2053956">la question suivante</a> posée sur HackerNews mentionnait <a href="http://coffeescript.org">CoffeeScript</a>. Récemment jai beaucoup programmé en javascript. Après avoir essayé <a href="http://sproutcore.com">Sroutcore</a>, <a href="http://cappuccino.org">Cappuccino</a>, <a href="http://wiht.link/backbonejs-intro">backbone.js</a> <em>&amp;</em> <a href="http://javascriptmvc.com">javascriptMVC</a>, Je me suis décidé à créer mon propre framework MVC minimal pour client javascript.<a href="#fn1" class="footnote-ref" id="fnref1"><sup>1</sup></a></p>
<p>Je me suis battu avec lhorrible syntaxe de javascript. Cétait comme revenir des années dans le passé&nbsp;:</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 à linstance dune classe ;</li>
<li>etc…</li>
</ul>
<p>Jétais tellement ennuyé par tous ces point quil était arrivé un moment où je commençais à vouloir faire mon propre CoffeeScript.</p>
<p>Jai fini une première version de mon framework MVC en javascript et jai appris lexistence de CoffeeScript. Merci à git, jai immédiatement créé une nouvelle branche dans le seul but dessayer CoffeeScript.</p>
<p>Voici mon expérience&nbsp;:</p>
<ol type="1">
<li>Jai 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 jaurai aimé.</li>
<li>Les fichier javascript existants ne sont pas compatible avec coffee.</li>
<li>Il ny a pas script pour aider à transformer les anciens fichiers javascripts en fichier coffee. Du coups jai dû faire ça manuellement. Merci à <a href="http://vim.org">vim</a>, il ne fut pas très difficile de transformer 90% des fichiers avec des expressions régulières. Loption <code>--watch</code> de coffee était très utile pour debugger cette transformation. Cependant, il ma 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 navais pas pensé. Jai 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. Cest un peu comme écrire dans deux langages différents au même endroit. Ça ne me parraissait vraiment pas agréable.</li>
</ol>
<h2 id="conclusion">Conclusion</h2>
<p>Avantages&nbsp;:</p>
<ul>
<li>Code plus lisible : CoffeeScript résoud la majorité des problèmes de syntaxes de javascript</li>
<li>Concision : jai gagné 14% de lignes, 22% de mots et 14% de caractères.</li>
</ul>
<p>Inconvénients&nbsp;:</p>
<ul>
<li>Ajout dune nouvelle étape de compilation avant de pouvoir vérifier le comportement de mon site</li>
<li>Facilité dutilisation : il ma 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>dinstaller <code>node.js</code>, <code>npm</code> et CoffeeScript ;</li>
<li>de se souvenir de lancer un script à chaque session de codage ;</li>
<li>dapprendre 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 javais à travailler seul, je nutiliserai certainement pas CoffeeScript. Il sagit dun tier dont la moindre mise à jour pourrait rendre mon code inutilisable. Cette situation mest déjà arrivée plusieurs fois et cest très désagrable. Beaucoup plus que coder avec une mauvaise syntaxe.</p>
<h2 id="digression">Digression</h2>
<p>Je suis attristé. Jespérais tant pouvoir programmer Javascript avec une touche de Ruby. En fin de compte, cette solution nest pas pour moi. Je vais devoir utiliser l<em>horrible</em> syntaxe javascript pour linstant. À la limite jaurai préféré un script Ruby2Js par exemple<a href="#fn2" class="footnote-ref" id="fnref2"><sup>2</sup></a>. Mais il me semble que ça serait un travail très difficile rien que pour simuler laccè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 jattendrai de lui.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode ruby"><code class="sourceCode ruby"><a class="sourceLine" id="cb1-1" title="1">-&gt; </a>
<a class="sourceLine" id="cb1-2" title="2"><span class="kw">class</span> <span class="dt">MyClass</span></a>
<a class="sourceLine" id="cb1-3" title="3"> <span class="st">foo: </span>-&gt;</a>
<a class="sourceLine" id="cb1-4" title="4"> alert(<span class="st">'ok'</span>)</a>
<a class="sourceLine" id="cb1-5" title="5"></a>
<a class="sourceLine" id="cb1-6" title="6"> <span class="st">bar: </span>-&gt;</a>
<a class="sourceLine" id="cb1-7" title="7"> $(<span class="st">'#content'</span>).load( <span class="st">'/content.html'</span>, ( -&gt; <span class="ot">@foo</span>(x) ) )</a>
<a class="sourceLine" id="cb1-8" title="8"> <span class="co"># Ça n'appellera pas MyClass.foo</span></a></code></pre></div>
<p>La seule façon de résoudre ce problème est avec le code suivant&nbsp;:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode ruby"><code class="sourceCode ruby"><a class="sourceLine" id="cb2-1" title="1">-&gt; </a>
<a class="sourceLine" id="cb2-2" title="2"><span class="kw">class</span> <span class="dt">MyClass</span></a>
<a class="sourceLine" id="cb2-3" title="3"> <span class="st">foo: </span>-&gt;</a>
<a class="sourceLine" id="cb2-4" title="4"> alert(<span class="st">'ok'</span>)</a>
<a class="sourceLine" id="cb2-5" title="5"></a>
<a class="sourceLine" id="cb2-6" title="6"> <span class="st">bar: </span>-&gt;</a>
<a class="sourceLine" id="cb2-7" title="7"> <span class="dv">self</span>=this</a>
<a class="sourceLine" id="cb2-8" title="8"> $(<span class="st">'#content'</span>).load( <span class="st">'/content.html'</span>, ( -&gt; <span class="dv">self</span>.foo(x) ) )</a></code></pre></div>
<p>Sachant celà, la notation <code>@</code> perd tout son intérêt pour moi.</p>
<section class="footnotes">
<hr />
<ol>
<li id="fn1"><p>Je sais que ce nest certainement ni la meilleure ni la plus productive des décisions. Mais jaime bien fabriquer les choses pour savoir comment tout fonctionne dans le détail.<a href="#fnref1" class="footnote-back"></a></p></li>
<li id="fn2"><p>Je sais quil existe un projet <code>rb2js</code>, mais il ne résoud pas le problème dont je parle.<a href="#fnref2" class="footnote-back"></a></p></li>
</ol>
</section>
</div>
<div id="afterarticle">
<div id="social">
2021-05-25 20:25:47 +00:00
<a href="/rss.xml" target="_blank" rel="noopener noreferrer nofollow" class="social">RSS</a>
2021-04-18 10:23:24 +00:00
·
<a href="https://twitter.com/home?status=http%3A%2F%2Fyannesposito.com/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/%20via%20@yogsototh" target="_blank" rel="noopener noreferrer nofollow" class="social">Tweet</a>
·
<a href="http://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fyannesposito.com/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/" target="_blank" rel="noopener noreferrer nofollow" class="social">FB</a>
<br />
<a class="message" href="../../../../Scratch/fr/blog/Social-link-the-right-way/">Ces liens sociaux préservent votre vie privée</a>
</div>
<div id="navigation">
<a href="../../../../">Accueil</a>
<span class="sep">¦</span>
<a href="../../../../Scratch/fr/blog">Blog</a>
<span class="sep">¦</span>
<a href="../../../../Scratch/fr/softwares">Logiciels</a>
<span class="sep">¦</span>
<a href="../../../../Scratch/fr/about">Auteur</a>
</div>
<div id="totop"><a href="#header">↑ Top ↑</a></div>
<div id="bottom">
<div>
Published on 2011-01-03
</div>
<div>
<a href="https://twitter.com/yogsototh">Follow @yogsototh</a>
</div>
<div>
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/deed.en_US">Yann Esposito©</a>
</div>
<div>
Done with
<a href="http://www.vim.org" target="_blank" rel="noopener noreferrer nofollow"><strike>Vim</strike></a>
<a href="http://spacemacs.org" target="_blank" rel="noopener noreferrer nofollow">spacemacs</a>
<span class="pala">&amp;</span>
<a href="http://nanoc.ws" target="_blank" rel="noopener noreferrer nofollow"><strike>nanoc</strike></a>
<a href="http://jaspervdj.be/hakyll" target="_blank" rel="noopener noreferrer nofollow">Hakyll</a>
</div>
2022-10-26 09:26:08 +00:00
2021-04-18 10:23:24 +00:00
</div>
</div>
</div>
</div>
</body>
</html>