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
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/11-logical-operators/article.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Operatori logici
2
2
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.
4
4
5
5
Nonostante si chiamino "logici", possono essere applicati a valori di qualsiasi tipo, non solo ai booleani (i risultati stessi possono essere di qualunque tipo).
6
6
@@ -103,7 +103,7 @@ Questo ci permette alcuni utilizzi interessanti rispetto al "puro e classico OR
103
103
104
104
Immaginiamo di avere diverse variabili, `firstName`, `lastName` e `nickName`, tutte opzionali (possono quindi essere *undefined* o avere valori falsi).
105
105
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):
107
107
108
108
```js run
109
109
let firstName ="";
@@ -139,7 +139,7 @@ L'operatore AND viene rappresentato con `&&`:
139
139
result = a && b;
140
140
```
141
141
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`:
143
143
144
144
```js run
145
145
alert( true && true ); // true
@@ -219,7 +219,7 @@ Quindi il codice `a && b || c && d` è analogo all'espressione: `(a && b) || (c
219
219
````
220
220
221
221
````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`".
223
223
Proprio come l'OR, anche AND `&&` può qualche volta rimpiazzare `if`.
224
224
225
225
Ad esempio:
@@ -232,7 +232,7 @@ let x = 1;
232
232
233
233
Le azioni nella parte destra di `&&` vengono eseguite solamente se la valutazione non si ferma prima. Cioè: solo se `(x > 0)` è vera.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-nullish-coalescing-operator/article.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,12 +4,12 @@
4
4
5
5
Il *nullish coalescing operator* è rappresentato da due punti di domanda `??`.
6
6
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` né `undefined`.
8
+
7
9
Il risultato di `a ?? b` è:
8
10
- se `a` è definito, allora `a`,
9
11
- se `a` non è definito, allora `b`.
10
12
11
-
(In questo articolo, diremo che un'espressione è "definita" quando non è né `null` né `undefined`.)
12
-
13
13
In altre parole, tra due operatori `??` ritorna il primo se questo non è `null/undefined`; altrimenti, ritorna il secondo.
14
14
15
15
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:
27
27
```js run
28
28
let user;
29
29
30
-
alert(user ??"Anonymous"); // Anonymous
30
+
alert(user ??"Anonymous"); // Anonymous (user not defined)
31
31
```
32
32
33
33
Ovviamente, se `user` ha un qualsiasi valore eccetto `null/undefined`, allora vedremo quel valore:
34
34
35
35
```js run
36
36
let user ="John";
37
37
38
-
alert(user ??"Anonymous"); // John
38
+
alert(user ??"Anonymous"); // John (user defined)
39
39
```
40
40
41
41
Possiamo anche usare una sequenza di `??` per selezionare, da una lista, il primo valore che non sia `null/undefined`.
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/02-object-copy/article.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -189,6 +189,7 @@ let clone = Object.assign({}, user);
189
189
190
190
Vengono copiate tutte le proprietà di `user` nell'oggetto vuoto, il quale, poi, viene restituito.
191
191
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.
192
193
## Clonazione nidificata
193
194
194
195
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?
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/06-constructor-new/article.md
+30-29Lines changed: 30 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,12 @@
1
1
# Costruttore, operatore "new"
2
2
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.
4
4
5
-
Questo può essere fatto utilizzando il costruttore e l'operatore `"new"`.
5
+
Questo può essere fatto utilizzando un costruttore e l'operatore `"new"`.
6
6
7
7
## Costruttore
8
8
9
-
Il costruttore tecnicamente è una normale funzione. Ci sono due convenzioni:
9
+
Tecnicamente un costruttore è una normale funzione. Ma ci sono due convenzioni:
10
10
11
11
1. Vengono denominati con la prima lettera maiuscola.
12
12
2. Questi dovrebbero essere eseguiti solo con l'operatore `"new"`.
@@ -27,9 +27,9 @@ alert(user.name); // Jack
27
27
alert(user.isAdmin); // false
28
28
```
29
29
30
-
Quando una funzione viene eseguita con `new`, segue questi passaggi:
30
+
Quando una funzione viene eseguita con `new`, esegue questi passaggi:
31
31
32
-
1. Un nuovo oggetto vuoto viene creato ed assegnato a `this`.
32
+
1. Un nuovo oggetto, vuoto, viene creato ed assegnato a `this`.
33
33
2. Viene eseguito il corpo della funzione. Solitamente questo modifica `this`, aggiungendo nuove proprietà.
34
34
3. Viene ritornato il valore assegnato a `this`.
35
35
@@ -60,11 +60,11 @@ let user = {
60
60
};
61
61
```
62
62
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.
64
64
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.
66
66
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`.
68
68
69
69
````smart header="new function() { ... }"
70
70
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() {
80
80
};
81
81
```
82
82
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.
84
84
````
85
85
86
86
## Costruttori modalità test: new.target
87
87
88
88
```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.
90
90
```
91
91
92
92
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 { ... }
110
110
*/!*
111
111
```
112
112
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".
114
114
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:
116
116
117
117
```js run
118
118
functionUser(name) {
@@ -127,21 +127,21 @@ let john = User("John"); // reindirizza la chiamata a new User
127
127
alert(john.name); // John
128
128
```
129
129
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.
131
131
132
-
Non è unottima 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.
133
133
134
134
## Return nel costruttore
135
135
136
136
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.
138
138
139
-
Se decidiamo di inserire unistruzione di `return`, vanno seguite delle semplici regole:
139
+
Se decidiamo di inserire un'istruzione di `return`, vanno seguite delle semplici regole:
140
140
141
141
- Se `return` viene invocato con un oggetto, questo verrà ritornato al posto di `this`.
142
142
- Se `return` viene invocato con un tipo primitivo, verrà ignorato.
143
143
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`.
145
145
146
146
Ad esempio, qui `return` sovrascrive `this` ritornando un oggetto:
147
147
@@ -153,7 +153,7 @@ function BigUser() {
153
153
return { name:"Godzilla" }; // <-- ritorna questo oggetto
Qui invece abbiamo un esempio con un `return` vuoto (potremmo anche ritornare un qualsiasi valore di tipo primitivo):
@@ -163,12 +163,13 @@ function SmallUser() {
163
163
164
164
this.name="John";
165
165
166
-
167
-
// ...
168
-
166
+
return; // <-- returns this
169
167
}
170
168
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(newSmallUser().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.
172
173
173
174
````smart header="Omettere le parentesi"
174
175
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
184
185
185
186
## Metodi in un costruttore
186
187
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".
188
189
189
190
Ovviamente, possiamo aggiunger a `this` non solo proprietà, ma anche metodi.
190
191
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`:
192
193
193
194
```js run
194
195
functionUser(name) {
@@ -202,7 +203,7 @@ function User(name) {
202
203
*!*
203
204
let john =newUser("John");
204
205
205
-
john.sayHi(); // Il mio nome è: John
206
+
john.sayHi(); //My name is: John
206
207
*/!*
207
208
208
209
/*
@@ -217,15 +218,15 @@ Per creare oggetti più complessi, esiste una sintassi più avanzata, [classes](
217
218
218
219
## Riepilogo
219
220
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.
222
223
223
224
Possiamo utilizzare i costruttori per costruire molti oggetti simili tra loro.
224
225
225
226
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.
226
227
227
228
```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.
229
230
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>.
0 commit comments