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
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ result = a || b;
16
16
17
17
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`.
18
18
19
-
In JavaScript questo operatore è un pò 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.
Come possiamo vedere, il risultato è sempre `true`, tranne nei casi in cui entrambi gli operandi sono `false`.
31
31
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.
33
33
34
34
Ad esempio, il numero `1` viene considerato come `true`, il numero `0` come `false`:
35
35
@@ -82,7 +82,7 @@ L'operatore OR `||` si comporta come segue:
82
82
- Ogni operando viene convertito a booleano. Se il risultato è `true`, il logical OR si ferma e ritorna il valore originale dell'operando.
83
83
- Se tutti gli operandi sono stati valutati e nessuno è `true`, ritorna l'ultimo operando.
84
84
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.
86
86
87
87
In altre parole, una catena di OR `"||"` ritorna il primo valore vero; se invece non ce ne sono ritorna l'ultimo valore.
88
88
@@ -119,7 +119,7 @@ Questo ci permette alcuni utilizzi interessanti rispetto al "puro e classico OR
119
119
120
120
2.**Valutazione a Corto-Circuito.**
121
121
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.
123
123
124
124
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.
125
125
Nell'esempio che segue solo il secondo messaggio verrà mostrato.
@@ -258,7 +258,7 @@ result = !value;
258
258
L'operatore accetta un solo argomento e si comporta come segue:
259
259
260
260
1. Converte l'operando a booleano: `true/false`.
261
-
2. Ritorna il valore **inverso.
261
+
2. Ritorna il valore inverso.
262
262
263
263
Ad esempio:
264
264
@@ -276,7 +276,7 @@ alert( !!null ); // false
276
276
277
277
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.
278
278
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:
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/04-ninja-code/article.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
4
4
```quote author="Confucio"
5
-
Imparare senza pensare è lavoro sprecata; pensare senza imparare è pericoloso.
5
+
Imparare senza pensare è lavoro sprecatao; pensare senza imparare è pericoloso.
6
6
```
7
7
I programmatori ninja in passato hanno usato queste tecniche per formare le menti dei manutentori del codice.
8
8
@@ -41,9 +41,9 @@ Insegnategli che la brevità è sempre la cosa migliore. Iniziatelo al percorso
41
41
Il Dao si nasconde nel silenzio. Solo il Dao è completo.
42
42
```
43
43
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`.
45
45
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`.
47
47
48
48
...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`.
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/05-testing-mocha/article.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,7 +32,7 @@ Abbiamo parlato abbastanza. Vediamo degli esempi.
32
32
33
33
## Sviluppo di "pow": le specifiche
34
34
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`.
36
36
37
37
Questo è solo un esempio: infatti l'operatore `**` svolge quest'azione, ma concentriamoci sul flusso di sviluppo, che potremmo poi applicare a funzioni più complesse.
38
38
@@ -56,7 +56,7 @@ Una spec ha tre principali blocchi:
56
56
: Viene descritta la funzionalità. Utilizzata per raggruppare le "attività" -- i blocchi `it`. Nel nostro caso descriviamo la funzione `pow`.
57
57
58
58
`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.
60
60
61
61
`assert.equal(value1, value2)`
62
62
: 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:
79
79
80
80
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.
81
81
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).
83
83
84
84
## La spec in azione
85
85
86
86
In questo guida utilizzeremo le seguenti librerie JavaScript per fare test:
87
87
88
88
-[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`.
90
90
-[Sinon](http://sinonjs.org/) -- una libreria per il controllo oltre le funzioni, emula funzioni integrate e molto altro, la utilizzeremo più avanti.
91
91
92
92
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)
296
296
297
297
[edit src="beforeafter" title="Open the example in the sandbox."]
298
298
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.
300
300
````
301
301
302
302
## Estendere le spec
303
303
304
304
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à.
305
305
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`.
307
307
308
308
Per indicare un errore matematico, JavaScript solitamente ritorna `NaN`. Facciamo lo stesso per valori non validi di `n`.
309
309
@@ -332,7 +332,7 @@ Il risultato con il nuovo test sarà:
332
332
333
333
[iframe height=530 src="pow-nan" edit border="1"]
334
334
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.
336
336
337
337
```smart header="Altre asserzioni"
338
338
@@ -390,7 +390,7 @@ Questo è particolarmente importante specie nei grandi progetti, quando le funzi
390
390
Senza i test, le persone avrebbero due possibilità:
391
391
392
392
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.
394
394
395
395
**Il codice testato automaticamente evita questi problemi!**
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/06-polyfills/article.md
+7-5Lines changed: 7 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,15 +1,17 @@
1
1
2
-
# Polyfills and transpilers
2
+
# Polyfills e transpilers
3
3
4
4
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).
5
5
6
6
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.
7
7
8
8
Quindi per un motore di script è naturale implementare solo le cose che si trovano nello standard.
9
9
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).
11
11
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?
13
15
14
16
Esistono due strumenti per questo:
15
17
@@ -20,7 +22,7 @@ In questo capitolo cercheremo di capire il loro funzionamento ed il loro ruolo n
20
22
21
23
## Transpilers
22
24
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.
24
26
25
27
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`.
0 commit comments