Brisez les chaînes .. de caractères


h1 4/13/2006 04:18:00 PM

Tout à l'heure je discutais avec mon père, il me reparle d'un problème qu'il a en Javascript, et me demande si j'y ai repensé. Je réponds légèrement que non j'y ai pas repensé, je vois pas le problème, etc. Il s'acharne. Alors je pose sur papier un schéma de ce que j'ai en tête. Et là tout s'éclaire...

Vous faites du Javascript, en plein coeur de l'action vous avez quelques variables locales bien compliquées, genre une table de hachage, une fonction, des noeuds XML... Et vous voulez programmer une action à effectuer dans 42 secondes, qui devra utiliser ces données.

On pense à setTimeout, qui prend une chaîne S et un entier N, et évalue S après N millisecondes. Problème: la chaîne est évaluée dans le contexte global, dans lequel on ne voit pas les merveilles qu'on a localement, et qu'on ne peut pas non plus facilement encoder dans la chaîne de caractères. Mon papa ne se décourage pas et programme un système permettant de réserver une place identifiée par un entier pour ranger les infos concernées dans une liste globale, et parle ainsi de ces objets en écrivant l'entier dans sa chaîne. Au bout d'un peu de code et de debug, on s'en sort. Et on est fier d'avoir implémenté un petit système d'allocation de mémoire.

Pratiquant plutôt d'autres langages que je qualifierais de plus sains, j'avais en tête que setTimeout prend en paramètre une fonction F et un entier N, et appelle F() au bout de N millisecondes. Cela simplifie le problème, car Javascript lie les variables statiquement, c'est à dire que si dans ma F je parle de x et de n, il s'agit des x et n dans la portée de la définition de F. Du coup pas besoin d'aller faire des micmacs dans une variable globale ou à sérialiser des données complexes. On crée juste une fonction anonyme exécutant le boulot à faire dans 24 heures chrono, le plus naturellement du monde. Et ben figurez vous que le setTimeout de Javascript accepte aussi des fonctions comme je l'imaginais. Happy end.

Morale: un bon design résout bien des problèmes. Vive le fonctionnel, mort à eval(), aux armes, etc.


By the way, Python a relooké son site web. Python.org fait très pro, voire trop. Par contre on ne sait trop que penser de la campagne de comm menée par Python.com...

0 commentaires:

Un commentaire ?

< Accueil