26-08-2011, 05:36 PM
(Modification du message : 26-08-2011, 05:48 PM par Sephi-Chan.)
Les modules permettent de regrouper les fonctions.
Voici un exemple de module, défini dans un fichier nommé geometry.erl (c'est important) :
On définit un module geometry et on expose une fonction nommée "area" et d'arité 1 (elle accepte 1 argument).
On peut ensuite voir 2 définitions. C'est encore du pattern matching : la fonction area regardera la "tronche" de son argument et le comparera aux différents pattern qu'elle comprend, dans l'ordre dans lequel apparaissent les patterns dans le code. Si on passe un argument qui ne correspond à aucun motif, Erlang criera très fort.
Ici, on distingue 2 motifs. Les deux sont des tuples (mais ça pourrait être autre chose) à laquelle la fonction peu apporter 2 réponses bien différentes.
Pour essayer ce module, on lance à nouveau une console (depuis l'endroit où se trouve votre fichier geometry.erl, sinon il faudra faire un cd("/Users/romaintribes/Development/Erlang") depuis la console Erlang) et on compile le module.
La compilation du module a crée un fichier geometry.beam. Tant que ce fichier existe, vous pourrez accéder au module geometry, sans avoir à le recompiler à chaque fois que vous ouvrez la console.
On peut voir que le pattern matching marche bien et que mine de rien, le code est plutôt concis.
Voici un exemple de module, défini dans un fichier nommé geometry.erl (c'est important) :
-module(geometry).
-export([ area/1 ]).
area({ rectangle, Width, Height }) -> Width * Height;
area({ circle, Radius }) -> 3.14 * Radius * Radius.
On définit un module geometry et on expose une fonction nommée "area" et d'arité 1 (elle accepte 1 argument).
On peut ensuite voir 2 définitions. C'est encore du pattern matching : la fonction area regardera la "tronche" de son argument et le comparera aux différents pattern qu'elle comprend, dans l'ordre dans lequel apparaissent les patterns dans le code. Si on passe un argument qui ne correspond à aucun motif, Erlang criera très fort.
Ici, on distingue 2 motifs. Les deux sont des tuples (mais ça pourrait être autre chose) à laquelle la fonction peu apporter 2 réponses bien différentes.
Pour essayer ce module, on lance à nouveau une console (depuis l'endroit où se trouve votre fichier geometry.erl, sinon il faudra faire un cd("/Users/romaintribes/Development/Erlang") depuis la console Erlang) et on compile le module.
1> c(geometry).
{ok,geometry}
2> geometry:area({ rectangle, 10, 15 }).
150
3> geometry:area({ circle, 5 }).
78.5
4> geometry:area({ circle, 5, 5 }).
** exception error: no function clause matching geometry:area({circle,5,5})
La compilation du module a crée un fichier geometry.beam. Tant que ce fichier existe, vous pourrez accéder au module geometry, sans avoir à le recompiler à chaque fois que vous ouvrez la console.
On peut voir que le pattern matching marche bien et que mine de rien, le code est plutôt concis.