Skip to content

Commit 49acf4c

Browse files
committed
2 parents 26c08cf + 01d4e52 commit 49acf4c

File tree

5 files changed

+431
-337
lines changed

5 files changed

+431
-337
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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`

1-js/05-data-types/07-map-set/03-iterable-keys/task.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,9 @@ importance: 5
44

55
# Chiavi iterabili
66

7-
<<<<<<< HEAD:1-js/05-data-types/07-map-set-weakmap-weakset/03-iterable-keys/task.md
87
Vogliamo avere un rray di `map.keys()` e poterci lavorare.
98

109
Ma c'è un problema:
11-
=======
12-
We'd like to get an array of `map.keys()` in a variable and then do apply array-specific methods to it, e.g. `.push`.
13-
14-
But that doesn't work:
15-
>>>>>>> 9bfc8cfa9c055bdcbc8f40471fc52e011687a728:1-js/05-data-types/07-map-set/03-iterable-keys/task.md
1610

1711
```js run
1812
let map = new Map();

0 commit comments

Comments
 (0)