English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Erlang è un linguaggio di programmazione funzionale noto a tutti, quindi vedrete molte informazioni su come le funzioni funzionano in Erlang. Questo capitolo introduce come utilizzare le funzioni in Erlang per completare tutte le operazioni.
La sintassi della dichiarazione della funzione è la seguente:
FunctionName(Pattern1… PatternN) -> Body;
Qui,
FunctionName − Il nome della funzione è un atomo (unicità)
Pattern1… PatternN − Ogni parametro è un modello. Il numero di parametri N è il numero di parametri della funzione. Il nome della funzione è unico per il modulo, il nome della funzione e il numero di parametri definiti. Ad esempio, due funzioni con lo stesso nome ma in moduli diversi e con un numero diverso di parametri sono considerate due funzioni diverse.
Body − Il corpo di una clausola è composto da una sequenza di espressioni separate da virgole (,)
Il seguente programma è un esempio semplice dell'uso di una funzione -
-module(helloworld). -export([add/2,start/0]). add(X,Y) -> Z = X+Y, io:fwrite("~w~n",[Z]). start() -> add(5,6).
Per il programma sopra, ci sono alcuni punti da notare -
Definiamo due funzioni, una chiamata add che richiede 2 parametri, e un'altra chiamata start;
Queste due funzioni sono definite utilizzando la funzione export. Se non lo facciamo, non possiamo utilizzare le funzioni;
Una funzione può essere chiamata all'interno di un'altra funzione. In questo caso, la funzione start chiama la funzione add;
Il risultato di uscita del codice sopra è -
11
Funzione anonima
Una funzione anonima è una funzione che non è associata a nessun nome. In Erlang ci sono strumenti per definire funzioni anonime. Il seguente programma è un esempio di una funzione anonima.
-module(helloworld). -export([start/0]). start() -> Fn = fun() -> io:fwrite("Funzione anonima") end, Fn().
Per l'esempio sopra, ci sono alcuni punti da notare -
Le funzioni anonime sono definite utilizzando il chiave di parola fun()
La funzione viene assegnata a una variabile chiamata Fn
La funzione è chiamata tramite il nome della variabile
Il risultato di uscita del codice sopra è -
Funzione anonima
Funzione con più parametri
Le funzioni Erlang possono essere definite con zero o più parametri. Anche il sovraccarico delle funzioni è possibile; è possibile definire una funzione con lo stesso nome, purché abbiano un numero diverso di parametri. Nei seguenti esempi, ogni definizione della funzione demo è definita utilizzando più parametri.
-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).
Nel programma sopra, abbiamo definito due volte la funzione add. Ma la definizione della prima funzione add utilizza due parametri, mentre la definizione della seconda funzione add utilizza tre parametri.
Il risultato di uscita del codice sopra è -
11 17
La funzione utilizza la sequenza
In Erlang, le funzioni hanno anche la capacità di sequenza di protezione. Questo non è nulla di eccezionale; è solo un'espressione che viene eseguita solo quando valutata (calcolata) come true.
L'uso della sintassi della funzione di sequenza di protezione è illustrato nel programma seguente.
FunctionName(Pattern1… PatternN) [quando GuardSeq1]-> Body;
Qui,
FunctionName − Il nome della funzione è un atomo (unicità)
Pattern1… PatternN − Ogni parametro è un modello. Il numero di parametri N è il numero di parametri della funzione. Il nome della funzione è unico per il modulo, il nome della funzione e il numero di parametri definiti. Ad esempio, due funzioni con lo stesso nome ma in moduli diversi e con un numero diverso di parametri sono considerate due funzioni diverse.
Body − Il corpo di una clausola è composto da una sequenza di espressioni separate da virgole (,)
GuardSeq1 − Quando la funzione viene chiamata, essa ottiene l'espressione da calcolare.
Il seguente programma è un esempio semplice di una funzione che utilizza una sequenza di protezione.
-module(helloworld). -export([add/1,start/0]). add(X) when X>3 -> io:fwrite("~w~n",[X]). start() -> add(4).
Il risultato di uscita del codice sopra è -
4
Se la funzione add viene chiamata come add(3), il programma mostrerà un errore.