Aller au menu - Aller au contenu

Premiers contacts avec le langage


Informations sur le tutoriel

AvatarAvatarAvatar
Auteurs : iPoulet, Linkoln et shareman
Difficulté : Facile
Visualisations : 6 083


Plus d'informations Plus d'informations

Historique des mises à jour

  • Le 15/07/2009 à 13:17:26
    Mise à jour
  • Le 11/07/2009 à 10:50:02
    Correction d'un doublon
  • Le 11/07/2009 à 10:49:31
    Correction d'un doublon
Nous allons découvrir Rebol et sa syntaxe (assez inhabituelle pour les débutants) à l'aide de quelques exemples d'expressions dans ce langage. Il suffit de les taper en ligne de commande et nous avons le résultat ;) .
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Des calculs

La première chose que nous pouvons faire en Rebol est de vérifier si nos opérateurs mathématiques habituels fonctionnent encore :

Code : Console
>> 40 + 2
== 42
>> 545 - 2342 + 12
== -1785
>> 2 * 3
== 6
>> 2 ** 16
== 65536.0


À chaque fois, Rebol nous donne le résultat sur la ligne suivante, précédé par un "==". Notez l'opérateur ** qui sert à élever un nombre à une certaine puissance. Le résultat est un nombre flottant : ils se notent comme en C, à l'aide d'un point pour la virgule.

Testez l'exemple suivant : 12 + 3 * 2. Surprise ! Rebol ne gère pas la priorité des opérateurs ! En effet, et c'est peut-être un peu dommage, Rebol ne tient pas compte de règles de priorité pour les opérateurs mathématiques (ou autres) et exécute de gauche à droite tout ce qu'il trouve. Il faudra faire avec ;) .

Bien que Rebol soit faiblement typé (nous reviendrons sur ce terme), il possède une vague notion de types de données. De même qu'en C vous utilisiez des nombres de types int ou long pour les entiers, float ou double pour les flottants, ici les types Rebol sont appelés Integer! et Decimal!. Avec le point d'exclamation, oui.

Si vous essayez vos propres calculs, vous écrirez peut-être à un moment une opération mathématique sans espace de chaque côté des opérateurs : Rebol vous signalera une erreur ! Les opérateurs doivent être séparés des opérandes par un espace.

Des variables

Ceci ne devrait pas trop vous dépayser : vous connaissez certainement les variables, pour les avoir déjà rencontrées dans d'autres langages. Elles servent à stocker des résultats intermédiaires, et peuvent être déclarées en ligne de commande comme les autres. Regardez ces exemples pour comprendre quelle est la syntaxe :

Code : Console
>> a: 42
== 42
>> foo-bar: a
== 42
>> a + foo-bar
== 84
>> c: d: e: 14
== 14
>> a + (z: 32)
== 74


Il faut donc utiliser deux points pour définir une variable (et pas de caractère étrange pour en utiliser une). Des notations assez riches sont autorisées, par exemple foo-bar qui ne sera pas compris comme étant une soustraction (cf. fin de la partie précédente :D ) mais comme un nom. Notez qu'une définition de variable renvoie la valeur stockée, d'où l'exemple de la dernière ligne. Suivant l'ordre des parenthèses, z est défini à 32, puis la valeur 32 est renvoyée, et l'opération est effectuée. Je ne vous conseille pas d'abuser de cette possibilité, ça ne facilite en rien la lecture du code.

Profitons-en pour découvrir quelques fonctions (ici encore, vous connaissez le concept). Commençons par la fonction print : elle affiche ce que vous lui donnez en argument, et finit par un retour à la ligne.

Code : Console
>> print "Bonjour les zéros !"
Bonjour les zéros !


Ici, pas de symbole "==" : ça n'est pas une valeur de retour que Rebol nous a affichée, mais bien du texte imprimé sur l'écran par la commande print. Il existe aussi une fonction prin qui se comporte comme print mais sans retour à la ligne.

Dans certains langages (comme Python avant la version 3), l'instruction print permet d'afficher plusieurs éléments à la suite si on les sépare par des virgules. Par exemple on pourrait avoir en Python

Code : Console
>> print "a vaut", a, "!"
a vaut 42 !


Pour faire ceci en Rebol, pas besoin d'utiliser une syntaxe spéciale : il suffit d'utiliser un type de données que nous aborderons plus tard, les blocs. Les blocs contiennent plusieurs éléments, séparés par des espaces, entre des crochets. Ils permettent par exemple d'écrire print ["a vaut" a "!"] pour avoir un résultat équivalent au précédent :) .

Des mots

Voici un concept important, sur lequel nous devrons pourtant nous montrer brefs pour l'instant : Rebol sait manipuler des objets d'un type étrange, les mots. Ce sont des expressions a priori anodines, et elles pourraient vous rappeler les chaînes de caractères. Grossière erreur ! Les mots sont plus que ça.

Contrairement aux blocs et aux valeurs littérales comme les chaînes de caractères ou les nombres, ils n'ont de valeur que quand vous les définissez. Par exemple, avant d'être une fonction, print est un mot? qui a été défini pour être la fonction print que nous connaissons. Un peu tordu non :p ?

Les mots sont un nom avant d'être une valeur. Cela veut dire qu'on peut les manipuler en tant que tels, en faisant précéder ce nom par un ' (apostrophe). Par exemple, il est correct d'écrire

Code : Console
>> variable: 'print
== print
>> print variable
== print


La variable variable contient le mot print. Nous aurions pu écrire print 'print. Ici, le mot print apparaît deux fois, mais la deuxième fois (avec l'apostrophe) il a un sens littéral, tandis que la première fois, il est évalué comme étant une fonction. C'est simple : précéder un mot d'une apostrophe empêche son évaluation. Nous verrons plus tard à quoi cela peut servir.

Il y a une autre opération que l'on peut faire sur les mots, qui empêche leur évaluation mais ne donne pas pour autant leur sens littéral. En ajoutant : avant leur nom, on permet de copier ces mots sans les évaluer, mais sans se contenter de stocker leur nom pour autant. Petit exemple :

Code : Console
>> foo: 'print
== print
>> bar: :print
>> baz: print
** Script Error: print is missing its value argument
** Near: baz: print
>> foo 3
== 3
>> bar 3
3


Nous tentons de définir trois variables. L'une d'elle contient le mot littéral print. L'autre copie la fonction print. La dernière? ne sera pas définie, car la syntaxe est incorrecte. En effet, quand nous écrivons baz: print, Rebol croit que nous souhaitons stocker dans baz le résultat qui se trouve à droite des deux points, or print tout seul n'est pas une opération correcte (l'erreur nous le dit : il manque des arguments).

Ensuite, nous utilisons nos deux variables en tentant de passer 3 en argument. Dans le premier cas, on pourrait croire que cela réussit, mais non : rappelez-vous de ce que je vous ai dit ! Si c'était print qui affichait un résultat à l'écran, il n'y aurait pas de "==" placé avant le 3 :) . Rebol se contente donc d'évaluer la dernière expression et de la renvoyer. En revanche, dans le deuxième cas, la variable bar agit comme print, et affiche son argument à l'écran.

Pour l'instant, les mots vous semblent probablement inutiles. Nous verrons cependant qu'ils permettent de définir au sein de Rebol des micro-langages adaptés en fonction du contexte, et qu'ils autorisent une grande souplesse dans la syntaxe du langage. Contrairement au C (et à la grande majorité des langages) où il existe des mots réservés, Rebol vous autorise par exemple? à redéfinir le mot if, dont nous verrons au chapitre suivant qu'il a pourtant le même sens qu'en C, à savoir de permettre les instructions conditionnelles. Mais l'intérêt de ceci est également encore assez flou pour vous, je le sens bien :D .

N'ayez pas peur de Rebol. Je vous ai présenté les mots pour vous déstabiliser un petit peu, mais maintenant que c'est fait plus rien de compliqué ne nous attend :) .
Chapitre précédent Sommaire Chapitre suivant

Informations sur le tutoriel

Retour en haut Retour en haut

Créé : Le 29/06/2009 à 12:37:25
Modifié : Le 15/07/2009 à 13:17:26
Avancement : 100%
Licence : Copie non autorisée

1 commentaire