Skip to content

Commit eeddade

Browse files
committed
2 parents 623112f + 97ef862 commit eeddade

File tree

9 files changed

+30
-33
lines changed

9 files changed

+30
-33
lines changed

1-js/02-first-steps/14-switch/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ switch (a) {
4747
break;
4848
*/!*
4949
case 5:
50-
alert( 'Too large' );
50+
alert( 'Too big' );
5151
break;
5252
default:
5353
alert( "I don't know such values" );

1-js/05-data-types/04-array/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ Questo operatore non offre alcun tipo di trattamento speciale per gli array, li
437437

438438
Ricordando velocemente le regole:
439439

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.
441441
- 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>.
442442
- ...Con l'eccezione di `null` e `undefined` che sono uguali solamente tra di loro.
443443

@@ -495,7 +495,7 @@ Gli array sono uno speciale tipo di oggetto, studiati per immagazzinare e gestir
495495
- 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.
496496
- Se decrementiamo manualmente `length`, l'array viene troncato.
497497

498-
Possiamo utilizzare un array come deque con le seguenti operazioni:
498+
Possiamo eseguire sugli arrays le seguenti operazioni:
499499

500500
- `push(...items)` aggiunge `items` in coda.
501501
- `pop()` rimuove un elemento dalla coda e lo ritorna.
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
function topSalary(salaries) {
22

3-
let max = 0;
3+
let maxSalary = 0;
44
let maxName = null;
55

66
for(const [name, salary] of Object.entries(salaries)) {
77
if (max < salary) {
8-
max = salary;
8+
maxSalary = salary;
99
maxName = name;
1010
}
1111
}
1212

1313
return maxName;
14-
}
15-
16-
14+
}

1-js/09-classes/01-class/article.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ user.sayHi();
5151
```
5252

5353
Quando viene chiamato `new User("John")`:
54-
5554
1. Viene creato un nuovo oggetto;
5655
2. Il metodo `constructor()` viene richiamato e assegna a `this.name` l'argomento dato.
5756

@@ -155,7 +154,7 @@ Ci sono però delle importanti differenze.
155154
}
156155

157156
alert(typeof User); // funzione
158-
User(); // Errore: Il costruttore della classe può essere riciamato solo attraverso 'new'
157+
User(); // Errore: Il costruttore della classe può essere richiamato solo attraverso 'new'
159158
```
160159

161160
Inoltre, nella maggior parte dei motori JavaScript il costruttore comincia con "class"
@@ -369,7 +368,7 @@ Ci sono due differenti approcci per affrontare questo problema, come discusso ne
369368
1. Passare una funzione contenitore, come `setTimeout(() => button.click(), 1000)`.
370369
2. Associare il metodo all'oggetto, e.g. nel costruttore.
371370

372-
I campi di una classe fornicono un'altra sintassi molto più elegante:
371+
I campi di una classe forniscono un'altra sintassi molto più elegante:
373372

374373
```js run
375374
class Button {
@@ -392,7 +391,7 @@ Il campo della classe `click = () => {...}` viene creato per ogni oggetto, abbia
392391

393392
Questo è particolarmente utile in ambiente browser, per gli event listeners (ascoltatori di eventi).
394393

395-
## Riepilog
394+
## Riepilogo
396395

397396
Il seguente esempio riporta la sintassi base di una classe:
398397

1-js/09-classes/02-class-inheritance/article.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ QUi vediamo come rappresentare l'oggetto `animal` e la classe `Animal` graficame
3232

3333
...Potremmo voler creare un'altra `class Rabbit`.
3434

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`.
3636

3737
La sintassi utilizzate per estendere un'altra classe è: `class Child extends Parent`.
3838

@@ -53,7 +53,7 @@ rabbit.run(5); // White Rabbit runs with speed 5.
5353
rabbit.hide(); // White Rabbit hides!
5454
```
5555

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()`).
5757

5858
Internamente, `extends` aggiunge da `Rabbit.prototype` un riferimento `[[Prototype]]` a `Animal.prototype`:
5959

@@ -64,7 +64,7 @@ Ad esempio, per trovare il metodo `rabbit.run`, il motore JavaScript controlla (
6464
2. Il suo prototype, che è `Rabbit.prototype` (possiede `hide`, ma non `run`).
6565
3. Il suo prototype, che è (a causa di `extends`) `Animal.prototype`, che possiede il metodo `run`.
6666

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.
6868

6969
````smart header="Qualsiasi espressione è ammessa dopo `extend`"
7070
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
230230

231231
La risposta breve è:
232232

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`.**
234234

235-
...Ma perchè? Cosa sta succedendo?
235+
...Ma perché? Cosa sta succedendo?
236236
In effetti, questa richiesta sembra un po' strana.
237237

238238
Ovviamente una spiegazione c'è. Addentriamoci nei dettagli, così da capire cosa effettivamente succede.
@@ -284,14 +284,14 @@ alert(rabbit.earLength); // 10
284284
```warn header="Nota avanzata"
285285
Questa nota assume che voi abbiate una certa esperienza con le classi, anche in altri linguaggi di programmazione.
286286
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).
288288
289289
Se trovate questa sezione troppo difficile da capire, saltatela pure, continuate a leggere, e rileggetela in un secondo momento.
290290
```
291291

292292
In una sotto-classe possiamo estendere non solo i metodi, ma anche i campi di classe.
293293

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.
295295

296296
Consideriamo questi esempio:
297297

@@ -318,7 +318,7 @@ Qui, la classe `Rabbit` estende `Animal` e sovrascrive il campo `name` con il su
318318

319319
Non c'è alcun costruttore in `Rabbit`, quindi viene invocato quello di `Animal`.
320320

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`.
322322

323323
**In altre parole, il costruttore genitore utilizza sempre i suoi campi dati, non quelli sovrascritti.**
324324

@@ -353,33 +353,33 @@ new Rabbit(); // rabbit
353353

354354
Notiamo che l'output è differente.
355355

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.
357357

358358
...Ma per i campi dati non è cosi. Come già detto, il costruttore genitore utilizza sempre i suoi campi dati.
359359

360-
Perchè c'è questa differenza?
360+
Perché c'è questa differenza?
361361

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:
363363
- Prima del costruttore per la classe base,
364364
- Subito dopo `super()` per le classi derivate.
365365

366366
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)`.
367367

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`.
369369

370370
Abbiamo quindi una sottile differenza di trattamento tra i campi dati ed i metodi in JavaScript.
371371

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.
373373

374374
Se dovesse verificarsi questo problema, si possono utilizzare i metodi invece dei campi dati.
375375

376376

377377
## Super: internamente, [[HomeObject]]
378378

379379
```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.
381381
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`.
383383
```
384384

385385
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
610610
## Riepilogo
611611
612612
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.
614614
2. Quando sovrascriviamo un costruttore:
615615
- Dobbiamo richiamare il costruttore del padre attraverso `super()` nel costruttore di `Child` prima di utilizzare `this`.
616616
3. Quando sovrascriviamo un metodo:
617617
- Possiamo usare `super.method()` in un metodo di `Child` per richiamare il metodo da `Parent`.
618-
4. Meccaniscmi interni:
618+
4. Meccanismi interni:
619619
- 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.
620620
- Non è quindi sicuro copiare un metodo in un altro oggetto attraverso `super`.
621621

1-js/09-classes/07-mixins/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ let sayMixin = {
6969
};
7070

7171
let sayHiMixin = {
72-
__proto__: sayMixin, // (or we could use Object.create to set the prototype here)
72+
__proto__: sayMixin, // (or we could use Object.setPrototypeOf to set the prototype here)
7373

7474
sayHi() {
7575
*!*

9-regular-expressions/13-regexp-alternation/03-match-quoted-string/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ The solution: `pattern:/"(\\.|[^"\\])*"/g`.
33
Step by step:
44

55
- 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).
77
- 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:[^"\\]`
88
- ...And so on till the closing quote.
99

9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
The regexp for an integer number is `pattern:\d+`.
33

4-
We can exclude negatives by prepending it with the negative lookahead: `pattern:(?<!-)\d+`.
4+
We can exclude negatives by prepending it with the negative lookbehind: `pattern:(?<!-)\d+`.
55

66
Although, if we try it now, we may notice one more "extra" result:
77

9-regular-expressions/14-regexp-lookahead-lookbehind/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Lookahead and lookbehind
22

3-
Sometimes we need to find only those matches for a pattern that are followed or preceeded by another pattern.
3+
Sometimes we need to find only those matches for a pattern that are followed or preceded by another pattern.
44

55
There's a special syntax for that, called "lookahead" and "lookbehind", together referred to as "lookaround".
66

0 commit comments

Comments
 (0)