Skip to content

Commit eb00cb2

Browse files
committed
Merge branch 'master' of https://github.com/javascript-tutorial/it.javascript.info into Article/13-while-for
2 parents 4ed7bf4 + 6bc49fb commit eb00cb2

File tree

21 files changed

+324
-366
lines changed

21 files changed

+324
-366
lines changed

1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ La risposta: prima `1`, poi `2`.
44
alert( alert(1) || 2 || alert(3) );
55
```
66

7-
La chiamata ad `alert` non ritorna alcun valore; dunque `undefined`.
7+
La chiamata ad `alert` non ritorna alcun valore; ossia `undefined`.
88

99
1. Il primo OR `||` valuta l'operando sinistro `alert(1)`. Questo mostra il primo messaggio, `1`.
1010
2. La funzione `alert` ritorna `undefined`, quindi OR prosegue con il secondo operando, alla ricerca di un valore vero.

1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ importance: 3
44

55
# Controlla l'intervallo
66

7-
Scrivi una condizione `if` per controllare che `age` sia compresa tra `14` e `90` (inclusi: `age` può valere anche `14` o `90`).
7+
Scrivi una condizione `if` per controllare che `age` sia compresa tra `14` e `90` estremi inclusi.
8+
9+
"Inclusi" significa che `age` può valere anche `14` o `90`.

1-js/02-first-steps/11-logical-operators/8-if-question/solution.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ La risposta: il primo e il terzo verranno eseguiti.
33
I dettagli:
44

55
```js run
6-
// Runs.
7-
// The result of -1 || 0 = -1, truthy
6+
// Viene eseguito
7+
// Il risultato di -1 || 0 = -1 è vero
88
if (-1 || 0) alert( 'first' );
99

10-
// Doesn't run
11-
// -1 && 0 = 0, falsy
10+
// Non viene eseguito
11+
// -1 && 0 = 0, falso
1212
if (-1 && 0) alert( 'second' );
1313

14-
// Executes
15-
// Operator && has a higher precedence than ||
16-
// so -1 && 1 executes first, giving us the chain:
14+
// Eseguito
15+
// L'operatore && ha la precedenza su ||,
16+
// quindi -1 && 1 vengono eseguiti per primi; la catena dentro `if` diventa:
1717
// null || -1 && 1 -> null || 1 -> 1
1818
if (null || -1 && 1) alert( 'third' );
1919
```

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ result = a || b;
1616

1717
Nella programmazione classica, l'OR logico è utilizzato per manipolare solo tipi booleani. Se almeno un argomento è `true`, allora il risultato sarà `true`, altrimenti sarà `false`.
1818

19-
In JavaScript questo operatore è un più potente. Ma prima vediamo come si comporta con i valori booleani.
19+
In JavaScript questo operatore è un po' più potente. Ma prima vediamo come si comporta con i valori booleani.
2020

2121
Ci sono quattro combinazioni logiche possibili:
2222

@@ -29,7 +29,7 @@ alert( false || false ); // false
2929

3030
Come possiamo vedere, il risultato è sempre `true`, tranne nei casi in cui entrambi gli operandi sono `false`.
3131

32-
Se un operando non è di tipo booleano vi viene momentaneamente convertito per la valutazione.
32+
Se un operando non è di tipo booleano, allora viene momentaneamente convertito per la valutazione.
3333

3434
Ad esempio, il numero `1` viene considerato come `true`, il numero `0` come `false`:
3535

@@ -82,7 +82,7 @@ L'operatore OR `||` si comporta come segue:
8282
- Ogni operando viene convertito a booleano. Se il risultato è `true`, il logical OR si ferma e ritorna il valore originale dell'operando.
8383
- Se tutti gli operandi sono stati valutati e nessuno è `true`, ritorna l'ultimo operando.
8484

85-
**Un valore viene ritornato nella sua forma originale, non nella sua conversione booleana.
85+
Un valore viene ritornato nella sua forma originale, non nella sua conversione booleana.
8686

8787
In altre parole, una catena di OR `"||"` ritorna il primo valore vero; se invece non ce ne sono ritorna l'ultimo valore.
8888

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

120120
2. **Valutazione a Corto-Circuito.**
121121

122-
Gli operandi, oltre che valori, possono essere anche espressioni arbitrarie. L'operatore OR esegue la valutazione da sinistra a destra e si ferma al primo risultato vero, che viene ritornato. Il processo è chiamato "valutazione a corto-circuito" perchè cerca di concludersi il prima possibile (quando possibile), senza aver raggiunto l’operando successivo.
122+
Gli operandi, oltre che valori, possono essere anche espressioni arbitrarie. L'operatore OR esegue la valutazione da sinistra a destra e si ferma al primo risultato vero, il quale viene ritornato. Il processo è chiamato "valutazione a corto-circuito" perché cerca di concludersi il prima possibile, senza dover elaborare tutti gli operandi.
123123
124124
Il logical OR è particolarmente utile quando il secondo argomento causerebbe un *side-effect* come l'assegnazione di una variabile o la chiamata a una funzione.
125125
Nell'esempio che segue solo il secondo messaggio verrà mostrato.
@@ -258,7 +258,7 @@ result = !value;
258258
L'operatore accetta un solo argomento e si comporta come segue:
259259
260260
1. Converte l'operando a booleano: `true/false`.
261-
2. Ritorna il valore **inverso.
261+
2. Ritorna il valore inverso.
262262
263263
Ad esempio:
264264
@@ -276,7 +276,7 @@ alert( !!null ); // false
276276
277277
Quello che accade è che il primo NOT converte l'operando a booleano e ritorna il suo inverso, e il secondo NOT lo *inverte nuovamente*. Il risultato è un valore di tipo booleano.
278278
279-
C'è un modo molto più lungo per fare la stessa cosa -- una funzione *built-in* di `Boolean`:
279+
C'è un modo molto più lungo per fare la stessa cosa, usare la funzione `Boolean`, integrata in JavaScript:
280280
281281
```js run
282282
alert( Boolean("non-empty string") ); // true

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/03-code-quality/04-ninja-code/article.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
```quote author="Confucio"
5-
Imparare senza pensare è lavoro sprecata; pensare senza imparare è pericoloso.
5+
Imparare senza pensare è lavoro sprecatao; pensare senza imparare è pericoloso.
66
```
77
I programmatori ninja in passato hanno usato queste tecniche per formare le menti dei manutentori del codice.
88

@@ -41,9 +41,9 @@ Insegnategli che la brevità è sempre la cosa migliore. Iniziatelo al percorso
4141
Il Dao si nasconde nel silenzio. Solo il Dao è completo.
4242
```
4343

44-
Un altro metodo per programmare velocemente è utilizzare nomi di variabili a singola carattere ovunque. Come `a`, `b` o `c`.
44+
Un altro metodo per programmare velocemente è utilizzare nomi di variabili a singolo carattere ovunque. Come `a`, `b` o `c`.
4545

46-
Una variabile molto breve sparirà nel codice come un vero ninja scompare nella foresta. Nessuno sarà in grado di ritrovarla, nemmeno utilizzando il tasto "cerca". E se qualcuno mai riuscirà a trovarla non "decifrerà" ma il vero significato di `a` o `b`.
46+
Una variabile molto breve sparirà nel codice come un vero ninja scompare nella foresta. Nessuno sarà in grado di ritrovarla, nemmeno utilizzando il tasto "cerca". E se qualcuno mai riuscirà a trovarla non "decifrerà" mai il vero significato di `a` o `b`.
4747

4848
...C'è però un'eccezione. Un vero ninja non utilizzerà mai `i` come contatore in un ciclo `"for"`. Ovunque, ma non qui. Si guarderà intorno, ci sono moltissime lettere esotiche. Ad esempio `x` o `y`.
4949

1-js/03-code-quality/05-testing-mocha/article.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Abbiamo parlato abbastanza. Vediamo degli esempi.
3232

3333
## Sviluppo di "pow": le specifiche
3434

35-
Vogloamo creare una funzione `pow(x, n)` che calcola la potenza di `x` per un intero `n`. Assumiamo che `n≥0`.
35+
Vogliamo creare una funzione `pow(x, n)` che calcola la potenza di `x` per un intero `n`. Assumiamo che `n≥0`.
3636

3737
Questo è solo un esempio: infatti l'operatore `**` svolge quest'azione, ma concentriamoci sul flusso di sviluppo, che potremmo poi applicare a funzioni più complesse.
3838

@@ -56,7 +56,7 @@ Una spec ha tre principali blocchi:
5656
: Viene descritta la funzionalità. Utilizzata per raggruppare le "attività" -- i blocchi `it`. Nel nostro caso descriviamo la funzione `pow`.
5757

5858
`it("title", function() { ... })`
59-
: Nel titolo di `it` descriviamo il particolare caso d'uso *leggibili per gli umani*, come secondo argomento una funzione che la testa.
59+
: Nel titolo di `it` descriviamo il particolare caso d'uso *leggibile per gli umani*, come secondo argomento una funzione che lo testa.
6060

6161
`assert.equal(value1, value2)`
6262
: Il codice all'interno del blocco `it`, se l'implementazione è corretta, dovrebbe eseguire senza errori.
@@ -79,14 +79,14 @@ Il flusso di sviluppo solitamente segue i passi:
7979

8080
Quindi la fase di sviluppo è *iterativa*. Scriviamo la specifica, la implementiamo, ci accertiamo che passi i test, ci assicuriamo che faccia ciò che deve. Al termine di questa procedura avremmo un implementazione già testata e funzionante.
8181

82-
Nel nostro caso, il primo step è completo: abbiamo un specifica iniziale di `pow`. Quindi ora passiamo all'implementazione. Come prima cosa facciamo l'esecuzione "zero" con le specifiche scritte, per essere sicuri che tutto funzioni (ovviamente dovrebbero tutte fallire).
82+
Nel nostro caso, il primo step è completo: abbiamo un specifica iniziale di `pow`. Quindi ora passiamo all'implementazione. Come prima cosa facciamo l'esecuzione "zero" con le specifiche scritte, per essere sicuri che tutto funzioni (ovviamente i test dovrebbero fallire tutti).
8383

8484
## La spec in azione
8585

8686
In questo guida utilizzeremo le seguenti librerie JavaScript per fare test:
8787

8888
- [Mocha](http://mochajs.org/) -- un core framework: fornisce le maggiori funzioni di test come `describe` e `it` e le principali funzioni che eseguono i test.
89-
- [Chai](http://chaijs.com) -- una libreria con molte asserzioni. Ci consente di utilizzare molte asserzioni differenti, per ora ci servirà solo s`assert.equal`.
89+
- [Chai](http://chaijs.com) -- una libreria con molte asserzioni. Ci consente di utilizzare molte asserzioni differenti, per ora ci servirà solamente `assert.equal`.
9090
- [Sinon](http://sinonjs.org/) -- una libreria per il controllo oltre le funzioni, emula funzioni integrate e molto altro, la utilizzeremo più avanti.
9191

9292
Queste librerie sono utili sia per per il test browser, sia per il test lato server. Qui considereremo la variante browser.
@@ -296,14 +296,14 @@ Testing finished – after all tests (after)
296296
297297
[edit src="beforeafter" title="Open the example in the sandbox."]
298298
299-
Solitamente, `beforeEach/afterEach` (`before/each`) vengono utilizzari per eseguire inizializzazioni, azzerare i contatori o fare qualcosa prima di iniziare il prossimo test.
299+
Solitamente, `beforeEach/afterEach` (`before/each`) vengono utilizzati per eseguire inizializzazioni, azzerare i contatori o fare qualcosa prima di iniziare il prossimo test.
300300
````
301301
302302
## Estendere le spec
303303
304304
La funzionalità di base di `pow` è completa. La prima iterazione di sviluppo è fatta. Dopo aver festeggiato e bevuto champagne -- andiamo avanti provando ad aggiungere funzionalità.
305305
306-
Come abbiamo detto, la funzione `pow(x, n)` è stata sviluppate per funzionare con interi positivi `n`.
306+
Come abbiamo detto, la funzione `pow(x, n)` è stata sviluppata per funzionare con interi positivi `n`.
307307
308308
Per indicare un errore matematico, JavaScript solitamente ritorna `NaN`. Facciamo lo stesso per valori non validi di `n`.
309309
@@ -332,7 +332,7 @@ Il risultato con il nuovo test sarà:
332332

333333
[iframe height=530 src="pow-nan" edit border="1"]
334334

335-
I nuovi test aggiunti falliranno, perché la nostra implementazione non li supporta ancora. Cosi è come funziona BDD: prima si scrivono test fallaci, e successivamente si lavora sull'implementazione.
335+
I nuovi test aggiunti falliranno, perché la nostra implementazione non li supporta ancora. Cosi è come funziona BDD: prima si scrivono test in modo che falliscano, e successivamente si lavora sull'implementazione.
336336

337337
```smart header="Altre asserzioni"
338338
@@ -390,7 +390,7 @@ Questo è particolarmente importante specie nei grandi progetti, quando le funzi
390390
Senza i test, le persone avrebbero due possibilità:
391391

392392
1. Cambiare qualcosa, non importa cosa. E successivamente gli utenti dovrebbero fare un rapporto quando incontrano un bug. Non sempre possiamo permetterci di farlo.
393-
2. Essere impauriti dai cambiamenti, soprattutto se la punizione in caso di errori è severa. Un giorno queste funzioni diventeranno vecchie, e coperte di ragnatele, nessuno vorrebbe utilizzare, questa opzione non è quindi ottimale.
393+
2. Essere impauriti dai cambiamenti, soprattutto se la punizione in caso di errori è severa. Un giorno queste funzioni diventeranno vecchie, e coperte di ragnatele, nessuno vorrà più utilizzarle, questa opzione non è quindi ottimale.
394394

395395
**Il codice testato automaticamente evita questi problemi!**
396396

1-js/03-code-quality/06-polyfills/article.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11

2-
# Polyfills and transpilers
2+
# Polyfills e transpilers
33

44
Il linguaggio JavaScript si evolve costantemente. Nuove proposte per il linguaggio arrivano regolarmente, vengono analizzate, e successivamente se ritenute valide vengono aggiunte alla lista <https://tc39.github.io/ecma262/> fino a diventare delle [specifiche](http://www.ecma-international.org/publications/standards/Ecma-262.htm).
55

66
I team che stanno dietro il motore di JavaScript hanno le loro personali idee riguardo cosa implementare. Potrebbero quindi decidere di implementare delle proposte recenti e posticipare quelle più vecchie a causa di difficoltà nell'implementazione.
77

88
Quindi per un motore di script è naturale implementare solo le cose che si trovano nello standard.
99

10-
Se si vuole rimanere aggiornati riguardo lo stato di supporto delle caratteristiche si può controllare la pagina <https://kangax.github.io/compat-table/es6/>molt grande, dovremmo studiare ancora molto).
10+
Se si vuole rimanere aggiornati riguardo lo stato di supporto delle caratteristiche si può controllare la pagina <https://kangax.github.io/compat-table/es6/>molto grande, dovremmo studiare ancora molto).
1111

12-
Come programmatori, amiamo utilizzare le più recenti caratteristiche del linguaggio, ma come si può fare per farle funzionare sui vecchi motori Javascript che non le comprendono ed interpretano?
12+
Come programmatori, amiamo utilizzare le più recenti caratteristiche del linguaggio!
13+
14+
Ma come si può fare per farle funzionare sui vecchi motori JavaScript che non le comprendono ed interpretano?
1315

1416
Esistono due strumenti per questo:
1517

@@ -20,7 +22,7 @@ In questo capitolo cercheremo di capire il loro funzionamento ed il loro ruolo n
2022

2123
## Transpilers
2224

23-
Un [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) è un particolare software capace di analizzare il codice moderno e di riscriverlo utilizzando sintassi e costrutti meno recenti, facendo in modo che alla fine funzioni nello stesso modo.
25+
Un [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) è un particolare software capace di analizzare il codice moderno e di riscriverlo utilizzando sintassi e costrutti meno recenti, facendo in modo che il funzionamento sia simile.
2426

2527
Es. JavaScript prima del 2020 non aveva "l'operatore di coalescenza nullo" `??`. Quindi, se un visitatore utilizza un vecchio browser, questo non potrebbe comprendere `height = height ?? 100`.
2628

@@ -34,7 +36,7 @@ height = height ?? 100;
3436
height = (height !== undefined && height !== null) ? height : 100;
3537
```
3638
37-
Ora il codice riscritto è adatto anche ai vecchi motori JavaScript
39+
Ora il codice riscritto è adatto anche ai vecchi motori JavaScript.
3840
3941
In genere lo sviluppatore fa girare il transpiler in locale sul proprio computer, quindi distribuisce sul server il codice riscritto.
4042

1-js/04-object-basics/01-object/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Nell'oggetto `user`, ci sono due proprietà:
3636
1. La prima proprietà ha come nome `"name"` e valore `"John"`.
3737
2. La seconda come nome ha `"age"` e valore `30`.
3838

39-
L'oggetto risultate `user` può essere visto come un archivio con due file etichettati con "name" ed "age".
39+
L'oggetto `user` risultante può essere visto come un archivio con due file etichettati con "name" ed "age".
4040

4141
![user object](object-user.svg)
4242

0 commit comments

Comments
 (0)