|
| 1 | +# Funzioni freccia, le basi |
| 2 | + |
| 3 | +Esiste un modo più conciso per creare funzioni in javascript spesso migliore delle espressioni di funzione. |
| 4 | + |
| 5 | +Sono chiamate “funzioni freccia (arrow functions)” e vengono scritte in questo modo: |
| 6 | + |
| 7 | +```js |
| 8 | +let func = (arg1, arg2, ...argN) => expression |
| 9 | +``` |
| 10 | + |
| 11 | +Questo codice crea una funzione `func` che accetta i parametri `arg1..argN`, successivamente valuta `l’espressione` di destra e ne ritorna il risultato |
| 12 | + |
| 13 | +In altre parole è la versione compatta di: |
| 14 | + |
| 15 | +```js |
| 16 | +let func = function(arg1, arg2, ...argN) { |
| 17 | + return expression; |
| 18 | +}; |
| 19 | +``` |
| 20 | + |
| 21 | +Vediamo un esempio concreto: |
| 22 | + |
| 23 | +```js run |
| 24 | +let sum = (a, b) => a + b; |
| 25 | + |
| 26 | +/* Questa funzione freccia è la versione compatta di: |
| 27 | +
|
| 28 | +let sum = function(a, b) { |
| 29 | + return a + b; |
| 30 | +}; |
| 31 | +*/ |
| 32 | + |
| 33 | +alert( sum(1, 2) ); // 3 |
| 34 | +``` |
| 35 | + |
| 36 | +Come si vede dal codice, `(a, b) => a + b` è una funzione che accetta due paramentri chiamati `a` e `b`, durante l’esecuzione la funzione valuta l’espressione `a + b` e ne restituisce il risultato. |
| 37 | + |
| 38 | +- Se abbiamo un solo parametro per la funzione, le parentesi intorno al parametro possono essere omesse: |
| 39 | + |
| 40 | + Per esempio: |
| 41 | + |
| 42 | + ```js run |
| 43 | + *!* |
| 44 | + let double = n => n * 2; |
| 45 | + // è come scrivere: let double = function(n) { return n * 2 } |
| 46 | + */!* |
| 47 | + |
| 48 | + alert( double(3) ); // 6 |
| 49 | + ``` |
| 50 | + |
| 51 | +- Se non ci sono parametri, le parentesi saranno vuote. (ma dovrebbero essere presenti): |
| 52 | + |
| 53 | + ```js run |
| 54 | + let sayHi = () => alert("Hello!"); |
| 55 | +
|
| 56 | + sayHi(); |
| 57 | + ``` |
| 58 | + |
| 59 | +Le funzioni freccia possono essere utilizzate nello stesso modo delle espressioni di funzione: |
| 60 | + |
| 61 | +Per esempio, possiamo creare dinamicamente una funzione: |
| 62 | + |
| 63 | +```js run |
| 64 | +let age = prompt("What is your age?", 18); |
| 65 | +
|
| 66 | +let welcome = (age < 18) ? |
| 67 | + () => alert('Hello') : |
| 68 | + () => alert("Greetings!"); |
| 69 | +
|
| 70 | +welcome(); |
| 71 | +``` |
| 72 | + |
| 73 | +Le funzioni freccia possono apparire poco familiari e poco leggibili all’inizio, ma questo cambia man mano che vengono utilizzate e ci si abitua alla nuova sintassi. |
| 74 | + |
| 75 | +Sono molto pratiche per le azioni che richiedono una solo linea di codice, quando siamo troppo pigri per scrivere. |
| 76 | + |
| 77 | +## Funzioni freccia su più linee |
| 78 | + |
| 79 | +Le funzioni viste negli esempi precedenti accettano dei parametri a sinistra del simbolo `=>` e valutano l’espressione alla sua destra sulla base dei parametri in ingresso. |
| 80 | + |
| 81 | +Qualche volta abbiamo l’esigenza di scrivere funzioni più complesse come espressioni o dichiarazioni multi linea. E’ possibile con le funzioni freccia ma dobbiamo racchiudere le linee in parentesi graffe e usare il `return` per ritornare il risultato. |
| 82 | + |
| 83 | +Come in questo esempio: |
| 84 | + |
| 85 | +```js run |
| 86 | +let sum = (a, b) => { // le parentesi graffe iniziano la funzione multi linea |
| 87 | + let result = a + b; |
| 88 | +*!* |
| 89 | + return result; // se usiamo le parentesi graffe dobbiamo esplicitare il valore ritornato con "return" |
| 90 | +*/!* |
| 91 | +}; |
| 92 | +
|
| 93 | +alert( sum(1, 2) ); // 3 |
| 94 | +``` |
| 95 | + |
| 96 | +```smart header="C’è dell’altro" |
| 97 | +
|
| 98 | +Abbiamo elogiato le funzioni freccia per la loro brevità e compattezza, ma non è tutto. |
| 99 | +Le funzioni freccia hanno anche altre caratteristiche interessanti. |
| 100 | +
|
| 101 | +Per studiarle in dettaglio, bisogna prima conoscere altri aspetti di Javascript, per cui ritorneremo sull’argomento successivamente nel capitolo <info:arrow-functions> |
| 102 | +
|
| 103 | +Per ora possiamo già usare le funzioni freccia per le azioni a singola-linea e le funzioni di callbacks |
| 104 | +
|
| 105 | +``` |
| 106 | + |
| 107 | +## Riepilogo |
| 108 | + |
| 109 | +Le funzioni freccia sono pratiche per le espressioni in una singola linea. Si presentano in due forme: |
| 110 | + |
| 111 | +1. Senza parentesi graffe: `(...args) => expression` -- il lato destro è un espressione: viene valutata dalla funzione e restituisce un risultato |
| 112 | +2. Con parentesi graffe: `(...args) => { body }` -- le parentesi ci permettono di scrivere del codice su più linee dentro la funzione, ma abbiamo bisogno di esplicitare il valore restituito con la parola `return` |
0 commit comments