blog2geek.com
coinAvatar de coin

4 billets | Profil

Recherche Google

ce blog tous
Derniers billets Connexion
Archives

erlang

29/08/2006

Erlang Syntaxique (2)

Bon maintenant, attaquons les fonctions ...
Pour cela on va coder dans un fichier, c'est mieux !

Ouvrons tuto.erl.
la premiere ligne a ajouter est toujours :
-module(XXX).
avec XXX valant le nom du fichier sans son extension (et en minuscule je crois).
Ici on a donc -module(tuto).
Puis on a une ligne
-export([fun1/x, fun2/y ...]).
Cette ligne definie les fonctions exportees du module.
C'est une liste de noms de fonction suivie de leur nombre d'argument.
Ici nous allons faire une fonction double prenant un argument, nous auront donc :
-export([double/1]).
Il peut y avoir autant de lignes d'export que voulu.
Puis vient une autre directive de compilation possible :
-include("fichier").
Pour include un autre fichier (des "defines" la plupart du temps). A utiliser moderement.

Maintenant, la fonction !
Nous allons ecrire une fonction double, qui va retourner le double de la valeur passee en argument.

double(Arg) -> Arg * 2.

Et c'est fini.
Comme nous le voyons clairement(ou pas), cette fonction prend un argument (non type) et renvoi cet argument multiplie par 2.

Compilons ce fichier. Pour cela utilisons erl.
c(tuto).
Erlang est un langage integrant une fonction permettant de compiler (et en fait c'est le seul moyen de compiler). Elle prend un nom de module en entree (c'est pour cela que ca doit etre le meme que le nom de fichier).
Une fois compiler ({ok, tuto}), testons notre fonction.
ex : tuto:double(2).
resultat : 4.
Pas si mal.
ex : tuto:double("chaine de caractere").
resultat :
=ERROR REPORT==== DATE ===
Error in process <X.Y.Z> with exit value: {badarith,[{tuto,double,1},{shell,exp    rs,6},{shell,eval_loop,3}]}
** exited: {badarith,[{tuto,double,1},{shell,exprs,6},{shell,eval_loop,3}]} **

Hum ... ca veut dire quoi ?

Et bien Erlang fait du type checking, mais dynamiquement.
Il a detecter que l'operateur * n'est pas compatible avec une chaine de caractere et a donc renvoyer une exception badarith.
[{tuto,double,1},{shell,exprs,6},{shell,eval_loop,3}] correspond a la pile d'appels, pas si mal pour se reperer.Et enfin il nous remontre ce qui l'a fait quitter ...

Les erreurs de typages ne se manifesteront donc qu'a l'execution, ce qui est plutot normal car Erlang est un langage tres dynamique, permettant de compiler et d'executer du code a la volee, de modifier du code a la volee ou encore de renvoyer des valeurs de types differents au sein d'une meme fonction.

To be continued...