You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Quando la funzione viene chiamata nelle righe `(*)` e `(**)`, il valore passato viene copiato nelle variabili locali `from` e `text`, che verranno utilizzate nella chiamata ad `alert`.
156
156
157
-
Guardiamo un altro esempio: abbiamo una variabile `from` e la passiamo a una funzione. Da notare: la funzione cambia `from`, ma il cambiamento non è visibile all'esterno perchè la funzione usa sempre una copia del valore passato:
157
+
Guardiamo un altro esempio: abbiamo una variabile `from` e la passiamo a una funzione. Da notare: la funzione cambia `from`, ma il cambiamento non è visibile all'esterno perché la funzione usa sempre una copia del valore passato:
158
158
159
159
160
160
```jsrun
@@ -232,7 +232,7 @@ function showMessage(text) {
232
232
showMessage(); // empty message
233
233
```
234
234
235
-
...Oppure utilizare l'operatore`||`:
235
+
...Oppure utilizzare l'operatore`||`:
236
236
237
237
```js
238
238
function showMessage(from, text) {
@@ -342,7 +342,7 @@ Per espressioni lunghe dopo la direttiva `return`, si potrebbe essere tentati da
342
342
return
343
343
(some + long + expression + or + whatever * f(a) + f(b))
344
344
```
345
-
Questo non funziona, perchè JavaScript interpreta un punto e virgola dopo `return`. E' come se dopo `return` ci fosse scritto:
345
+
Questo non funziona, perché JavaScript interpreta un punto e virgola dopo `return`. E' come se dopo `return` ci fosse scritto:
346
346
347
347
```js
348
348
return*!*;*/!*
@@ -370,7 +370,7 @@ Esempi di nomi:
370
370
371
371
```js no-beautify
372
372
showMessage(..) // mostra un messaggio
373
-
getAge(..) //ritonra l'età (prendendola da qualche parte)
373
+
getAge(..) //ritorna l'età (prendendola da qualche parte)
374
374
calcSum(..) // calcola la somma e ritorna il risultato
375
375
createForm(..) // crea un form (e solitamente lo ritorna)
376
376
checkPermission(..) // controlla i permessi, ritorna true/false
@@ -397,14 +397,14 @@ Funzioni che vengono utilizzate *molto spesso* potrebbero avere nomi molto corti
397
397
398
398
Ad esempio il framework [jQuery](http://jquery.com) definisce una funzione con `$`. La libreria [Lodash](http://lodash.com/) ha nel *core* una funzione denominata `_`.
399
399
400
-
Queste sono eccezioni. Generalmente i nomi delle funzioni sono precisi e descrittivi.
400
+
Queste sono eccezioni. Generalmente i nomi delle funzioni dovrebbero essere concisi e descrittivi.
401
401
```
402
402
403
403
## Funzioni == Commenti
404
404
405
405
Le funzioni dovrebbero essere brevi ed eseguire un solo compito. Se invece risultano lunghe, forse varrebbe la pena spezzarle in funzioni più piccole. Qualche volta può non essere semplice seguire questa regola, anche se sarebbe la cosa migliore.
406
406
407
-
Una funzione separata non è solo semplice da testare e debuggare -- la sua stessa esistenza è un commento!
407
+
Una funzione separata non è solo semplice da testare e correggere -- la sua stessa esistenza è un commento!
408
408
409
409
Ad esempio, osserviamo le due funzioni `showPrimes(n)` sotto . Entrambe ritornano i [numeri primi](https://en.wikipedia.org/wiki/Prime_number) fino a `n`.
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/05-testing-mocha/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -259,7 +259,7 @@ Il `describe` annidato definisce un nuovo "sotto-gruppo" di test. Nell'output po
259
259
260
260
[iframe height=250 src="pow-4" edit border="1"]
261
261
262
-
In futuro potremmo aggiungere più `it` e `describe` allo stesso livello, ognugo di questi avrà le proprie funzioni di supporto ma non potranno vedere `makeTest`.
262
+
In futuro potremmo aggiungere più `it` e `describe` allo stesso livello, ognuno di questi avrà le proprie funzioni di supporto ma non potranno vedere `makeTest`.
263
263
264
264
````smart header="`before/after` and `beforeEach/afterEach`"
265
265
Possiamo impostare le funzione `before/after` (prima/dopo) che vengono eseguite prima/dopo i test, o addirittura le funzioni `beforeEach/afterEach` (prima di ogni/dopo di ogni) che verranno eseguite prima di *ogni* `it`.
Copy file name to clipboardExpand all lines: 1-js/05-data-types/08-weakmap-weakset/article.md
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ Ad esempio:
6
6
```js
7
7
let john = { name:"John" };
8
8
9
-
// l'oggetto è accessibilie, john è un suo riferimento
9
+
// l'oggetto è accessibile, john è un suo riferimento
10
10
11
11
// sovrascriviamo il riferimento
12
12
john =null;
@@ -99,7 +99,7 @@ Confrontiamolo con l'esempio di `Map` visto sopra. Ora, se `john` esiste solo co
99
99
-`weakMap.delete(key)`
100
100
-`weakMap.has(key)`
101
101
102
-
Perché questa limitazione? Per ragioni tecniche. Se un oggetto ha perso tutti i riferimenti (come `john` nel codice sopra), allora verrà automaticamente eliminato. Ma tecnicamente non è specificato esattamente *quando averrà la pulizia*.
102
+
Perché questa limitazione? Per ragioni tecniche. Se un oggetto ha perso tutti i riferimenti (come `john` nel codice sopra), allora verrà automaticamente eliminato. Ma tecnicamente non è specificato esattamente *quando avverrà la pulizia*.
103
103
104
104
Sarà il motore JavaScript a deciderlo. Potrebbe decidere di effettuare subito la pulizia della memoria oppure aspettare più oggetti per eliminarli in blocco. Quindi, tecnicamente il numero degli elementi di una `WeakMap` non è conosciuto. Il motore potrebbe già aver effettuato la pulizia oppure no, o averlo fatto solo parzialmente. Per questo motivo, i metodi che accedono a `WeakMap` per intero non sopo supportati.
Immaginiamo di avere del codice che tiene nota del numero di visite per ogni utente. L'informazioni viene memorizzata in un map: l'utente è la chiave, mentre il conteggio delle visite è il valore. Quando l'utente esce, vogliamo smettere di mantenere in memoria il conteggio delle visite.
123
+
Immaginiamo di avere del codice che tiene nota del numero di visite per ogni utente. L'informazione viene memorizzata in un map: l'utente è la chiave, mentre il conteggio delle visite è il valore. Quando l'utente esce, vogliamo smettere di mantenere in memoria il conteggio delle visite.
124
124
125
125
Qui vediamo un esempio di conteggio utilizzando `Map`:
126
126
@@ -188,7 +188,7 @@ function process(obj) {
188
188
}
189
189
190
190
*!*
191
-
// Ora utilizzaimo process() in un altro file:
191
+
// Ora utilizziamo process() in un altro file:
192
192
*/!*
193
193
194
194
// 📁 main.js
@@ -205,7 +205,7 @@ obj = null;
205
205
alert(cache.size); // 1 (Ouch! L'oggetto è ancora in cache, sta occupando memoria!)
206
206
```
207
207
208
-
Per chiamate multiple di `process(obj)` con lo stesso oggetto, il risultato viene calcolato solamente la prima volta, le successive chiamate lo prenderanno dalla `cache`. Il lato negatico è che dobbiamo ricordarci di pulire la `cache` quando non è più necessaria.
208
+
Per chiamate multiple di `process(obj)` con lo stesso oggetto, il risultato viene calcolato solamente la prima volta, le successive chiamate lo prenderanno dalla `cache`. Il lato negativo è che dobbiamo ricordarci di pulire la `cache` quando non è più necessaria.
209
209
210
210
Se sostituiamo `Map` con `WeakMap`, il problema si risolve. I risultati in cache vengono automaticamente rimossi una volta che l'oggetto viene ripulito dal garbage collector.
211
211
@@ -232,10 +232,10 @@ let obj = {/* un oggetto */};
232
232
let result1 =process(obj);
233
233
let result2 =process(obj);
234
234
235
-
// ...più tadi, quando non abbiamo più bisogno dell'oggetto
235
+
// ...più tardi, quando non abbiamo più bisogno dell'oggetto
236
236
obj =null;
237
237
238
-
// Non possiamo ottenere la dimensione della cache, poichè è una WeakMap,
238
+
// Non possiamo ottenere la dimensione della cache, poiché è una WeakMap,
239
239
// ma è 0 oppure lo sarà presto
240
240
// Quando un oggetto viene ripulito dal garbage collector, anche i dati associati vengono ripuliti
Copy file name to clipboardExpand all lines: 1-js/05-data-types/09-keys-values-entries/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -99,5 +99,5 @@ let doublePrices = Object.fromEntries(
99
99
alert(doublePrices.meat); // 8
100
100
```
101
101
102
-
Ad un primo sguardo potrebbe risultare complesso, ma diventa molto più familiare dopo un paio di utilizzi.
102
+
Ad un primo sguardo potrebbe risultare complesso, ma diventa molto più familiare dopo un paio di utilizzi. In questo modo possono essere create potenti catene per la trasformazione.
Copy file name to clipboardExpand all lines: 1-js/11-async/02-promise-basics/article.md
+9-11Lines changed: 9 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,21 +24,19 @@ La funzione passata a `new Promise` è chiamata *esecutore (executor)*. Quando l
24
24
25
25
I suoi argomenti `resolve` e `reject` sono delle callback fornite da JavaScript stesso. Il nostro codice sta solamente dentro l'esecutore.
26
26
27
-

27
+
-`resolve(value)` — se il processo termina correttamente, col risultato `value`.
28
+
-`reject(error)` — se si verifica un errore, `error` è l'oggetto errore.
29
+
30
+
Ricapitolando: l'esecutore parte automaticamente e tenta di eseguire un compito. Quando l'esecuzione termina, viene invocato `resolve` in caso di successo, oppure `reject` in caso di errore.
28
31
29
-
L'oggetto `promise`risultante ha queste proprietà interne:
32
+
L'oggetto `promise`restituito ha le seguenti proprietà interne:
30
33
31
-
-`state` — inizialmente "pending", poi cambia con "fulfilled" o "rejected",
32
-
-`result` — un valore arbitrario di tua scelta, inizialmente `undefined`.
34
+
-`state` — inizialmente "pending", poi cambia in "fulfilled" se viene invocato `resolve` o in "rejected" se viene invocato `reject`.
35
+
-`result` — inizialmente `undefined`, poi cambia in `value` se viene invocato `resolve(value)` o in `error` se viene invocato `reject(error)`.
33
36
34
-
Quando l'esecutore finisce il lavoro (job), dovrebbe chiamare una delle funzioni che riceve come argomento:
37
+
Quindi l'esecutore, alla fine, mette la promise in uno di questi stati:
35
38
36
-
-`resolve(value)` — per indicare che il lavoro è finito con successo:
37
-
- imposta `state` come `"fulfilled"`,
38
-
- imposta `result` come `value`.
39
-
-`reject(error)` — per indicare che si è verificato un errore:
40
-
- imposta `state` come `"rejected"`,
41
-
- imposta `result` come `error`.
39
+

42
40
43
41
Più avanti vedremo come questi cambiamenti diventano noti ai "fan".
Copy file name to clipboardExpand all lines: 1-js/11-async/07-microtask-queue/article.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,7 +30,7 @@ Come detto nella [specifica](https://tc39.github.io/ecma262/#sec-jobs-and-job-qu
30
30
- La coda è primo-dentro-primo-fuori: i task messi in coda per primi sono eseguiti per primi.
31
31
- L'esecuzione di un task è iniziata solo quando nient'altro è in esecuzione.
32
32
33
-
Oppure, per dirla in modo semplice, quando una promise è pronta, i suoi gestori `.then/catch/finally` sono messi nella coda. Non sono ancora eseguiti. Il motore JavaScript prende un task dalla coda e lo esegue, quando diventa libero dal codice corrente.
33
+
Oppure, per dirla in modo semplice, quando una promise è pronta, i suoi gestori `.then/catch/finally` sono messi nella coda. Non vengono ancora eseguiti. Il motore JavaScript prende un task dalla coda e lo esegue, quando diventa libero dal codice corrente.
34
34
35
35
Questo è il motivo per cui "codice finito" nell'esempio sopra viene mostrato prima.
36
36
@@ -40,7 +40,7 @@ I gestori delle promise passano sempre da quella coda interna.
40
40
41
41
Se c'è una catena con diversi `.then/catch/finally`, allora ognuno di essi viene eseguito in modo asincrono. Cioè, viene prima messo in coda ed eseguito quando il codice corrente è completo e i gestori messi in coda precedentemente sono finiti.
42
42
43
-
**Che cosa succede se per noi l'ordine è importante? Come possiamo far funzionare `codice finito` dopo `promise completa`?**
43
+
**Che cosa succede se per noi l'ordine è importante? Come possiamo far funzionare `code finished` dopo `promise done`?**
Copy file name to clipboardExpand all lines: 1-js/12-generators-iterators/2-async-iterators-generators/article.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -353,6 +353,8 @@ Un esempio di utilizzo (visualizza gli autori delle commit nella console):
353
353
}
354
354
}
355
355
})();
356
+
357
+
// Note: If you are running this in an external sandbox, you'll need to paste here the function fetchCommits described above
356
358
```
357
359
358
360
Questo è esattamente quello che volevamo. I meccanismi interni delle richieste paginate sono invisibili dall'esterno. Per noi non è altro che un generatore asincrono che ritorna delle commit.
0 commit comments