<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Commentaires sur : Dé-switcher n&#8217;est pas jouer</title>
	<atom:link href="http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/</link>
	<description>Langages, Architectures &#38; Méthodologies</description>
	<lastBuildDate>Wed, 11 Jan 2012 14:47:25 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Par : Blog Excilys &#187; Construire sa propre plateforme de services</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-9842</link>
		<dc:creator>Blog Excilys &#187; Construire sa propre plateforme de services</dc:creator>
		<pubDate>Mon, 05 Dec 2011 12:09:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-9842</guid>
		<description>[...] à chaque ajout de nouveau processus métier dans notre plateforme. M&#8217;inspirant de cet article, j&#8217;ai eu l&#8217;idée de définir mes processus métiers dans Spring (jusque là [...]</description>
		<content:encoded><![CDATA[<p>[...] à chaque ajout de nouveau processus métier dans notre plateforme. M&#8217;inspirant de cet article, j&#8217;ai eu l&#8217;idée de définir mes processus métiers dans Spring (jusque là [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Blog Excilys &#187; Clean Android Code : I CAN HAZ INT IDS?</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-5192</link>
		<dc:creator>Blog Excilys &#187; Clean Android Code : I CAN HAZ INT IDS?</dc:creator>
		<pubDate>Mon, 21 Feb 2011 09:46:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-5192</guid>
		<description>[...] : cet article contient des switch, et pourrait donc heurter la sensibilité d&#8217;un public non averti. Je tiens à décliner toute responsabilité en cas de switchite aiguë consécutive à une [...]</description>
		<content:encoded><![CDATA[<p>[...] : cet article contient des switch, et pourrait donc heurter la sensibilité d&#8217;un public non averti. Je tiens à décliner toute responsabilité en cas de switchite aiguë consécutive à une [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Blog Excilys &#187; Refactoring par la pratique</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1683</link>
		<dc:creator>Blog Excilys &#187; Refactoring par la pratique</dc:creator>
		<pubDate>Tue, 03 Aug 2010 12:50:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1683</guid>
		<description>[...] Limiter le nombre de switch. [...]</description>
		<content:encoded><![CDATA[<p>[...] Limiter le nombre de switch. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Bastien JANSEN</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1441</link>
		<dc:creator>Bastien JANSEN</dc:creator>
		<pubDate>Sat, 10 Jul 2010 09:56:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1441</guid>
		<description>Mouais, en râleur de service je trouve ça moyennement &quot;propre&quot; d&#039;appeler une méthode en sachant qu&#039;elle peut me jeter une exception dans la face, même si je l&#039;attrape... Mais pour le coup j&#039;admets que ça simplifie le code : on n&#039;a pas besoin de tester les deux types d&#039;extension, à savoir super-classe ou interfaces.</description>
		<content:encoded><![CDATA[<p>Mouais, en râleur de service je trouve ça moyennement &#8220;propre&#8221; d&#8217;appeler une méthode en sachant qu&#8217;elle peut me jeter une exception dans la face, même si je l&#8217;attrape&#8230; Mais pour le coup j&#8217;admets que ça simplifie le code : on n&#8217;a pas besoin de tester les deux types d&#8217;extension, à savoir super-classe ou interfaces.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Denis VAUMORON</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1378</link>
		<dc:creator>Denis VAUMORON</dc:creator>
		<pubDate>Wed, 07 Jul 2010 19:07:22 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1378</guid>
		<description>Le @Case est pas mal, mais en casse-pieds de service, je note tout de même que tu aurais pu utiliser la méthode asSubclass pour ta méthode isA :

	private boolean isA(Class clazz, Class class1) {
		try {
			clazz.asSubclass(class1);
		} catch (ClassCastException cce) {
			return false;
		}
		return true;
	}</description>
		<content:encoded><![CDATA[<p>Le @Case est pas mal, mais en casse-pieds de service, je note tout de même que tu aurais pu utiliser la méthode asSubclass pour ta méthode isA :</p>
<p>	private boolean isA(Class clazz, Class class1) {<br />
		try {<br />
			clazz.asSubclass(class1);<br />
		} catch (ClassCastException cce) {<br />
			return false;<br />
		}<br />
		return true;<br />
	}</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Bastien JANSEN</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1312</link>
		<dc:creator>Bastien JANSEN</dc:creator>
		<pubDate>Fri, 02 Jul 2010 10:11:11 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1312</guid>
		<description>&lt;a href=&quot;#comment-1308&quot; rel=&quot;nofollow&quot;&gt;@Oaz &lt;/a&gt; 
Décidément, cet article semble déchaîner les passions dans les commentaires :-D ! Dommage que Pierre-Yves ne puisse pas répondre à cause d&#039;une vacancite aigüe...
Ton idée m&#039;a donné envie de tester la faisabilité d&#039;un @Case en Java, et bien évidemment c&#039;est possible. J&#039;ai documenté ça sur un autre blog : http://foobaz.free.fr/blog/?article7/un-switch-annote-en-java</description>
		<content:encoded><![CDATA[<p><a href="#comment-1308" rel="nofollow">@Oaz </a><br />
Décidément, cet article semble déchaîner les passions dans les commentaires <img src='http://blog.excilys.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ! Dommage que Pierre-Yves ne puisse pas répondre à cause d&#8217;une vacancite aigüe&#8230;<br />
Ton idée m&#8217;a donné envie de tester la faisabilité d&#8217;un @Case en Java, et bien évidemment c&#8217;est possible. J&#8217;ai documenté ça sur un autre blog : <a href="http://foobaz.free.fr/blog/?article7/un-switch-annote-en-java" rel="nofollow">http://foobaz.free.fr/blog/?article7/un-switch-annote-en-java</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Oaz</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1308</link>
		<dc:creator>Oaz</dc:creator>
		<pubDate>Thu, 01 Jul 2010 19:51:11 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1308</guid>
		<description>Bonjour,

Autant je comprends et approuve fortement la première partie de l&#039;article, autant je ne comprends pas l&#039;utilité du pattern strategy dans ce contexte.

Quelle différence entre doAction(new Syso()); et new Syso().doAction(); ?

Le switch permet de relier un ensemble de valeurs à un ensemble d&#039;exécutions. Si on dispose déjà de l&#039;exécution, on n&#039;est plus tellement dans le cadre d&#039;un switch.


Ce billet m&#039;a toutefois donné envie d&#039;exposer une technique que j&#039;utilise parfois en C# pour éviter la maintenance manuelle d&#039;un &quot;Map&quot; centralisé : http://agilitateur.azeau.com/post/2010/07/01/Un-switch-%C3%A9volutif-en-C
Cela se base sur le concept d&#039;attributs dans .NET
Je connais mal java mais est-ce que la gestion des &quot;case&quot; d&#039;un &quot;switch&quot; via des annotations y serait possible ? Et aurait elle un intérêt ?

Concrètement, est-ce que l&#039;on pourrait écrire quelque chose comme (syntaxe non garantie) :

@Case(&quot;syso&quot;)
public class Syso implements Action {
    public void doAction() {  System.out.println(&quot;Yeah&quot;); }
}

@Case(&quot;syserr&quot;)
public class Syserr implements Action {
    public void doAction() { System.err.println(&quot;Yahoo&quot;); }
}

et avoir un mécanisme générique qui, étant donné une string &quot;syso&quot; ou &quot;syserr&quot; exécuterait le &quot;doAction&quot; correspondant ?</description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Autant je comprends et approuve fortement la première partie de l&#8217;article, autant je ne comprends pas l&#8217;utilité du pattern strategy dans ce contexte.</p>
<p>Quelle différence entre doAction(new Syso()); et new Syso().doAction(); ?</p>
<p>Le switch permet de relier un ensemble de valeurs à un ensemble d&#8217;exécutions. Si on dispose déjà de l&#8217;exécution, on n&#8217;est plus tellement dans le cadre d&#8217;un switch.</p>
<p>Ce billet m&#8217;a toutefois donné envie d&#8217;exposer une technique que j&#8217;utilise parfois en C# pour éviter la maintenance manuelle d&#8217;un &#8220;Map&#8221; centralisé : <a href="http://agilitateur.azeau.com/post/2010/07/01/Un-switch-%C3%A9volutif-en-C" rel="nofollow">http://agilitateur.azeau.com/post/2010/07/01/Un-switch-%C3%A9volutif-en-C</a><br />
Cela se base sur le concept d&#8217;attributs dans .NET<br />
Je connais mal java mais est-ce que la gestion des &#8220;case&#8221; d&#8217;un &#8220;switch&#8221; via des annotations y serait possible ? Et aurait elle un intérêt ?</p>
<p>Concrètement, est-ce que l&#8217;on pourrait écrire quelque chose comme (syntaxe non garantie) :</p>
<p>@Case(&#8220;syso&#8221;)<br />
public class Syso implements Action {<br />
    public void doAction() {  System.out.println(&#8220;Yeah&#8221;); }<br />
}</p>
<p>@Case(&#8220;syserr&#8221;)<br />
public class Syserr implements Action {<br />
    public void doAction() { System.err.println(&#8220;Yahoo&#8221;); }<br />
}</p>
<p>et avoir un mécanisme générique qui, étant donné une string &#8220;syso&#8221; ou &#8220;syserr&#8221; exécuterait le &#8220;doAction&#8221; correspondant ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Neko</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1298</link>
		<dc:creator>Neko</dc:creator>
		<pubDate>Thu, 01 Jul 2010 10:12:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1298</guid>
		<description>Salut à toi Pierre Yves (salut aux autres lecteurs)

Je ne suis absolument pas d&#039;accord avec ton article (enfin en partie).
Tout d&#039;abord, si le switch existe depuis si longtemps, c&#039;est peut être parce que c&#039;est plus qu&#039;une structure de contrôle; je veux dire, des optimisations sont faites derrière par le compilateur. (Certes, le Java est un cas légèrement différent de part sa VM, et je ne sais pas programmer dans ce dernier, mais je pense que mon post est quand même valable)

Actuellement, un swich avec beaucoup de cas différents est automatiquement remplacé (quand c&#039;est possible) par un pointeur sur fonctions, justement pour éviter une batterie de if/else.

Je t&#039;invite à lire cet article http://www.safercode.com/blog/2008/10/28/optimizing-switch-case-statements-in-c-for-speed.html qui parle de l&#039;optimisation des switch/case en C.

Ensuite je voudrais parler de ton point sur le pattern &quot;strategy&quot;.
C&#039;est un choix dangereux, car si ta classe est lourde, tu n&#039;as pas forcément envie d&#039;en faire X sous classes pour implémenter quelques stratégies, je pense donc que ce genre de patterns est à utiliser avec parcimonie.

De manière générale, il ne faut pas diaboliser les structures de contrôles if/else et switch.
Je pense qu&#039;il serait plus approprié d&#039;apprendre à les utiliser avec parcimonie, et surtout efficacité, car ils ont tous des avantages/désavantages selon les situations.

Un code contenant des switch et if/else n&#039;est pas forcément difficile à maintenir (même si, ça à souvent l&#039;air d&#039;être le cas), ou compliqué à comprendre.

Voila, bonne journée à toi.</description>
		<content:encoded><![CDATA[<p>Salut à toi Pierre Yves (salut aux autres lecteurs)</p>
<p>Je ne suis absolument pas d&#8217;accord avec ton article (enfin en partie).<br />
Tout d&#8217;abord, si le switch existe depuis si longtemps, c&#8217;est peut être parce que c&#8217;est plus qu&#8217;une structure de contrôle; je veux dire, des optimisations sont faites derrière par le compilateur. (Certes, le Java est un cas légèrement différent de part sa VM, et je ne sais pas programmer dans ce dernier, mais je pense que mon post est quand même valable)</p>
<p>Actuellement, un swich avec beaucoup de cas différents est automatiquement remplacé (quand c&#8217;est possible) par un pointeur sur fonctions, justement pour éviter une batterie de if/else.</p>
<p>Je t&#8217;invite à lire cet article <a href="http://www.safercode.com/blog/2008/10/28/optimizing-switch-case-statements-in-c-for-speed.html" rel="nofollow">http://www.safercode.com/blog/2008/10/28/optimizing-switch-case-statements-in-c-for-speed.html</a> qui parle de l&#8217;optimisation des switch/case en C.</p>
<p>Ensuite je voudrais parler de ton point sur le pattern &#8220;strategy&#8221;.<br />
C&#8217;est un choix dangereux, car si ta classe est lourde, tu n&#8217;as pas forcément envie d&#8217;en faire X sous classes pour implémenter quelques stratégies, je pense donc que ce genre de patterns est à utiliser avec parcimonie.</p>
<p>De manière générale, il ne faut pas diaboliser les structures de contrôles if/else et switch.<br />
Je pense qu&#8217;il serait plus approprié d&#8217;apprendre à les utiliser avec parcimonie, et surtout efficacité, car ils ont tous des avantages/désavantages selon les situations.</p>
<p>Un code contenant des switch et if/else n&#8217;est pas forcément difficile à maintenir (même si, ça à souvent l&#8217;air d&#8217;être le cas), ou compliqué à comprendre.</p>
<p>Voila, bonne journée à toi.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : pligg.com</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1296</link>
		<dc:creator>pligg.com</dc:creator>
		<pubDate>Thu, 01 Jul 2010 08:55:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1296</guid>
		<description>&lt;strong&gt;Blog Excilys » Dé-switcher n’est pas jouer...&lt;/strong&gt;

Un court article juste pour se souvenir qu&#039;il ne faut pas écrire de gros switch, parce qu&#039;il y a toujours un meilleur design pattern pour ça !...</description>
		<content:encoded><![CDATA[<p><strong>Blog Excilys » Dé-switcher n’est pas jouer&#8230;</strong></p>
<p>Un court article juste pour se souvenir qu&#8217;il ne faut pas écrire de gros switch, parce qu&#8217;il y a toujours un meilleur design pattern pour ça !&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : ParrainGeek31SansIPhone</title>
		<link>http://blog.excilys.com/2010/06/25/de-switcher-nest-pas-jouer/comment-page-1/#comment-1196</link>
		<dc:creator>ParrainGeek31SansIPhone</dc:creator>
		<pubDate>Fri, 25 Jun 2010 14:46:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.excilys.com/?p=2375#comment-1196</guid>
		<description>C&#039;est une transmission de pensée(s), je viens de remplacer un gros bloc switch case par 
final EnumMap sortTranslator 
                = new EnumMap(SortEnum.class);
            sortTranslator.put(SortEnum.REFERENCE, &quot;a.reference&quot;);
            // etc....
Et mon filleul vient de m&#039;envoyer le lien de ton site !
PS: noter que j&#039;ai fait une EnumMap et pas une Map pour éviter de me baser sur le equals/hashCode car je travaille avec des enum.</description>
		<content:encoded><![CDATA[<p>C&#8217;est une transmission de pensée(s), je viens de remplacer un gros bloc switch case par<br />
final EnumMap sortTranslator<br />
                = new EnumMap(SortEnum.class);<br />
            sortTranslator.put(SortEnum.REFERENCE, &#8220;a.reference&#8221;);<br />
            // etc&#8230;.<br />
Et mon filleul vient de m&#8217;envoyer le lien de ton site !<br />
PS: noter que j&#8217;ai fait une EnumMap et pas une Map pour éviter de me baser sur le equals/hashCode car je travaille avec des enum.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

