English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Fonctions Erlang

Erlang est un langage de programmation fonctionnel bien connu, donc vous verrez beaucoup sur la manière dont les fonctions fonctionnent en Erlang. Ce chapitre présente comment utiliser les fonctions en Erlang pour effectuer toutes les opérations.

Définir une fonction

La syntaxe de la déclaration de fonction est la suivante :

Syntaxe

FunctionName(Pattern1… PatternN) ->
Body;

Ici,

  • FunctionName − Le nom de la fonction est un atome (unicité)

  • Pattern1... PatternN − Chaque paramètre est un schéma. Le nombre de paramètres N est le nombre de paramètres de la fonction. Le nom de la fonction est unique par module, nom de la fonction et nombre de paramètres définis. Par conséquent, deux fonctions ayant le même nom dans le même module mais ayant un nombre de paramètres différent sont considérées comme deux fonctions différentes.

  • Body − Le corps d'une clause est formé d'une séquence d'expressions séparées par des virgules (,)

Le programme suivant est un exemple simple d'utilisation d'une fonction -

Exemple

-module(helloworld). 
-export([add/2,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
start() -> 
   add(5,6).

Points à noter sur le programme ci-dessus-

  • Nous définissons deux fonctions, une fonction appelée add, qui nécessite 2 un paramètre, et l'autre fonction est start ;

  • Ces deux fonctions sont définies en utilisant la fonction export. Si nous ne le faisons pas, nous ne pourrons pas utiliser les fonctions;

  • Une fonction peut être appelée dans une autre fonction. Dans cet exemple, la fonction start appelle la fonction add;

Le résultat de la sortie du code suivant est -

11

Fonction anonyme

Une fonction anonyme est une fonction qui n'est pas associée à aucun nom. En Erlang, il existe des outils pour définir des fonctions anonymes. Le programme suivant est un exemple d'une fonction anonyme.

Exemple

-module(helloworld). 
-export([start/0]). 
start() -> 
   Fn = fun() -> 
      io:fwrite("Fonction anonyme") end, 
   Fn().

Pour l'exemple ci-dessus, il y a quelques points à noter -

  • Les fonctions anonymes sont définies en utilisant le mot-clé fun()

  • Cette fonction est attribuée à une variable nommée Fn

  • Cette fonction est appelée par le nom de la variable

Le résultat de la sortie du code suivant est -

Fonction anonyme

Fonction utilisant plusieurs paramètres

Les fonctions Erlang peuvent être définies avec zéro ou plusieurs paramètres. La redéfinition de fonction est également possible, vous pouvez définir une fonction ayant le même nom, tant qu'elles ont un nombre différent de paramètres. Dans l'exemple suivant, chaque définition de la fonction demo est faite en utilisant plusieurs paramètres.

Code d'exemple

-module(helloworld). 
-export([add/2,add/3,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
add(X,Y,Z) -> 
   A = X+Y+Z, 
   io:fwrite("~w~n",[A]). 
 
start() ->
   add(5,6) 
   add(5,6,6).

Dans le programme ci-dessus, nous définissons deux fois la fonction add. Mais la définition de la première fonction add utilise deux paramètres, et la définition de la deuxième fonction add utilise trois paramètres.

Le résultat de la sortie du code suivant est -

11
17

Fonction utilisant une séquence

En Erlang, les fonctions ont également la capacité de séquence de protection. Ce n'est rien de spécial, c'est juste une expression, la fonction ne s'exécute que lorsque l'évaluation (calcul) est true.

L'utilisation de la syntaxe de la fonction de séquence de protection est montrée dans le programme suivant.

FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;

Ici,

  • FunctionName − Le nom de la fonction est un atome (unicité)

  • Pattern1... PatternN − Chaque paramètre est un schéma. Le nombre de paramètres N est le nombre de paramètres de la fonction. Le nom de la fonction est unique par module, nom de la fonction et nombre de paramètres définis. Par conséquent, deux fonctions ayant le même nom dans le même module mais ayant un nombre de paramètres différent sont considérées comme deux fonctions différentes.

  • Body − Le corps d'une clause est formé d'une séquence d'expressions séparées par des virgules (,)

  • GuardSeq1 − Lorsque la fonction est appelée, elle récupère l'expression calculée.

Le programme suivant est un exemple simple d'une fonction utilisant une séquence de protection.

Code d'exemple

-module(helloworld). 
-export([add/1,start/0]). 
add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 
start() -> 
   add(4).

Le résultat de la sortie du code suivant est -

4

Si la fonction add est appelée comme add(3),Ce programme produira une erreur.