<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Parlons Code &#187; code</title>
	<atom:link href="https://blog.developpez.com/gnuvince/pcategory/code/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/gnuvince</link>
	<description></description>
	<lastBuildDate>Mon, 29 Nov 2010 04:10:23 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Faire des cycles avec des fermetures</title>
		<link>https://blog.developpez.com/gnuvince/p9538/code/faire_des_cycles_avec_des_fermetures</link>
		<comments>https://blog.developpez.com/gnuvince/p9538/code/faire_des_cycles_avec_des_fermetures#comments</comments>
		<pubDate>Sun, 28 Nov 2010 21:24:21 +0000</pubDate>
		<dc:creator><![CDATA[gnuvince]]></dc:creator>
				<category><![CDATA[code]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans une discussion sur des structures de contrôle alternatives, une personne sur le site social StackOverflow disait désirer un contrôle qu&#8217;il appelait alternate qui permettrait de boucler parmis un choix de valeurs. Voici quelques exemples d&#8217;usages qu&#8217;il donnait: table_row_color = alternate(RED, GREEN, BLUE); player_color = alternate(color_list); // cycles through list items alternate( led_on(), led_off() ); Pour les gens qui utilisent des langages avec des fermetures (closures en anglais) ont la possibilité d&#8217;implémenter ce genre de [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans une discussion sur des structures de contrôle alternatives, une personne sur le site social <a href="http://www.stackoverflow.com">StackOverflow</a> disait désirer un contrôle qu&rsquo;il appelait <i>alternate</i> qui permettrait de boucler parmis un choix de valeurs.  Voici quelques exemples d&rsquo;usages qu&rsquo;il donnait:</p>
<pre>
table_row_color = alternate(RED, GREEN, BLUE);

player_color = alternate(color_list); // cycles through list items

alternate(
    led_on(),
    led_off()
);
</pre>
<p>Pour les gens qui utilisent des langages avec des fermetures (closures en anglais) ont la possibilité d&rsquo;implémenter ce genre de mécanisme eux mêmes.  Je vais démontrer comme le faire avec le langage JavaScript, mais il est trivial de convertir ce code dans un autre langage.</p>
<pre>
function cycle(choix) {
    var i = 0;
    return function () {
        var courant = i;
        i = (i + 1) % choix.length;
        return choix[courant];
    };
}
</pre>
<p>Si simple, n&rsquo;est-ce pas?  Voici une brève explication de comment cela fonctionne.</p>
<p>À l&rsquo;intérieur du corps de cycle(), nous avons deux variables locales: choix et i.  La fonction anonyme que nous retournons a accès à ces variables.  Et plus intéressant, même si choix et i tombent hors-portée après le retour, la fonction anonyme retournée peut quand même y accéder.  Cela lui permet donc de manipuler choix et i et de leur assigner des nouvelles valeurs.</p>
<p>Voici maintenant comment on pourrait se servir de ce code:</p>
<pre>
var couleurs = cycle(["bleu", "blanc", "rouge"]); // couleurs est une fonction

for (var i = 0; i &lt; 5; ++i) {
    console.log(couleurs());
}

// Sortie =&gt;
// blue
// blanc
// rouge
// bleu
// blanc
</pre>
<p>Il est également possible de cycler des fonctions:</p>
<pre>
var salutations = cycles([
    function (s) { return "Bonjour " + s; },
    function (s) { return "Salut " + s; },
    function (s) { return "Allo " + s; }
]);

for (var i = 0; i &lt; 3; ++i) {
    console.log(salutations()("developpez.net"));
}

// Sortie =&gt;
// Bonjour developpez.net
// Salut developpez.net
// Allo developpez.net
</pre>
<p>Si vous ne connaissez pas beaucoup les fermetures et qu&rsquo;elles sont disponibles dans votre langage de programmation de choix, je vous suggère fortement de trouver un livre ou un tutoriel qui vous fera découvrir leur puissance.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
