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/05-data-types/04-array/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
@@ -437,7 +437,7 @@ Questo operatore non offre alcun tipo di trattamento speciale per gli array, li
437
437
438
438
Ricordando velocemente le regole:
439
439
440
-
- Due oggetti sono uguali con `==` solamente se fanno riferimento allo stesso oggetto.
440
+
- Due oggetti sono uguali `==` solamente se fanno riferimento allo stesso oggetto.
441
441
- Se uno dei due argomenti forniti all'operatore `==` è un oggetto, e l'altro è un tipo primitivo, allora l'oggetto viene convertito in primitivo, come spiegato nel capitolo <info:object-toprimitive>.
442
442
- ...Con l'eccezione di `null` e `undefined` che sono uguali solamente tra di loro.
443
443
@@ -495,7 +495,7 @@ Gli array sono uno speciale tipo di oggetto, studiati per immagazzinare e gestir
495
495
- La proprietà `length` è la lunghezza dell'array, in realtà per essere precisi, contiene l'indice dell'ultimo elemento più uno. Questo valore viene aggiornato automaticamente.
496
496
- Se decrementiamo manualmente `length`, l'array viene troncato.
497
497
498
-
Possiamo utilizzare un array come deque con le seguenti operazioni:
498
+
Possiamo eseguire sugli arrays le seguenti operazioni:
499
499
500
500
-`push(...items)` aggiunge `items`in coda.
501
501
-`pop()` rimuove un elemento dalla coda e lo ritorna.
Copy file name to clipboardExpand all lines: 1-js/09-classes/02-class-inheritance/article.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,7 +32,7 @@ QUi vediamo come rappresentare l'oggetto `animal` e la classe `Animal` graficame
32
32
33
33
...Potremmo voler creare un'altra `class Rabbit`.
34
34
35
-
Poichè i conigli sono animali, la classe `Rabbit` dovrebbe essere basata su `Animal`, avendo accesso a tutti i metodi di `Animal`, in questo modo `Rabbit` può assumere tutti i comportamenti di base di un `Animal`.
35
+
Poiché i conigli sono animali, la classe `Rabbit` dovrebbe essere basata su `Animal`, avendo accesso a tutti i metodi di `Animal`, in questo modo `Rabbit` può assumere tutti i comportamenti di base di un `Animal`.
36
36
37
37
La sintassi utilizzate per estendere un'altra classe è: `class Child extends Parent`.
38
38
@@ -53,7 +53,7 @@ rabbit.run(5); // White Rabbit runs with speed 5.
53
53
rabbit.hide(); // White Rabbit hides!
54
54
```
55
55
56
-
Ora il codice di `Rabbit`è diventato un po' più corto, dato che utilizza il costruttore di `Animal`, e può anche correre (usare il metodo `run`) come gli animali (animals).
56
+
L'oggetto della classe `Rabbit`ha accesso sia ai metodi di `Rabbit` (ad esempio `rabbit.hide()`) che a quelli di `Animal` (`rabbit.run()`).
57
57
58
58
Internamente, `extends` aggiunge da `Rabbit.prototype` un riferimento `[[Prototype]]` a `Animal.prototype`:
59
59
@@ -64,7 +64,7 @@ Ad esempio, per trovare il metodo `rabbit.run`, il motore JavaScript controlla (
64
64
2. Il suo prototype, che è `Rabbit.prototype` (possiede `hide`, ma non `run`).
65
65
3. Il suo prototype, che è (a causa di `extends`) `Animal.prototype`, che possiede il metodo `run`.
66
66
67
-
Come ricordiamo dal capitolo <info:native-prototypes>, JavaScript stesso usa l'ereditarietà per prototipi per gli oggetti integrati. E.g. `Date.prototype.[[Prototype]]` è `Object.prototype`. Questo è il motoivo per cui le date hanno accesso ai metodi generici di un oggetto.
67
+
Come ricordiamo dal capitolo <info:native-prototypes>, JavaScript stesso usa l'ereditarietà per prototipi per gli oggetti integrati. E.g. `Date.prototype.[[Prototype]]` è `Object.prototype`. Questo è il motivo per cui le date hanno accesso ai metodi generici di un oggetto.
68
68
69
69
````smart header="Qualsiasi espressione è ammessa dopo `extend`"
70
70
Usare la parola chiave `class` permette di specificare non solo una classe, ma anche un'espressione dopo la parola `extends`.
@@ -230,9 +230,9 @@ Ops! Abbiamo ricevuto un errore. Ora non possiamo creare conigli (rabbits). Cosa
230
230
231
231
La risposta breve è:
232
232
233
-
-**I costruttori nelle classi che ereditano devono chiamare `super(...)`, e bisongna farlo (!) prima di utilizzare `this`.**
233
+
-**I costruttori nelle classi che ereditano devono chiamare `super(...)`, e bisogna farlo (!) prima di utilizzare `this`.**
234
234
235
-
...Ma perchè? Cosa sta succedendo?
235
+
...Ma perché? Cosa sta succedendo?
236
236
In effetti, questa richiesta sembra un po' strana.
237
237
238
238
Ovviamente una spiegazione c'è. Addentriamoci nei dettagli, così da capire cosa effettivamente succede.
Questa nota assume che voi abbiate una certa esperienza con le classi, anche in altri linguaggi di programmazione.
286
286
287
-
Fornisce una spiegazione più dettagliata del linguaggio e ne illustra il comportamente che potrebbe essere fonte di errori (anche se molto rari).
287
+
Fornisce una spiegazione più dettagliata del linguaggio e ne illustra il comportamento che potrebbe essere fonte di errori (anche se molto rari).
288
288
289
289
Se trovate questa sezione troppo difficile da capire, saltatela pure, continuate a leggere, e rileggetela in un secondo momento.
290
290
```
291
291
292
292
In una sotto-classe possiamo estendere non solo i metodi, ma anche i campi di classe.
293
293
294
-
Anche se, si verifica un comportamento strano quando proviamo ad accedere ad un campo sovrascritto nel costruttore padre, piuttosto differente da altri linguaggi di programmazzione.
294
+
Anche se, si verifica un comportamento strano quando proviamo ad accedere ad un campo sovrascritto nel costruttore padre, piuttosto differente da altri linguaggi di programmazione.
295
295
296
296
Consideriamo questi esempio:
297
297
@@ -318,7 +318,7 @@ Qui, la classe `Rabbit` estende `Animal` e sovrascrive il campo `name` con il su
318
318
319
319
Non c'è alcun costruttore in `Rabbit`, quindi viene invocato quello di `Animal`.
320
320
321
-
E' interessante notare che in entrambi i casi: `new Animal()` e `new Rabbit()`, l'istruzion di `alert` nella riga `(*)` mostra `animal`.
321
+
E' interessante notare che in entrambi i casi: `new Animal()` e `new Rabbit()`, l'istruzione di `alert` nella riga `(*)` mostra `animal`.
322
322
323
323
**In altre parole, il costruttore genitore utilizza sempre i suoi campi dati, non quelli sovrascritti.**
324
324
@@ -353,33 +353,33 @@ new Rabbit(); // rabbit
353
353
354
354
Notiamo che l'output è differente.
355
355
356
-
E questo è quello che ci aspetteremo. Quando il costrutore genitore viene invocato da una classe derivata, utilizzate i metodi sovrascritti.
356
+
E questo è quello che ci aspetteremo. Quando il costruttore genitore viene invocato da una classe derivata, utilizzate i metodi sovrascritti.
357
357
358
358
...Ma per i campi dati non è cosi. Come già detto, il costruttore genitore utilizza sempre i suoi campi dati.
359
359
360
-
Perchè c'è questa differenza?
360
+
Perché c'è questa differenza?
361
361
362
-
Il motivo sta nell'ordine di inizializzazione dei campi dati. I campi dati di una classe vengono inizializati:
362
+
Il motivo sta nell'ordine di inizializzazione dei campi dati. I campi dati di una classe vengono inizializzati:
363
363
- Prima del costruttore per la classe base,
364
364
- Subito dopo `super()` per le classi derivate.
365
365
366
366
Nel nostro caso, `Rabbit` è la classe derivata. Non c'è alcun `constructor()` al suo interno. Come detto precedentemente, questo equivale ad avere un costruttore vuoto con la sola chiamata a `super(...args)`.
367
367
368
-
Quindi, `new Rabbit()` invoca `super()`, che esegue il costruttore genitore, e (per le regole che segue la classe derivata) solamente dopo vengono inizializzati i suoi campi dati. Al momento dell'esecuziono del costruttore genitore, non esiste alcun capo dato in `Rabbit`, questo è il motivo per cui vengono utilizzati i campi dati di `Animal`.
368
+
Quindi, `new Rabbit()` invoca `super()`, che esegue il costruttore genitore, e (per le regole che segue la classe derivata) solamente dopo vengono inizializzati i suoi campi dati. Al momento dell'esecuzione del costruttore genitore, non esiste alcun capo dato in `Rabbit`, questo è il motivo per cui vengono utilizzati i campi dati di `Animal`.
369
369
370
370
Abbiamo quindi una sottile differenza di trattamento tra i campi dati ed i metodi in JavaScript.
371
371
372
-
Fortunatamente, questo comportamente si verifica solamente se un campo dati va a sovrascrivere quelli della classe genitore. Potrebber e essere difficile da capire come comportamente, per questo lo abbiamo speigato qui.
372
+
Fortunatamente, questo comportamento si verifica solamente se un campo dati va a sovrascrivere quelli della classe genitore. Potrebbe essere difficile da capire come comportamento, per questo lo abbiamo spiegato qui.
373
373
374
374
Se dovesse verificarsi questo problema, si possono utilizzare i metodi invece dei campi dati.
375
375
376
376
377
377
## Super: internamente, [[HomeObject]]
378
378
379
379
```warn header="Informazioni avanzate"
380
-
Se state leggengo il tutorial per la prima volta - questa sezione può essere saltata.
380
+
Se state leggendo il tutorial per la prima volta - questa sezione può essere saltata.
381
381
382
-
Qui spiegeremo i meccanisci interni che stanno dietro l'ereditarietà e `super`.
382
+
Qui spiegheremo i meccanismi interni che stanno dietro l'ereditarietà e `super`.
383
383
```
384
384
385
385
Andiamo un pò più a fondo del metodo `super`. Scopriremo alcune cose interessanti a riguardo.
@@ -610,12 +610,12 @@ rabbit.eat(); // Errore nella chiamata a super (dato che [[HomeObject non esist
610
610
## Riepilogo
611
611
612
612
1. Per estendere una classe: `class Child extends Parent`:
613
-
- Questo significa che `Child.prototype.__proto__` dventerà `Parent.prototype`, quindi i metodi vengono ereditati.
613
+
- Questo significa che `Child.prototype.__proto__` diventerà `Parent.prototype`, quindi i metodi vengono ereditati.
614
614
2. Quando sovrascriviamo un costruttore:
615
615
- Dobbiamo richiamare il costruttore del padre attraverso `super()` nel costruttore di `Child` prima di utilizzare `this`.
616
616
3. Quando sovrascriviamo un metodo:
617
617
- Possiamo usare `super.method()` in un metodo di `Child` per richiamare il metodo da `Parent`.
618
-
4. Meccaniscmi interni:
618
+
4. Meccanismi interni:
619
619
- I metodi tengono traccia del loro oggetto o della loro classe nella proprietà `[[HomeObject]]`, così da poter utilizzare `super` per accedere ai metodi della classe padre.
620
620
- Non è quindi sicuro copiare un metodo in un altro oggetto attraverso `super`.
Copy file name to clipboardExpand all lines: 9-regular-expressions/13-regexp-alternation/03-match-quoted-string/solution.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
@@ -3,7 +3,7 @@ The solution: `pattern:/"(\\.|[^"\\])*"/g`.
3
3
Step by step:
4
4
5
5
- First we look for an opening quote `pattern:"`
6
-
- Then if we have a backslash `pattern:\\` (we technically have to double it in the pattern, because it is a special character, so that's a single backslash in fact), then any character is fine after it (a dot).
6
+
- Then if we have a backslash `pattern:\\` (we have to double it in the pattern because it is a special character), then any character is fine after it (a dot).
7
7
- Otherwise we take any character except a quote (that would mean the end of the string) and a backslash (to prevent lonely backslashes, the backslash is only used with some other symbol after it): `pattern:[^"\\]`
0 commit comments