Vlà une idée qu'elle est pas terrible
Par Poulet le samedi, mai 19 2007, 11:52 - Script - Lien permanent
La tarte, ça appelle le poulet. Ou “comment contre-attaquer avant qu'il se soit rien passé”.
Bien le bonjour. Une fois n'est pas coutume, je viens de trouver le moyen d'être chiant, d'une part en étant plus productif que mes collègues, d'autre part en produisant de l'inutilité.
Vlà-t'y pas que pas plus tard qu'hier, sur le canal où nous nous retrouvons pour le moment (#sdz-unix sur irc.epiknet.org), ArtMoonik a une super idée (comme ça lui arrive souvent d'ailleurs), et ne résiste pas au plaisir de nous en faire part :
ArtMoonik: va falloir qu'on floode de ruby
Si c'est pas génial, ça, madame.
Donc moi, naturellement pas trop favorable à la chose, je prends sur moi, et réfléchis. Et là je me dis : "mais on n'a qu'à faire l'inverse !".
Ce que j'essaye de dire au moyen de mon immarcescible talent de comédien-metteur en scène (si, on peut placer immarcescible dans cette phrase, je vois pas le problème), ce que désormais, tous les jours sauf le dimanche (d'où l'intérêt de commencer un samedi), j'aurai la joie de vous infliger “Le Truc En Python Du Jour”. Ça va être pénible, inutile, je doute tenir la longueur, mais ça me fera une raison pour faire de la pub pour le blog : “Hé, toi qui kiffes le Python, tu savais ça ? Et ça ?”.
Permettez-moi donc d'introduire le premier de cette longue liste de scripts (ou de bouts de) niaiseux : kamoulox.rb.py. C'est une traduction du script kamoulox d'ArtMoonik. Vous devriez pouvoir à peu près tout lire, mais détaillons un petit peu.
Le début me semble à peu près compréhensible, on note la traduction de empty? des chaînes par une comparaison avec la chaîne vide, celle du mystérieux caractère 35 par un '#' (parce que oui ce sont les mêmes), un "strippage" quasi inutile (mais j'aime bien) sur clef et contenu, la traduction une nouvelle fois du empty? sur le hash par un truc un peu plus riche sémantiquement parlant (ne niez pas §§), et l'utilisation d'une fonction nommée (définie de façon interne) pour sub, là où Ruby utilise un bloc (encore une fois si on avait de vraies lambdas en Python...). De plus, plutôt que de rajouter une méthode à list (ce qui aurait été compliqué vu que c'est pas possible par défaut), on utilise choice du module random. On note également que ce que sub transmet à la fonction qu'il invoque, c'est un objet match, pas une chaîne.
La fonction sub permet donc d'appeler une fonction (ici, on peut aussi lui transmettre une chaîne de remplacement à la place) en lui passant le résultat d'une capture à l'aide d'une regex. Ici, la regex [(\w)_\|]* qu'elle est belle sert à capter tous les mots, plus les _ et les |.
Voilà voilà, ce script est un peu plus compliqué que ce qui suivra (normalement), étant donné que je montrerai par la suite plus "d'astuces" Pythonniques que de vrais programmes, mais on ne sait jamais.
Commentaires
Je trouve ça pas mal du tout comme idée de faire les mêmes scripts dans deux langages différents, ça permet de comparer.
Le code est assez facile à lire, bien que j'ai mis du temps à comprendre comment marche la fonction kamoulox().
Et faut changer cette Regex toute laide en quelque chose de plus joli et de plus lisible.
Comme quoi la libre concurrence du libéralisme qui nous entoure a pour effet de produire des bons trucs :)
En informatique seulement.
D'ailleurs ça a été l'occasion pour moi d'apprendre l'existence de sub :-°