Rebol | Mise à jour 05-2002 |
|
Rebol est un langage de script récent. La présentation qui en est faite ici est forcément partielle, car mon expérience dans ce domaine est courte, mais j'espère qu'elle servira de base à d'autres débutants. De plus, il ne s'agit pas d'un cours de programmation complet, mais plutôt de montrer à l'aide d'exemples d'applications les possibilités et la syntaxe de ce langage. Aujourd'hui, la documentation est malheureusement peu volumineuse à part quelques livres et sites dont les références sont données au chapitre des liens. Ceci fait de Rebol un peu un langage de pionniers, ce qui rend l'aventure d'autant plus passionnante. Ses fonctions déjà étendues lui permettent d' envisager de nombreuses applications. Ce faisant, il est en constante évolution et les fonctions souhaitables seront sans doute prochainement intégrées. Au titre des avantages de Rebol, on peut signaler :
Les mots Les briques de base du langage sont les mots : instructions, fonctions, variables, constantes. Les mots sont groupés en séries (voir chapitre suivant). L'niterpréteur accepte des instructions directement au clavier ou écrites dans un fichier, d'extension .r. L'instruction do %/c/devrebol/exemple.r appelle un programme. L'instruction prenom: "Didier", formée de deux mots, définit une variable appelée prenom, et lui affecte une valeur constante. L'instruction print prenom affiche le contenu de la variable. Beaucoup d'instructions proposent des refinements qui permettent d'en modifier légèrement le comportement (par exemple pour une copie de chaine de caractères, nombre de caractères à copier; par défaut toute la chaine est copiée). Les séries La série, ou bloc, est la structure la plus importante de Rebol. Une série est un ensemble de mots encadrés par [ et ]. Un programme est une suite de blocs; un bloc peut en contenir d'autres. Des valeurs extraites d'une base de données forment un bloc. De ce fait, beaucoup d'instructions sont consacrées à la manipulation des séries. En voici quelques exemples :
Les chaines de caractères sont une sorte de série et ont des instructions similaires pour les traiter. Les variables et leur portée Selon l'endroit et la manière dont elle est définie, une variable peut être visible localement uniquement ou dans l'ensemble du programme et de ses fonctions. Une variable locale est définie dans une instruction : use [ variable1 variable2 ... ] [ instructions ] La notion de portée s'applique aussi aux fonctions. L'interface graphique et les "faces" L'interface graphique VID se compose de faces ( des boutons, des cases à cocher, des champs de saisie de texte ... ) disposées dans un layout. Une face est la combinaison :
D'autre part, certaines faces sont complexes à manipuler (notamment les listes, similaires aux zones de liste de Windows); nul doute cependant que cela s'arrangera avec les évolutions futures. La qualité des effets graphiques que l'on peut obtenir est en revanche excellente, et l'on applique très aisément un effet de dégradé à un fond d'écran ou un bouton. La manipulation des images est également très simple et affecter une image à un bouton est un jeu d'enfant. L'instruction suivante btok: button "Ok" blue green 100x40 [print "Vous avez cliqué ok"] définit :
Afin d'harmoniser la présentation des différentes faces d'un projet, Rebol autorise la création de styles personnalisés, un peu comme en HTML, en ligne ou en feuille de style. Nous avons défini ci-dessus le bouton de manière statique dans le layout. La modification dynamique des propriétés au cours du programme est permise. Ainsi, l'instruction btok/text: "Bouton OK" change le texte du bouton btok. Mysql Il existe plusieurs modules d'accès à une base de données Mysql :
Il semble que les deux modules sont quelque peu différents dans les fonctions offertes, mais je n'ai hélas pas d'information sur le sujet. Le principe de fonctionnement est d'ouvrir un port de communication avec le serveur de la base de données. Ensuite, les requêtes sont envoyées par l'intermédiaire de ce port, qui retourne les données demandées sous forme d'une série. Le serveur Mysql doit bien entendu avoir été lancé auparavant. Programmation objet La programmation objet est une technique désormais bien connue et appliquée dans de nombreux langages. Un objet est une structure qui regroupe des données (appelées propriétés) et des fonctions (appelées méthodes). Ce principe constitue l'encapsulation. L'héritage est la possibilité de créer un objet en modifiant un objet existant et en lui ajoutant des propriétés et méthodes spécifiques. L'objet résultant (dérivé) aura ces dernières en sus de celles de l'objet de départ. Le polymorphisme permet à des objets différents d'avoir des méthodes de nom identique. Ainsi, ue programme, sans avoir à se soucier de l'objet traité, peut appeler la méthode dessiner pour un objet "carré" ou "cercle" : c'est le contexte de l'objet qui déterminera quelle fonction exécuter. Pour être précis, la définition d'un objet s'appelle la classe. Un objet réel, créé à partir d'une classe, s'appelle une instance. Toutes les instances d'une classe ont les mêmes définitions, tout en ayant des variables séparées en mémoire. Environnement d'exploitation Rebol fournit un environnement d'exploitation sous forme d'un bureau personnalisable. Télécharger les exemples pour voir un modèle de fichiers de configuration. Le bureau peut être activé ou non au démarrage de Rebol (voir dans le menu user). Pour passer du bureau à la console, cliquer sur l'icone console; pour l'inverse, taper la commande desktop. Le bureau se présente sous la forme de 3 éléments principaux
Ce fichier définit soit un programme, soit un dossier. Dans le premier cas, il pointe un fichier source rebol; dans le second, il pointe sur un fichier index.r. Noter que ce dossier est une notion Rebol et ne correspond pas forcément à un dossier de l'arborescence de fichiers. Services.r Ce fichier définit les options qui apparaissent dans la barre de menus en haut du bureau. Outre les options pré-définies (on peut personnaliser Goto avec le fichier history.r), on peut ajouter des liens vers des programmes. Index.r Le fichier index définit le contenu d'un dossier rebol, et peut pointer soit vers un autre dossier, soit vers un programme. Ce fichier, à l'inverse des autres fichiers, peut être stocké dans n'importe quel emplacement du disque. User.r Ce fichier définit des fonctions spécifiques à l'utilisateur et est exécuté dès le lancement de l'interpréteur. On peut alors y changer les polices et couleurs par défaut (utile notamment sous Linux). D'autres fichiers et dossiers permettent de paramétrer d'autres aspects de l'environnement (icones, fonds d'écrans, ...). Voir les forums pour plus d'information à ce sujet. |
Les exemples assez nombreux abordent les aspects essentiels de Rebol, sans être pour autant exhaustif tant le nombre de fonctions est important. Les explications ci-dessous présentent les divers programmes, en détaillant les fonctionnalités mises en oeuvre. L'accent a beaucoup été mis sur l'aspect graphique, en raison de son attrait esthétique d'une part, de son poids technique d'autre part. Télécharger le code pour obtenir les programmes sources commentés.
Il s'agit d'un jeu de lettres, où un mot est transformé en "javanais" en introduisant entre une consonne et une voyelle la syllabe AV (ou une autre). Ainsi traité, le mot "bonjour" devient "bavonjavour". Les fonctions mises en oeuvre pour cette réalisation :
Un damier de 3 x 3 cases est le cadre de ce jeu. Les cases sont numérotées de 1 à 9, colorées aléatoirement en vert ou rouge. Le but est d'obtenir l'inversion de leurs couleurs en cliquant dessus afin d'arriver à avoir toutes les cases vertes sauf celle du milieu. Outre l'intérêt ludique de ce programme, son attrait technique réside dans l'utilisation des fonctions suivantes :
Le premier programme trace un graphe, dont la forme dépend d'un paramètre de 1 à 4. Chaque appui sur le bouton affiche un autre graphe. Le second ressemble au premier mais avec des dessins beaucoup plus sophistiqués, et avec l'avantage de montrer la composition du graphe au fur et à mesure du calcul. Il est possible d'interrompre à tout moment le programme. Principales caractéristiques de programmation :
Ces programmes ont juste pour but de montrer la manière d'écrire des programmes qui en appellent d'autres. La méthode consiste à faire disparaître un layout lors de l'affichage du suivant puis, à la fin du second, à réafficher le premier. Bien sûr, les données des différents progammes ne doivent pas s'écraser mutuellement.
Ce programme montre plusieurs des effets graphiques applicables aux faces d'un layout, ainsi que le traitement par programme de ces effets.
Le programme montre l'utilisation simple des fichiers (ouverture, ecriture, lecture, propriétés).
Le programme donne un exemple d'accès à une base de données via le module de Dockimbel. Il ne démontre que la lecture, mais l'écriture ne pose pas de problème particulier, celle-ci s'effectuant par l'intermédiaire de requêtes SQL. La lecture des données extraites par la requête s'effectue de deux manières :
Quelle que soit la méthode de lecture, un défaut majeur se fait jour : dans la série, les champs sont obtenus par leur n° d'ordre. Afin d'éviter ceci, il est possible de réaliser une fonction qui fait le lien automatique entre le nom du champ et son ordre dans la série; on exploite pour cela la commande sql SHOW COLUMNS FROM TABLE. On passe en paramètre à la fonction le nom du champ, celle-ci nous retourne sa valeur : souplesse et sécurité. Rappel : Le module utilisé ici est celui de Dockimbel. Le module inclus dans command pro fonctionne sans doute d'une autre manière.
Ce programme illustre la programmation objet en proposant la définition d'un objet voiture et d'un objet limousine, dérivé de la voiture. On exploite ici les notions expliquées dans la définition de la programmation objet :
Cet ensemble de programmes teste la portée des variables et fonctions. Son but est de démontrer le fonctionnement de la gestion mémoire et d'en prévenir les effets pervers (le plus dangereux, car difficile à détecter, étant l'écrasement d'une variable ou fonction par celle d'un autre programme). Une alternative à ce mécanisme est de créer des objets, qui contiennent les variables et fonctions nécessaires. Il suffit de supprimer l'objet pour effacer la mémoire allouée. La création d'un objet résout également le problème de modules standard. En effet, dans un logiciel, il est fréquent d'avoir des fonctions utiles à tous les programmes. Plutôt que les réécrire dans chacun, on en fait une source séparée que l'on appelle au moment voulu. On retombe alors dans le risque d'avoir défini dans le module standard des noms de variables et de fonctions utilisés par ailleurs dans le logiciel. Le recours aux objets isole ces éléments de manière radicale. |
Site officiel de rebol, en anglais : http://www.rebol.com
http://dockimbel.e-galopins.com/rebol/mysql/main.html |