Skip to content

Commit b9c3273

Browse files
authored
Merge branch 'master' into 014_blur
2 parents 6bc7ad9 + 1df6fa8 commit b9c3273

File tree

93 files changed

+1258
-1207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+1258
-1207
lines changed

1-js/02-first-steps/08-operators/3-primitive-conversions-questions/solution.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ true + false = 1
99
"$" + 4 + 5 = "$45"
1010
"4" - 2 = 2
1111
"4px" - 2 = NaN
12-
7 / 0 = Infinity
1312
" -9 " + 5 = " -9 5" // (3)
1413
" -9 " - 5 = -14 // (4)
1514
null + 1 = 1 // (5)

1-js/02-first-steps/08-operators/3-primitive-conversions-questions/task.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ true + false
1616
"$" + 4 + 5
1717
"4" - 2
1818
"4px" - 2
19-
7 / 0
2019
" -9 " + 5
2120
" -9 " - 5
2221
null + 1

1-js/02-first-steps/11-logical-operators/article.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Operatori logici
22

3-
In JavaScript ci sono tre operatori logici: `||` (OR), `&&` (AND), e `!` (NOT).
3+
In JavaScript ci sono quattro operatori logici: `||` (OR), `&&` (AND), e `!` (NOT), `??` (Nullish Coalescing). Qui abbiamo trattato i primi tre, l'operatore `??` sarà approfondito nel prossimo articolo.
44

55
Nonostante si chiamino "logici", possono essere applicati a valori di qualsiasi tipo, non solo ai booleani (i risultati stessi possono essere di qualunque tipo).
66

@@ -103,7 +103,7 @@ Questo ci permette alcuni utilizzi interessanti rispetto al "puro e classico OR
103103

104104
Immaginiamo di avere diverse variabili, `firstName`, `lastName` e `nickName`, tutte opzionali (possono quindi essere *undefined* o avere valori falsi).
105105

106-
Possiamo utilizzare OR `||` per selezionare quella che contiene un valore e mostrarlo (oppure mostrare `"Anonymous"` se nessua variabile è definita):
106+
Possiamo utilizzare OR `||` per selezionare quella che contiene un valore e mostrarlo (oppure mostrare `"Anonymous"` se nessuna variabile è definita):
107107

108108
```js run
109109
let firstName = "";
@@ -139,7 +139,7 @@ L'operatore AND viene rappresentato con `&&`:
139139
result = a && b;
140140
```
141141
142-
Nella programmazione classica AND ritorna `true` se entrambri gli operandi sono veri, altrimenti ritorna `false`:
142+
Nella programmazione classica AND ritorna `true` se entrambi gli operandi sono veri, altrimenti ritorna `false`:
143143
144144
```js run
145145
alert( true && true ); // true
@@ -219,7 +219,7 @@ Quindi il codice `a && b || c && d` è analogo all'espressione: `(a && b) || (c
219219
````
220220

221221
````warn header="Non rimpiazzate `if` con `||` o `&&`"
222-
Talvolta, le persone utilizzano l'operatore AND `&&` come una "scorcatoia" dell'espressione `if`".
222+
Talvolta, le persone utilizzano l'operatore AND `&&` come una "scorciatoia" dell'espressione `if`".
223223
Proprio come l'OR, anche AND `&&` può qualche volta rimpiazzare `if`.
224224
225225
Ad esempio:
@@ -232,7 +232,7 @@ let x = 1;
232232
233233
Le azioni nella parte destra di `&&` vengono eseguite solamente se la valutazione non si ferma prima. Cioè: solo se `(x > 0)` è vera.
234234
235-
Il codie sopra è sostanzialmente analogo a:
235+
Il codice sopra è sostanzialmente analogo a:
236236
237237
```js run
238238
let x = 1;

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
Il *nullish coalescing operator* è rappresentato da due punti di domanda `??`.
66

7+
Siccome trattiamo `null` e `undefined` in modo simile, avremo bisogno di una definizione particolare. In questo articolo, diremo che un'espressione è "definita" quando non è né `null``undefined`.
8+
79
Il risultato di `a ?? b` è:
810
- se `a` è definito, allora `a`,
911
- se `a` non è definito, allora `b`.
1012

11-
(In questo articolo, diremo che un'espressione è "definita" quando non è né `null``undefined`.)
12-
1313
In altre parole, tra due operatori `??` ritorna il primo se questo non è `null/undefined`; altrimenti, ritorna il secondo.
1414

1515
Il nullish coalescing operator non è qualcosa di completamente nuovo. È solo un modo più elegante per recuperare il primo valore "definito" tra due operatori.
@@ -27,15 +27,15 @@ Per esempio, qui mostriamo `Anonymous` se `user` non è definito:
2727
```js run
2828
let user;
2929

30-
alert(user ?? "Anonymous"); // Anonymous
30+
alert(user ?? "Anonymous"); // Anonymous (user not defined)
3131
```
3232
3333
Ovviamente, se `user` ha un qualsiasi valore eccetto `null/undefined`, allora vedremo quel valore:
3434
3535
```js run
3636
let user = "John";
3737

38-
alert(user ?? "Anonymous"); // John
38+
alert(user ?? "Anonymous"); // John (user defined)
3939
```
4040
4141
Possiamo anche usare una sequenza di `??` per selezionare, da una lista, il primo valore che non sia `null/undefined`.

1-js/02-first-steps/17-arrow-functions-basics/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ Esiste un'altra sintassi molto semplice e concisa per creare funzioni e che spes
55
E' chiamata "arrow functions", perché si presenta in questo modo:
66

77
```js
8-
let func = (arg1, arg2, ...argN) => expression
8+
let func = (arg1, arg2, ..., argN) => expression
99
```
1010

1111
Questo codice crea una funzione `func` che accetta gli argomenti `arg1..argN` e li utilizza per valutare `expression` e restituirne il risultato.
1212

1313
In altre parole è una versione abbreviata di:
1414

1515
```js
16-
let func = function(arg1, arg2, ...argN) {
16+
let func = function(arg1, arg2, ..., argN) {
1717
return expression;
1818
};
1919
```

1-js/04-object-basics/02-object-copy/article.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ let clone = Object.assign({}, user);
189189
190190
Vengono copiate tutte le proprietà di `user` nell'oggetto vuoto, il quale, poi, viene restituito.
191191
192+
Esistono anche altri modi per clonare un oggetto, ad esempio usando lo [spread operator](info:rest-parameters-spread) `clone = {...user}`, che verrà trattato più avanti in questo tutorial.
192193
## Clonazione nidificata
193194
194195
Finora abbiamo assunto che le proprietà di `user` fossero primitive. Ma le proprietà possono anche essere riferimenti ad altri oggetti. Come si fa in questo caso?

1-js/04-object-basics/04-object-methods/8-chain-calls/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ let ladder = {
2121
return this;
2222
*/!*
2323
}
24-
}
24+
};
2525

2626
ladder.up().up().down().up().down().showStep(); // 1
2727
```

1-js/04-object-basics/06-constructor-new/1-two-functions-one-object/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Si, è possibile.
22

3-
Se una funzione ritorna un oggetto, questo verrà fornito alla `new` piuttosto che `this`.
3+
Se una funzione ritorna un oggetto, questo verrà ritornato da `new` invece di `this`.
44

55
Quindi, le due funzioni potrebbero ritornare un oggetto definito esternamente `obj`:
66

1-js/04-object-basics/06-constructor-new/article.md

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Costruttore, operatore "new"
22

3-
La sintassi `{...}` ci consente di creare un oggetto. Spesso abbiamo bisogno di creare più oggetti simili, come ad esempio più utenti, oggetti del menu e molto altro.
3+
La sintassi `{...}` ci consente di creare un oggetto. Ma spesso abbiamo bisogno di creare multipli oggetti simili, come ad esempio più utenti, oggetti del menu e molto altro.
44

5-
Questo può essere fatto utilizzando il costruttore e l'operatore `"new"`.
5+
Questo può essere fatto utilizzando un costruttore e l'operatore `"new"`.
66

77
## Costruttore
88

9-
Il costruttore tecnicamente è una normale funzione. Ci sono due convenzioni:
9+
Tecnicamente un costruttore è una normale funzione. Ma ci sono due convenzioni:
1010

1111
1. Vengono denominati con la prima lettera maiuscola.
1212
2. Questi dovrebbero essere eseguiti solo con l'operatore `"new"`.
@@ -27,9 +27,9 @@ alert(user.name); // Jack
2727
alert(user.isAdmin); // false
2828
```
2929

30-
Quando una funzione viene eseguita con `new`, segue questi passaggi:
30+
Quando una funzione viene eseguita con `new`, esegue questi passaggi:
3131

32-
1. Un nuovo oggetto vuoto viene creato ed assegnato a `this`.
32+
1. Un nuovo oggetto, vuoto, viene creato ed assegnato a `this`.
3333
2. Viene eseguito il corpo della funzione. Solitamente questo modifica `this`, aggiungendo nuove proprietà.
3434
3. Viene ritornato il valore assegnato a `this`.
3535

@@ -60,11 +60,11 @@ let user = {
6060
};
6161
```
6262

63-
Ora se vogliamo creare altri utenti, possiamo chiamare `new User("Ann")`, `new User("Alice")` e cosi via. Molto più rapido piuttosto che utilizzare oggetti letterali ogni volta, risulta anche più facile da leggere.
63+
Ora, se vogliamo creare altri utenti, possiamo chiamare `new User("Ann")`, `new User("Alice")` e cosi via. Molto più rapido rispetto all'utilizzare ogni volta oggetti letterali; risulta anche più facile da leggere.
6464

65-
Questo è il principale scopo dei costruttori -- implementare codice riutilizzabile per la creazione degli oggetti.
65+
Questo è il principale scopo dei costruttori -- implementare codice riutilizzabile per la creazione di oggetti.
6666

67-
Ribadiamo -- tecnicamente, ogni funzione può essere utilizzata come costruttore. Cioè: ogni funzione può essere eseguita con `new`. La "prima lettera maiuscola" è semplicemente una convenzione, per rendere esplicito che la funzione deve essere eseguita con `new`.
67+
Ribadiamo -- tecnicamente, ogni funzione può essere utilizzata come costruttore. Ovvero: ogni funzione può essere eseguita con `new`. La "prima lettera maiuscola" è semplicemente una convenzione, per rendere esplicito che la funzione deve essere eseguita con `new`.
6868

6969
````smart header="new function() { ... }"
7070
Se abbiamo molte linee di codice utili alla creazione di un unico oggetto, possiamo raggrupparle in un costruttore, come qui:
@@ -80,13 +80,13 @@ let user = new function() {
8080
};
8181
```
8282
83-
Il costruttore non può essere chiamato nuovamente, perché non è salvato da nessuna parte, viene solo creato e chiamato. Quindi questo trucco consente di incapsulare codice che costruisce un singolo oggetto, senza possibilità di riutilizzo futuro.
83+
Il costruttore non può essere chiamato nuovamente, perché non è salvato da nessuna parte; viene solo creato e chiamato. Questo trucco consente di incapsulare un codice che costruisce un singolo oggetto, senza possibilità di riutilizzo futuro.
8484
````
8585

8686
## Costruttori modalità test: new.target
8787

8888
```smart header="Tecniche avanzate"
89-
La sintassi presentata in questa sessione viene utilizzata raramente, potete tranquillamente saltarlo se non siete interessati.
89+
La sintassi presentata nella seguente sezione viene utilizzata raramente; potete tranquillamente saltarla se non vi interessa sapere proprio tutto.
9090
```
9191

9292
Dentro la funzione, possiamo controllare quando questa viene chiamata con `new` e quando senza, utilizzando una speciale proprietà `new.target`.
@@ -110,9 +110,9 @@ new User(); // function User { ... }
110110
*/!*
111111
```
112112

113-
Questo può essere utilizzato per consentire ad entrambe le chiamate di funzionare (con `new` e senza), quindi sia in in "modalità costruttore" che in "modalità classica".
113+
Questo può essere utilizzato per consentire ad entrambe le chiamate di funzionare (con `new` e senza), quindi sia in in "modalità costruttore" che in "modalità regolare".
114114

115-
Possiamo anche utilizzarli entrambi `new` e chiamata regole, per fare la stessa cosa, come in questo esempio:
115+
Possiamo anche fare in modo che le chiamate con *new* e quelle regolari facciano la stessa cosa, come in questo esempio:
116116

117117
```js run
118118
function User(name) {
@@ -127,21 +127,21 @@ let john = User("John"); // reindirizza la chiamata a new User
127127
alert(john.name); // John
128128
```
129129

130-
Questo approccio viene adottato in alcune librerie per rendere la sintassi più flessibile. Rendendo possibile la chiamata della funzione sia senza che con la parola chiave`new`.
130+
Questo approccio viene adottato in alcune librerie per rendere la sintassi più flessibile. Rende possibile la chiamata della funzione sia con `new` che senza.
131131

132-
Non è un ottima cosa utilizzare la doppia sintassi ovunque, perché omettendo `new` il codice perde di leggibilità. Con la parola chiave `new` possiamo dire con certezza che si sta creando un nuovo oggetto.
132+
Ma non è un'ottima cosa utilizzare la doppia sintassi ovunque, perché omettendo `new` il codice perde in leggibilità. Con la parola chiave `new` possiamo sapere con certezza che si sta creando un nuovo oggetto.
133133

134134
## Return nel costruttore
135135

136136

137-
Solitamente, i costruttori non hanno l'istruzione `return`. Il loro compito è di eseguire tutto ciò che è necessario a creare l'oggetto lavorando su `this`, quest'ultimo sarà il risultato.
137+
Solitamente, i costruttori non hanno l'istruzione `return`. Il loro compito è di eseguire tutto ciò che è necessario a creare l'oggetto lavorando su `this`; quest'ultimo sarà il risultato.
138138

139-
Se decidiamo di inserire un istruzione di `return`, vanno seguite delle semplici regole:
139+
Se decidiamo di inserire un'istruzione di `return`, vanno seguite delle semplici regole:
140140

141141
- Se `return` viene invocato con un oggetto, questo verrà ritornato al posto di `this`.
142142
- Se `return` viene invocato con un tipo primitivo, verrà ignorato.
143143

144-
In altre parole, `return` su un oggetto ritorna quell'oggetto, in tutti gli altri casi verrà ritornato `this`.
144+
In altre parole, `return` con un oggetto ritorna quell'oggetto; in tutti gli altri casi verrà ritornato `this`.
145145

146146
Ad esempio, qui `return` sovrascrive `this` ritornando un oggetto:
147147

@@ -153,7 +153,7 @@ function BigUser() {
153153
return { name: "Godzilla" }; // <-- ritorna questo oggetto
154154
}
155155

156-
alert( new BigUser().name ); // Godzilla, ottieni quell'oggetto
156+
alert( new BigUser().name ); // Godzilla
157157
```
158158

159159
Qui invece abbiamo un esempio con un `return` vuoto (potremmo anche ritornare un qualsiasi valore di tipo primitivo):
@@ -163,12 +163,13 @@ function SmallUser() {
163163

164164
this.name = "John";
165165

166-
167-
// ...
168-
166+
return; // <-- returns this
169167
}
170168

171-
Solitamente i costruttori non possiedono l'istruzione `return`. Qui per completezza abbiamo citato gli eventuali comportamenti, se si tenta di ritornare un oggetto.
169+
alert(new SmallUser().name); //John
170+
```
171+
172+
Solitamente i costruttori non hanno l'istruzione `return`. Abbiamo comunque riportato, per completezza, quel che succede se si tenta di ritornare un oggetto.
172173

173174
````smart header="Omettere le parentesi"
174175
Possiamo anche omettere le parentesi dopo `new`, se non ci sono argomenti:
@@ -184,11 +185,11 @@ L'omissione delle parentesi non viene considerata come "buona programmazione", l
184185

185186
## Metodi in un costruttore
186187

187-
Utilizzare costruttori per creare degli oggetti fornisce una grande vantaggio in termini di flessibilità. Il costruttore può avere dei parametri che definiscono come costruire l'oggetto, e cosa "metterci dentro".
188+
Utilizzare costruttori per creare degli oggetti ci dà un grande vantaggio in termini di flessibilità. Il costruttore può avere dei parametri che definiscono come costruire l'oggetto, e cosa "metterci dentro".
188189

189190
Ovviamente, possiamo aggiunger a `this` non solo proprietà, ma anche metodi.
190191

191-
Ad esempio, `new User(name)` crea un oggetto con un nome dato `name` e un metodo `sayHi`:
192+
Ad esempio, `new User(name)` crea un oggetto con un nome (passato come `name`) e un metodo `sayHi`:
192193

193194
```js run
194195
function User(name) {
@@ -202,7 +203,7 @@ function User(name) {
202203
*!*
203204
let john = new User("John");
204205

205-
john.sayHi(); // Il mio nome è: John
206+
john.sayHi(); // My name is: John
206207
*/!*
207208

208209
/*
@@ -217,15 +218,15 @@ Per creare oggetti più complessi, esiste una sintassi più avanzata, [classes](
217218

218219
## Riepilogo
219220

220-
- Le funzioni di costruzione, o meglio, i costruttori, solo delle normali funzioni, che seguono però una regola di accordo comune che prevede di denominarle con la prima lettera maiuscola.
221-
- Un costruttore dovrebbe essere chiamato solamente utilizzando `new`. Questo tipo di chiamata implica la creazione di un oggetto vuoto `this`, che verrà popolato entro la fine della funzione.
221+
- Le funzioni di costruzione, o meglio, i costruttori, sono solo delle normali funzioni; seguono però una convenzione comune che prevede di denominarle con la prima lettera maiuscola.
222+
- Un costruttore dovrebbe essere chiamato solamente utilizzando `new`. Questo tipo di chiamata implica la creazione di un oggetto vuoto, `this`, che verrà popolato entro la fine della funzione.
222223

223224
Possiamo utilizzare i costruttori per costruire molti oggetti simili tra loro.
224225

225226
JavaScript fornisce costruttori per la maggior parte degli oggetti integrati nel linguaggio: come `Date` per le date, `Set` per gli insiemi e molti altri che studieremo più avanti.
226227

227228
```smart header="Oggetti, ci ritorneremo!"
228-
In questo capitolo abbiamo coperto solamente le basi degli oggetti e dei costruttori. Era necessario conoscerne le basi per capire meglio riguardo i data types e le funzioni che studieremo nel prossimo capitolo.
229+
In questo capitolo abbiamo coperto solamente le basi degli oggetti e dei costruttori. Era necessario conoscerne le basi per capire meglio i data types e le funzioni che studieremo nel prossimo capitolo.
229230
230-
Dopo averli compresi, ritorneremo sugli oggetti e li analizzeremo più in dettaglio nei capitoli <info:prototypes> e <info:classes>.
231+
Dopo questo, ritorneremo sugli oggetti e li analizzeremo più in dettaglio nei capitoli <info:prototypes> e <info:classes>.
231232
```

0 commit comments

Comments
 (0)