Rebol Valid XHTML 1.1Cette page est conforme à la norme CSS!Mise à jour 05-2002
SOMMAIRE

Présentation
    Préambule
    Description du langage
Les exemples détaillés
Les outils et liens
Télécharger les exemples
PRESENTATIONRetour en haut de page

Préambule

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 :
  • multi-plateformes (Windows, Linux),
  • interpréteur très léger,
  • interface graphique puissante et simple,
  • base de données Mysql,
  • programmation objet,
  • environnement d'exploitation
D'autres personnes ajouteront internet, parsing, ... en fonction de leurs applications de prédilection.

Description et syntaxe

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 :
Mot Exemple Résultat
copy message: copy ["Bonjour" "amis" ] Initialise la série message en y copiant 2 mots
append append message ["de" "Rebol"] ajoute 2 mots à la série
length length? message donne le nombre de mots de la série
first, second second message donne le deuxième mot de la série
head, tail, next   positionne au début, à la fin ou sur le mot suivant
remove remove/part message 2 supprime les deux premiers mots de la série (par le refinement /part)

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'un style (bouton, case à cocher, ...),
  • de facets qui précisent certains paramètres (police, couleur, ...),
  • d'une action lorsque la face est "cliquée"
Les mots qui expriment les propriétés sont identiques entre toutes les faces, ce qui simplifie leur compréhension et leur mémorisation. Cependant, on peut regretter que l'aide existante ne soit pas suffisament fournie au sujet de quel mot s'applique à quelle face.
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 :
  • un bouton nommé btok,
  • de 100 pixels de large sur 40 de haut,
  • affichant le texte "Ok",
  • avec un fond de couleur bleue, devenant vert lorsqu'on enfonce le bouton de la souris,
  • qui affiche "Vous avez ..." lors d'un clic
A noter que l'ordre des paramètres est sans importance.

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 :
  • le module natif de command/pro
  • le module de Dockimbel
Le premier est disponible avec la version professionnelle de Rebol. Le second convient pour la version gratuite, celle décrite ici.
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
  • le bandeau de menu à gauche (config dans le fichier bookmarks.r),
  • la barre de menus (fichier services.r),
  • la zone de programmes (fichiers index.r, ce nom n'est pas obligatoire)
Bookmarks.r
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 DETAILLESRetour en haut de page

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.

Javanais (javanais.r) Suiv.

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 :
  • essentiellement le traitement des chaînes de caractères,
  • un champ de saisie,
  • une zone de choix multiple,
  • des fonctions avec valeur de retour

Jeu des cases (cases.r) Préc.Suiv.

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 :
  • des boutons avec dégradé de couleur,
  • des panels pour organiser l'écran de jeu,
  • le changement de couleur au cours du traitement,
  • un tableau représentant les cases,
  • des variables locales,
  • des nombres tirés au hasard,
  • la composition de commandes paramétrées,
  • des fonctions avec et sans paramètres,
  • une boîte de message d'avertissement

Tracé de graphe (graphe.r) et courbes aléatoires (courbes.r) Préc.Suiv.

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 :
  • box pour le tracé du graphe,
  • utilisation des instructions de dessin draw,
  • fonctions mathématiques

Menus (menu 1 2 3.r) Préc.Suiv.

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.


Effets des faces (effets.r) Préc.Suiv.

Ce programme montre plusieurs des effets graphiques applicables aux faces d'un layout, ainsi que le traitement par programme de ces effets.


Traitement de fichiers (fichiers.r) Préc.Suiv.

Le programme montre l'utilisation simple des fichiers (ouverture, ecriture, lecture, propriétés).


Traitement de base de données Mysql (lecliv.r) Préc.Suiv.

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 :
  • en une fois
    Les données de la requête sont obtenues en une seule fois dans une série, celle-ci étant elle-même composée de séries, chacune représentant une ligne de la requête.
    Le fonctionnement est alors similaire à celui des fichiers, vu précédemment. La série étant complètement chargée, il est possible d'avancer ou de reculer dans la séquence.
  • par un port
    La lecture obtient à chaque fois une nouvelle ligne, sous la forme d'une série.
La première méthode est aisée à traiter, elle a cependant l'inconvénient de nécessiter beaucoup de mémoire en fonction du volume de données extraites.

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.


Programmation objet : démonstration (voitobj.r) Préc.Suiv.

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 :
  • l'encapsulation (définition des variables et fonctions),
  • l'héritage (limousine = voiture + particularités),
  • le polymorphisme (afficher l'état des véhicules de manière un peu différente)

Portée des variables et fonctions (portee11 12 21 22 31 41 42.r) Préc.

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.


LES OUTILS ET LIENSRetour en haut de page

Site officiel de rebol, en anglais : http://www.rebol.com
  • possibilité de s'inscrire à la mailing list
  • téléchargement des logiciels gratuits (core et view)
  • aide sur le langage
Site français : http://www.rebolfrance.org
  • tutorial rapide
  • forum
Site de Dockimbel, pour le module Mysql :
http://dockimbel.e-galopins.com/rebol/mysql/main.html