À quoi bon avoir des standards si la communauté les charcutent à la première occasion. Je parle ici des librairies de code javascript, si commodes par moment, mais qui réduisent à néant l’effort de standardisation.

Je suis présentement en train de me taper un bouquin sur Dojo, qui à première vue semblait pas mal chouette et possédait un espèce d’aura «entreprise» de par sa stabilité et la qualité de son organisation. Mais plus je creuse, plus je me rends compte que des trucs vraiment étranges pullulent au sein de l’API de ces librairies. Un exemple poignant est la simple et incontournable méthode getElementById(id) du DOM. Cette méthode, pour les non-initiés, sert à trouver un élément du DOM qui possède l’id recherché (duh!):

var unDiv = document.getElementById("monDiv");

Ceci est standardisé dans le DOM, et est reconnaissable et reconnu par n’importe qui posant ses yeux sur du code javascript. Or, par pur pragmatisme et (disons-le) efficacité, les Dojo, YUI, Prototype et JQuery de ce monde se font un malin plaisir de redéfinir une fonctionnalité de la sorte:

Dojo:

var unDiv = dojo.byId("monDiv");

YUI:

var unDiv = YAHOO.util.Dom.get("monDiv");

Prototype & JQuery:

var unDiv = $("monDiv");

Ok je ne suis pas con. Je suis capable de comprendre les intentions derrière tout cela: compacter le code, améliorer la productivité du programmeur, corriger certains défauts de javascript, alouette. Mais ces librairies sont en train de redéfinir comment nous interagissont avec le DOM/javascript.

L’exemple plus haut en est un simple, la méthode dojo.hitch() de Dojo, l’est moins. Il s’agit ici d’accrocher l’exécution d’une fonction au creux d’un certain contexte (les autres librairies ont aussi quelque chose du même acabit). Ceci dit, compte tenu du respect que la communauté geek accorde au javascript, sera-t-il facile pour un néophyte de comprendre les nuances d’un truc du genre:

// portée d'exécution globale
var maFonc unObjet.saMethode;
maFonc();

versus,

// portée d'exécution de l'objet unObjet
var maFonc = function(){ unObjet.saMethode(); };
maFonc();

—-

Je pose la question: Ces surcharges d’expressions du langage, et d’accès au DOM, ne sont-elles pas carrément un nouveau langage en soi? Un programmeur qui passe deux ans en entreprise à faire des sites avec JQuery et qui doit maintenant attaquer un projet cold turkey javascript, est-il en pleine possession de ses moyens?

Bref, la standardisation du langage javascript (via son parent ECMAScript), et plus spécialement du DOM (W3C), n’est-elle utile qu’aux développeurs de ces librairies?

Je réfléchi à voix haute.

JS.

P.S. Suis-je en train de délirer de la même façon que les développeurs Java à l’aube de la prolifération des frameworks web enfouissant HTTP sous 20 couches d’abstraction? C’est bien possible.

Une réponse à “Les librairies javascript massacrent-elles les standards?”

  1. charles Says:

    Oui… vraiment… le délire est l’option la plus plausible…

    :)

Répondre