Depuis quelques semaines, j'ai quelques ennuis avec ma plateforme de blog. En fait, depuis quelques temps, je mets au point un "framework" de dévelopment Web basé sur le language Scheme.
Il s'agit d'un language fonctionnel très simple, mais très évolué. Le fait de pouvoir manipuler des fonctions comme des objects est très pratique. Le moteur de motif pour générer des pages HTML ou XML ou simplement du texte utilise pleinement cette fonctionnalité. C'est très simple et efficace. Il n'y a pas besoin de comprendre l'héritage de motif ou d'introduire d'autre principe comme de l'héritage de classe.
Pour donner un aperçu. Un motif est une fonction. Lorsqu'elle est appelée, elle écrit son texte. Pour ajouter de la souplesse, on peut par exemple passer le titre de la page en paramètre. Relativement simple. Un moteur de motif devrait permettre plus. L'utilisation classique est d'avoir un motif pour le design général d'une page et d'avoir le contenu variable. Pour réaliser cela, on définit une fonction qui prend comme paramètre le titre de la page à générer et un deuxième paramètre qui est une fonction qui produit le contenu. En Javascript, ça donne:
function design_de_base(titre, contenu) {
document.write("<html><head><title>") ;
document.write(titre) ;
document.write("</title></head><body>") ;
contenu() ;
document.write("</body></html>") ;
}
La version Scheme est:
(define (design-de-base titre contenu)
(display "<html><head><title>">)
(display title)
(display "</title></head><body>")
(contenu)
(display "</body></html>"))
Ensuite, il suffit d'utiliser cette fonction avec les bons
paramètres. Un premier exemple avec la page de bienvenue d'un site.
design_de_base("Page de bien venue",
function () {
document.write("Welcome sur mon site...") ;
}) ;
Un deuxième exemple pour afficher un article
design_de_base("Ceci est le titre de mon article",
function () {
document.write("Mon article commence comme ceci...") ;
}) ;
Par un simple jeu de fonction passé en paramètre, on peut simplement
et librement composer les pages voulues. Simple non ?