<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Commentaires sur : Switch sur un type en C#</title>
	<atom:link href="http://codingly.com/2009/10/19/switch-sur-un-type-en-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/</link>
	<description>Par Romain Verdier</description>
	<lastBuildDate>Tue, 09 Mar 2010 20:07:07 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Par : Pistache</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-468</link>
		<dc:creator>Pistache</dc:creator>
		<pubDate>Fri, 11 Dec 2009 15:31:20 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-468</guid>
		<description>Romain est moche.</description>
		<content:encoded><![CDATA[<p>Romain est moche.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Simon Mourier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-461</link>
		<dc:creator>Simon Mourier</dc:creator>
		<pubDate>Mon, 02 Nov 2009 15:13:17 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-461</guid>
		<description>Oulaaa vous avez dû avoir une enfance torturée pour inventer des trucs pareils :) Mais au moins, c&#039;est assumé!</description>
		<content:encoded><![CDATA[<p>Oulaaa vous avez dû avoir une enfance torturée pour inventer des trucs pareils :) Mais au moins, c&#8217;est assumé!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Jérémy</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-457</link>
		<dc:creator>Jérémy</dc:creator>
		<pubDate>Wed, 28 Oct 2009 15:38:39 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-457</guid>
		<description>Tu pousses la remarque à son exagération, ton exemple est évident.

Mais je pense qu&#039;en restant dans un contexte de swicth/case, l&#039;argument de la lisibilité est valable. On parle d&#039;une logique &quot;basique&quot;, contrairement à l&#039;exemple de la méthode &quot;IsPrime&quot;.

De la même manière pour un swicth/case un nombre limité de cas, et avec des opérations relativement simple, le &quot;if-is-cast&quot; sera plus facile à comprendre.

Cependant, avec la même construction mais un nombre plus conséquent de cas, et des opération plus complexe pour chacun des cas, ta solution prouve toute son utilité.

Pour moi ça reste une question de contexte dans le code.</description>
		<content:encoded><![CDATA[<p>Tu pousses la remarque à son exagération, ton exemple est évident.</p>
<p>Mais je pense qu&#8217;en restant dans un contexte de swicth/case, l&#8217;argument de la lisibilité est valable. On parle d&#8217;une logique &laquo;&nbsp;basique&nbsp;&raquo;, contrairement à l&#8217;exemple de la méthode &laquo;&nbsp;IsPrime&nbsp;&raquo;.</p>
<p>De la même manière pour un swicth/case un nombre limité de cas, et avec des opérations relativement simple, le &laquo;&nbsp;if-is-cast&nbsp;&raquo; sera plus facile à comprendre.</p>
<p>Cependant, avec la même construction mais un nombre plus conséquent de cas, et des opération plus complexe pour chacun des cas, ta solution prouve toute son utilité.</p>
<p>Pour moi ça reste une question de contexte dans le code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : grozeille</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-451</link>
		<dc:creator>grozeille</dc:creator>
		<pubDate>Sat, 24 Oct 2009 08:27:43 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-451</guid>
		<description>J&#039;ai rien compris concernant le pingouin...</description>
		<content:encoded><![CDATA[<p>J&#8217;ai rien compris concernant le pingouin&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : loic</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-448</link>
		<dc:creator>loic</dc:creator>
		<pubDate>Wed, 21 Oct 2009 17:36:53 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-448</guid>
		<description>A mon humble avis, c&#039;est un peu &quot;over-designé&quot; (excus[é] le quebicisme) __mais__ je donne un point pour l&#039;élégance du code et un point pour parce que Romain est beau.

Ceci-dit , quit à imaginer des méthodes élegantes, j&#039;aurai je pense tenté de me débarasser du switch et suivre le conseil avisé : &quot;la première chose qu’il vous faut faire est de vous demander si vous avez besoin de faire un switch sur un type[...]&quot;. (on m&#039;objectera qu&#039;en matiere d&#039;&quot;over design&quot;, contourner un switch aboutit parfois a bien pire que la solution présentée :s)

Ce ceci-dit dit, j&#039;avoue que je ne me serais jamais posé la question de savoir comment j&#039;allais éviter un switch (ou assimilé if..elseif, etc.) par &quot;mon propre switch&quot;, c&#039;est vraiement une belle solution.</description>
		<content:encoded><![CDATA[<p>A mon humble avis, c&#8217;est un peu &laquo;&nbsp;over-designé&nbsp;&raquo; (excus[é] le quebicisme) __mais__ je donne un point pour l&#8217;élégance du code et un point pour parce que Romain est beau.</p>
<p>Ceci-dit , quit à imaginer des méthodes élegantes, j&#8217;aurai je pense tenté de me débarasser du switch et suivre le conseil avisé : &laquo;&nbsp;la première chose qu’il vous faut faire est de vous demander si vous avez besoin de faire un switch sur un type[...]&laquo;&nbsp;. (on m&#8217;objectera qu&#8217;en matiere d&#8217;&nbsp;&raquo;over design&nbsp;&raquo;, contourner un switch aboutit parfois a bien pire que la solution présentée :s)</p>
<p>Ce ceci-dit dit, j&#8217;avoue que je ne me serais jamais posé la question de savoir comment j&#8217;allais éviter un switch (ou assimilé if..elseif, etc.) par &laquo;&nbsp;mon propre switch&nbsp;&raquo;, c&#8217;est vraiement une belle solution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Olivier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-447</link>
		<dc:creator>Olivier</dc:creator>
		<pubDate>Tue, 20 Oct 2009 16:13:44 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-447</guid>
		<description>Personnellement, je n&#039;utilise que &quot;as&quot; pour les raisons évoquées, le is est trop contraignant. 

Sinon, sympa le pattern à la fluent,  assez lisible, et surtout typé vs. la solution triviale n° 1, merci de l&#039;exemple, à reprendre je pense, vive les méthodes d&#039;extension ;)

...bientôt le dynamic, bientôt.</description>
		<content:encoded><![CDATA[<p>Personnellement, je n&#8217;utilise que &laquo;&nbsp;as&nbsp;&raquo; pour les raisons évoquées, le is est trop contraignant. </p>
<p>Sinon, sympa le pattern à la fluent,  assez lisible, et surtout typé vs. la solution triviale n° 1, merci de l&#8217;exemple, à reprendre je pense, vive les méthodes d&#8217;extension ;)</p>
<p>&#8230;bientôt le dynamic, bientôt.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Romain Verdier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-446</link>
		<dc:creator>Romain Verdier</dc:creator>
		<pubDate>Tue, 20 Oct 2009 14:34:54 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-446</guid>
		<description>@Jérémy, @Vincent : Dire &quot;C&#039;est moins lisible car il faut aller regarder la méthode &lt;code&gt;Case&lt;/code&gt;&quot; ça revient à considérer que :

[code language=&quot;csharp&quot;]
    int candidate = 12345;
    bool result = true;
    if ((candidate &amp; 1) == 0)
    {
        result = candidate == 2;
    }
    else
    {
        int num = (int)Math.Sqrt(candidate);
        for (int i = 3; i &lt;= num; i += 2)
        {
            if ((candidate % i) == 0)
            {
                result = false;
                break;
            }
        }
    }
[/code]

Est plus lisible que :

[code language=&quot;csharp&quot;]
bool result = IsPrime(12345);
[/code]

Car on n&#039;a pas besoin d&#039;aller voir l&#039;implémentation de la méthode &lt;code&gt;IsPrime&lt;/code&gt;, ou de savoir que la méthode &lt;code&gt;IsPrime&lt;/code&gt; existe.</description>
		<content:encoded><![CDATA[<p>@Jérémy, @Vincent : Dire &laquo;&nbsp;C&#8217;est moins lisible car il faut aller regarder la méthode <code>Case</code>&nbsp;&raquo; ça revient à considérer que :</p>
<pre class="brush: csharp;">
    int candidate = 12345;
    bool result = true;
    if ((candidate &amp; 1) == 0)
    {
        result = candidate == 2;
    }
    else
    {
        int num = (int)Math.Sqrt(candidate);
        for (int i = 3; i &lt;= num; i += 2)
        {
            if ((candidate % i) == 0)
            {
                result = false;
                break;
            }
        }
    }
</pre>
<p>Est plus lisible que :</p>
<pre class="brush: csharp;">
bool result = IsPrime(12345);
</pre>
<p>Car on n&#8217;a pas besoin d&#8217;aller voir l&#8217;implémentation de la méthode <code>IsPrime</code>, ou de savoir que la méthode <code>IsPrime</code> existe.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Jérémy</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-445</link>
		<dc:creator>Jérémy</dc:creator>
		<pubDate>Tue, 20 Oct 2009 13:23:00 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-445</guid>
		<description>Je commence à mieux comprendre l&#039;utilité de ta solution Romain.
Clairement tout est une question de contexte et de contraintes.
La simplicité de l&#039;exemple nous fait nous dire que ça fait une peu usine a gaz pour pas grand chose. Mais dans une application plus étendues la méthode d&#039;extension me parait évidemment plus justifié!

Mais je pense pas qu&#039;on puisse t&#039;en vouloir de faire des exemples simples pour comprendre le cœur du sujet :)</description>
		<content:encoded><![CDATA[<p>Je commence à mieux comprendre l&#8217;utilité de ta solution Romain.<br />
Clairement tout est une question de contexte et de contraintes.<br />
La simplicité de l&#8217;exemple nous fait nous dire que ça fait une peu usine a gaz pour pas grand chose. Mais dans une application plus étendues la méthode d&#8217;extension me parait évidemment plus justifié!</p>
<p>Mais je pense pas qu&#8217;on puisse t&#8217;en vouloir de faire des exemples simples pour comprendre le cœur du sujet :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Evilz</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-444</link>
		<dc:creator>Evilz</dc:creator>
		<pubDate>Tue, 20 Oct 2009 13:11:38 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-444</guid>
		<description>héhé,
Perso, j&#039;aime bien ta solution ... mais je donne +1 à Jérémy. C&#039;est forcément moins lisible puisqu&#039;il faut connaitre la méthode (d&#039;extention en plus).</description>
		<content:encoded><![CDATA[<p>héhé,<br />
Perso, j&#8217;aime bien ta solution &#8230; mais je donne +1 à Jérémy. C&#8217;est forcément moins lisible puisqu&#8217;il faut connaitre la méthode (d&#8217;extention en plus).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Romain Verdier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-443</link>
		<dc:creator>Romain Verdier</dc:creator>
		<pubDate>Tue, 20 Oct 2009 12:46:48 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-443</guid>
		<description>@Simon : A mon sens il faut bien comprendre une chose : Dieu ne tue pas d&#039;animaux pour des raisons de performance. &lt;code&gt;is&lt;/code&gt; + cast n&#039;est pas un problème à cause des performances, mais à cause de la &lt;em&gt;redondance&lt;/em&gt; impliquée. Tu me fais dire ce que je n&#039;ai pas dit : je n&#039;ai jamais condamné le &lt;code&gt;is&lt;/code&gt; + cast pour ses performances, mais bien pour cette redondance qui n&#039;a strictement aucun sens puisqu&#039;il est toujours possible, au moins, d&#039;utiliser &lt;code&gt;as&lt;/code&gt; à la place (hors value types).

L&#039;autre intérêt du switch -- et ce n&#039;est pas flagrant dans l&#039;exemple proposé, je vous l&#039;accorde -- est qu&#039;il fournit à chaque bloc case, via le paramètre du délégué, une variable du bon type qui peut être utilisée et réutilisée sans cast. 
[code language=&quot;csharp&quot;]
    .Case&lt;MethodCallExpression&gt;(e =&gt; 
                                {
                                    // e est une instance de MethodCallExpression
                                    Console.WriteLine(e.Method);
                                    Console.WriteLine(e.Arguments);
                                    // etc.
                                });
[/code]

Dans le cas où l&#039;on doit manipuler n fois l&#039;expression en tant que &lt;code&gt;MethodCallExpression&lt;/code&gt; par exemple, l&#039;utilisation répétée du cast devrait choquer tout le monde.

Quand à la prétendue complexité de cette nouvelle syntaxe, ça me laisse perplexe. On ne doit pas utiliser les lambdas et les generics pour que les membres de CodeS-SourceS puissent nous lire ? Appelez-moi élitiste...

Edit: Switcher sur le &lt;code&gt;NodeType&lt;/code&gt; ne fournit pas une variable manipulable du bon type, il faut encore caster derrière. Mais effectivement lorsqu&#039;il est juste nécessaire de déterminer le type de l&#039;expression, c&#039;est la solution évidente.</description>
		<content:encoded><![CDATA[<p>@Simon : A mon sens il faut bien comprendre une chose : Dieu ne tue pas d&#8217;animaux pour des raisons de performance. <code>is</code> + cast n&#8217;est pas un problème à cause des performances, mais à cause de la <em>redondance</em> impliquée. Tu me fais dire ce que je n&#8217;ai pas dit : je n&#8217;ai jamais condamné le <code>is</code> + cast pour ses performances, mais bien pour cette redondance qui n&#8217;a strictement aucun sens puisqu&#8217;il est toujours possible, au moins, d&#8217;utiliser <code>as</code> à la place (hors value types).</p>
<p>L&#8217;autre intérêt du switch &#8212; et ce n&#8217;est pas flagrant dans l&#8217;exemple proposé, je vous l&#8217;accorde &#8212; est qu&#8217;il fournit à chaque bloc case, via le paramètre du délégué, une variable du bon type qui peut être utilisée et réutilisée sans cast. </p>
<pre class="brush: csharp;">
    .Case&lt;MethodCallExpression&gt;(e =&gt;
                                {
                                    // e est une instance de MethodCallExpression
                                    Console.WriteLine(e.Method);
                                    Console.WriteLine(e.Arguments);
                                    // etc.
                                });
</pre>
<p>Dans le cas où l&#8217;on doit manipuler n fois l&#8217;expression en tant que <code>MethodCallExpression</code> par exemple, l&#8217;utilisation répétée du cast devrait choquer tout le monde.</p>
<p>Quand à la prétendue complexité de cette nouvelle syntaxe, ça me laisse perplexe. On ne doit pas utiliser les lambdas et les generics pour que les membres de CodeS-SourceS puissent nous lire ? Appelez-moi élitiste&#8230;</p>
<p>Edit: Switcher sur le <code>NodeType</code> ne fournit pas une variable manipulable du bon type, il faut encore caster derrière. Mais effectivement lorsqu&#8217;il est juste nécessaire de déterminer le type de l&#8217;expression, c&#8217;est la solution évidente.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
