<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:10pt;font-family:Bitstream Vera Serif">
<p>On Wednesday 28 September 2005 13:50, Félix Hauri wrote:</p>
<p></p>
<p>&gt; Il existe des méchanismes (de base ou presque c.f. man perlmodlib) pour</p>
<p>&gt; gérer ce type de limitations, générer des erreurs etc. dans chacun des</p>
<p>&gt; languages cités.</p>
<p>&gt; (je présume un peu pour python, mais le contraire m'étonnerais fort;)</p>
<p></p>
<p>Exact. Python ne va jamais passe outre un truc interdit ou qui ne marche pas. On peut traiter chaque erreur en verifiant le type de l'erreur, ou se contenter de traiter l'occurence de &quot;erreur quelconque&quot;. Il est evident que le langage permet aussi d'ecrire des trucs suicidaires comme :</p>
<p></p>
<p>        try :</p>
<p>                x = sin(&quot;toto&quot;)</p>
<p>        except</p>
<p>                pass</p>
<p></p>
<p>Il est illusoire de croire qu'un langage permet d'empecher les imbeciles de programmer :-)</p>
<p></p>
<p>&gt;</p>
<p>&gt; Même on peut faire des truc rigolos:</p>
<p>&gt; $ perl -e 'use Scalar::Util &quot;dualvar&quot;;</p>
<p>&gt;            my $var=dualvar 100, &quot;pommes&quot;;</p>
<p>&gt;            printf &quot;%s, %d\n&quot;,$var,$var;</p>
<p>&gt;            printf &quot;%d %s.\n&quot;,$var,$var;</p>
<p></p>
<p>Tiens, je ne savais pas que l'on pouvait faire ce genre de chose en Perl (normal, vu ce que je connais de de langage :-)). Ca me donne des idees pour le faire en Python. Facile...</p>
<p></p>
<p>&gt;            print &quot;Et pour finir le double de &quot;.$var.</p>
<p>&gt;                     &quot; fait: &quot;.($var * 2).&quot; &quot;.$var.&quot;\n&quot;;</p>
<p>&gt;           '</p>
<p>&gt; pommes, 100</p>
<p>&gt; 100 pommes.</p>
<p>&gt; Et pour finir le double de pommes fait: 200 pommes</p>
<p></p>
<p>Toujours facile... mais il faut creer l'equivalent de &quot;Scalar dualvar&quot;... juste une classe :-)</p>
<p></p>
<p>class dualvar ;</p>
<p>    def __init__(self, val1, val2) :</p>
<p>        if type(val1) is str :</p>
<p>            self.str = val1</p>
<p>            self.float = val2</p>
<p>        else :</p>
<p>            self.str = val2</p>
<p>            self.float = val1</p>
<p></p>
<p>    def __str__(self) :</p>
<p>        return self.str</p>
<p></p>
<p>    def __mul__ :</p>
<p>        return self.float</p>
<p></p>
<p>    ...</p>
<p></p>
<p>On peut aussi redefinir les operateur logique (eq, lt, etc.), mais alors on doit definir ce que l'on compare. Entre autre, si la question ne se pose pas trop dans le cas de &lt;&gt; (et encore...) on est face a un dileme dans le cas du test d'egalite, doit-on compare la chaine de cartactere ou la valeur numerique.            </p>
<p></p>
<p>&gt; Voilà, ce n'est pas très lisible, mais cela fonctionne:-/</p>
<p>&gt; (Je n'ai pas trouvé d'application concrète de ce genre de propriété</p>
<p>&gt;  mis à part de démontrer la souplesse de perl;)</p>
<p></p>
<p>Je pense que c'est sans doute utilise dans les masques de saisie, permettant ainsi d'associe un label avec une valeur... Non exemple !</p>
<p></p>
<p><span style="color:#008000">&gt; Maintenant, pour ``une collection d'objets métiers'', je te recommande</span></p>
<p><span style="color:#008000">&gt; plutôt ``C'', c't'un vieux truc mais on n'a encore pas trouvé mieux;)</span></p>
<p></p>
<p><span style="color:#008000">Et puis tu peux effectuer des operations arithmetiques sur des pointeurs... le reve :-)</span></p>
<p></p>
<p><span style="color:#008000">dc</span></p>
<p></p>
</body></html>