Skip to content

Commit d014c6f

Browse files
authored
Merge pull request #224 from longo-andrea/review/strings
Review Strings
2 parents cb2fa2e + 22916a3 commit d014c6f

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

1-js/05-data-types/03-string/3-truncate/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 5
44

55
# Troncate il testo
66

7-
Create una funzione `truncate(str, maxlength)` che controlla la lunghezza di `str` e, se questa eccee `maxlength` -- rimpiazzate la fine di `str` con il carattere `"…"`, in modo tale da ottenere una lunghezza pari a `maxlength`.
7+
Create una funzione `truncate(str, maxlength)` che controlla la lunghezza di `str` e, se questa eccede `maxlength` -- rimpiazzate la fine di `str` con il carattere `"…"`, in modo tale da ottenere una lunghezza pari a `maxlength`.
88

99
Come risultato la funzione dovrebbe troncare la stringa (se ce n'è bisogno).
1010

1-js/05-data-types/03-string/4-extract-currency/task.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ importance: 4
66

77
Abbiamo un costo pari a `"$120"`. Dove: il simbolo del dollaro viene per primo, poi segue il numero.
88

9-
Create una funzione `extractCurrencyValue(str)` in grado di estrarre il valore numerico dalla stringa e successivamente lo ritorni
9+
Create una funzione `extractCurrencyValue(str)` in grado di estrarre il valore numerico da una stringa, e che successivamente lo ritorni.
1010

1111
Un esempio:
1212

1313
```js
1414
alert( extractCurrencyValue('$120') === 120 ); // true
1515
```
16-

1-js/05-data-types/03-string/article.md

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

33
In JavaScript, i dati di tipo testuale vengono memorizzati in stringhe. Non esiste un tipo separato per i caratteri singoli.
44

5-
Il formato interno per le stringhe è sempre [UTF-16](https://en.wikipedia.org/wiki/UTF-16), non viene influenzato dalla codifica della pagina.
5+
Il formato utilizzato per le stringhe è sempre [UTF-16](https://en.wikipedia.org/wiki/UTF-16), non viene influenzato dalla codifica della pagina.
66

77
## Apici
88

@@ -17,7 +17,7 @@ let double = "double-quoted";
1717
let backticks = `backticks`;
1818
```
1919

20-
Gli apici singoli e doppi sono essenzialmente uguali. I backticks, oltretutto, ci consentono di includere una qualsiasi espressione all'interno della stringa, raccogliendole all'interno di `${…}`:
20+
Gli apici singoli e doppi sono essenzialmente uguali. I backticks, invece, ci consentono di includere una qualsiasi espressione all'interno della stringa, inserendola all'interno di `${…}`:
2121

2222
```js run
2323
function sum(a, b) {
@@ -63,11 +63,11 @@ alert(guestList); // una lista di guest multi riga
6363
Ad esempio, queste due funzioni portano allo stesso risultato:
6464

6565
```js run
66-
alert( "Hello\nWorld" ); // due righe con il simbolo "nuova riga"
66+
let str1 = "Hello\nWorld"; // due righe utilizzando il "carattere nuova riga"
6767

6868
// due righe utilizzando le backticks
69-
alert( `Hello
70-
World` );
69+
let str2 = `Hello
70+
World`;
7171
```
7272

7373
Ci sono altri caratteri "speciali" meno comuni. Qui una lista:
@@ -109,6 +109,7 @@ Ovviamente, questo è valido per un apice uguale a quello utilizzato in apertura
109109
```js run
110110
alert( `I'm the Walrus!` ); // I'm the Walrus!
111111
```
112+
112113
Da notare che il backslash `\` ha l'unico scopo di aiutare JavaScript nella lettura della stringa, questo verrà poi rimosso. La stringa in memoria non avrà `\`. Lo avrete sicuramente notato con gli `alert` dei vari esempi sopra.
113114

114115
Ma se volessimo realmente mostrare un backslash `\` dentro la stringa?
@@ -119,7 +120,7 @@ E' possibile farlo, ma dobbiamo esplicitarlo con un doppio backslash `\\`:
119120
alert( `The backslash: \\` ); // The backslash: \
120121
```
121122

122-
## String lengt
123+
## String length
123124

124125
La proprietà `length` (lunghezza) contiene la lunghezza della stringa:
125126

@@ -256,11 +257,11 @@ while (true) {
256257
if (foundPos == -1) break;
257258

258259
alert( `Found at ${foundPos}` );
259-
pos = foundPos + 1; // continua la ricerca a partire dalla prossima posizio
260+
pos = foundPos + 1; // continua la ricerca a partire dalla prossima posizione
260261
}
261262
```
262263

263-
Lo stesso algoritmo può essere applicato in manierà più breve:
264+
Lo stesso algoritmo può essere riscritto più brevemente:
264265

265266
```js run
266267
let str = "As sly as a fox, as strong as an ox";
@@ -275,12 +276,12 @@ while ((pos = str.indexOf(target, pos + 1)) != -1) {
275276
```
276277

277278
```smart header="`str.lastIndexOf(substr, position)`"
278-
Un altro metodo simile è [str.lastIndexOf(substr, position)](mdn:js/String/lastIndexOf) che ricerca a partire dalla fine della stringa.
279+
Un altro metodo simile è [str.lastIndexOf(substr, position)](mdn:js/String/lastIndexOf), che effettua la ricerca partendo dalla fine della stringa.
279280

280281
Elenca quindi le occorrenze in ordine inverso.
281282
```
282283
283-
C'è solo un piccolo inconveniente con `indexOf` nei test `if`. Non possiamo inserirlo in un `if` in questo modo:
284+
C'è solo un piccolo inconveniente dovuto all'utilizzo di `indexOf` all'interno delle espressioni `if`. Non possiamo inserirlo in un `if` in questo modo:
284285
285286
```js run
286287
let str = "Widget with id";
@@ -340,7 +341,7 @@ Ricordatevi solo che: `if (~str.indexOf(...))` si legge come "se trovi".
340341

341342
Per essere precisi, numeri molto grandi vengono troncati a 32bit dall'operatore `~`, esistono altri numeri che potrebbero dare `0`, il più piccolo è `~4294967295=0`. Questo fa si che questo tipo di controlli siano corretti solamente se una stringa non è troppo lunga.
342343

343-
Attualmente questo trucco lo troviamo solamente nei codici vecchi, poichè JavaScript moderno fornisce un metodo dedicato, `.includes`(vedi sotto).
344+
Attualmente questo trucco lo troviamo solamente nei codici vecchi, poiché JavaScript moderno fornisce un metodo dedicato, `.includes`(vedi sotto).
344345

345346
### includes, startsWith, endsWith
346347

@@ -448,16 +449,16 @@ Ricapitoliamo questi metodi per evitare confusione:
448449

449450

450451
```smart header="Quale scegliere?"
451-
Tutti quelli esaminati possono portare a termine il lavoro. Formalmente, `substr` ha un piccolo inconveniente: non è descritto nelle specifiche del core JavaScript, ma in quelle di Annex B, che copre solo le caratteristiche utili nello sviluppo browser. Quindi ambienti diversi da browser potrebbero non supportarla. Ma nella pratica viene utilizzata ovunque.
452+
Tutti i metodi esaminati possono portare a termine il lavoro. Formalmente, `substr` ha un piccolo inconveniente: non è descritto nelle specifiche del core JavaScript, ma in quelle di Annex B, che copre solo le caratteristiche utili nello sviluppo browser. Quindi ambienti diversi dal browser potrebbero non supportarla. Ma nella pratica viene utilizzata ovunque.
452453
453-
L'autore della guida si trova spesso ad utilizzare `slice`.
454+
L'autore della guida si trova spesso ad utilizzare il metodo `slice`.
454455
```
455456

456-
## Confrontare stringhe
457+
## Confronto tra stringhe
457458

458459
Come sappiamo dal capitolo <info:comparison>, le stringhe vengono confrontate carattere per carattere in ordine alfabetico.
459460

460-
Sebbene ci siano delle stranezze.
461+
Sebbene ci siano dei casi particolari.
461462

462463
1. Una lettera minuscola è sempre maggiore di una maiuscola:
463464

@@ -496,7 +497,7 @@ Tutte le stringhe vengono codificate utilizzando [UTF-16](https://en.wikipedia.o
496497
Possiamo anche aggiungere caratteri unicode tramite il loro codice utilizzando `\u` seguito dal codice esadecimale:
497498
498499
```js run
499-
// 90 è 5a nel istema esadecimale
500+
// 90 è 5a nel sistema esadecimale
500501
alert( '\u005a' ); // Z
501502
```
502503
@@ -525,11 +526,11 @@ I caratteri vengono confrontati utilizzando il loro codice numerico. Un codice m
525526
526527
### Confronto tra stringhe corretto
527528
528-
Il "giusto" algoritmo per confrontare stringhe è più complesso di come possa sembrare, poiché l'alfabeto è diverso per ogni lingua. Lettere uguali possono avere posizioni diverse nei vari alfabeti.
529+
L'algoritmo più corretto da utilizzare per confrontare stringhe è più complesso di quanto si possa pensare, poiché l'alfabeto è diverso per ogni lingua. Lettere uguali possono avere posizioni diverse nei vari alfabeti.
529530
530531
Quindi il browser deve sapere quale lingua utilizzare nel confronto.
531532
532-
Fortunatamente, tutti i browser moderni (IE10 + richiede una libreria esterna [Intl.js](https://github.com/andyearnshaw/Intl.js/)) supportano lo standard internazionale [ECMA-402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf).
533+
Fortunatamente, tutti i browser moderni (IE10 richiede una libreria esterna [Intl.js](https://github.com/andyearnshaw/Intl.js/)) supportano lo standard internazionale [ECMA-402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf).
533534
534535
Questo fornisce uno speciale metodo per confrontare stringhe in lingue diverse, seguendo delle regole.
535536
@@ -573,16 +574,16 @@ Da notare che le coppie surrogate non esistevano al momento della creazione di J
573574
574575
In realtà abbiamo un solo simbolo in ogni stringa sopra, ma la `length` vale `2`.
575576
576-
`String.fromCodePoint` e `str.codePointAt` sono dei rari metodi che operano correttamente con le coppie surrogate. Sono apparsi di recente nel linguaggio. Prima di loro, esisteva solo [String.fromCharCode](mdn:js/String/fromCharCode) e [str.charCodeAt](mdn:js/String/charCodeAt). Sono esattamente la stessa cosa di `fromCodePoint/codePointAt`, semplicemente non funzionano con le coppie surrogate.
577+
`String.fromCodePoint` e `str.codePointAt` sono dei metodi utilizzati per lavorare con le coppie surrogate. Sono apparsi di recente nel linguaggio. Prima di loro, esisteva solo [String.fromCharCode](mdn:js/String/fromCharCode) e [str.charCodeAt](mdn:js/String/charCodeAt). Sono esattamente la stessa cosa di `fromCodePoint/codePointAt`, semplicemente non funzionano con le coppie surrogate.
577578
578-
Però cercare di ottenere un simbolo può essere difficile, perché una coppia surrogata viene trattata come due caratteri:
579+
Però cercare di ottenere un simbolo può essere difficile, poiché una coppia surrogata viene trattata come due caratteri:
579580
580581
```js run
581582
alert( '𝒳'[0] ); // uno strano simbolo...
582583
alert( '𝒳'[1] ); // ...parte di una coppia surrogata
583584
```
584585
585-
Da notare che un pezzo di una coppia surrogata non ha alcun senza l'altro. Quindi nell'esempio sopra verrà mostrata "spazzatura".
586+
Da notare che un pezzo di una coppia surrogata non ha alcun senso senza l'altro. Quindi nell'esempio sopra verrà mostrata "spazzatura".
586587
587588
Tecnicamente, le coppie surrogate sono decifrabili anche per i loro codici: se il primo carattere ha un intervallo di codice di `0xd800..0xdbff`. Allora il successivo carattere (seconda parte) deve avere l'intervallo `0xdc00..0xdfff`. Questi intervalli sono riservati esclusivamente per coppie surrogate definite dallo standard.
588589
@@ -599,7 +600,7 @@ Nel capitolo <info:iterable> troverete molti altri modi per operare con le coppi
599600
600601
### Lettere speciali e normalizzazione
601602
602-
In molti lingue ci sono lettere composte da un carattere di base completato da un simbolo che può stare sopra/sotto.
603+
In molte lingue ci sono lettere composte da un carattere di base completato da un simbolo che può stare sopra/sotto.
603604
604605
Ad esempio, la lettera `a` può essere il carattere di base per: `àáâäãåā`. Molti dei caratteri "composti" hanno una loro rappresentazione nella tabella UTF-16. Però non tutte, poiché le combinazioni possibili sono veramente molte.
605606
@@ -627,7 +628,9 @@ Ad esempio:
627628
628629
```js run
629630

630-
alert( s1 == s2 ); // false though the characters look identical (?!)
631+
alert( s1 == s2 ); // false, nonostante i due caratteri sembrino identici (?!)
632+
633+
```
631634
632635
Per risolvere questo, esiste un algoritmo di "normalizzazione unicode" che porta ogni stringa alla forma "normale".
633636
@@ -647,7 +650,7 @@ alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
647650
648651
In realtà, non è sempre cosi. La ragione è che il simbolo `Ṩ` è "abbastanza comune", quindi la tabella UTF-16 lo contiene già.
649652
650-
Se volete apprendere di più riguardo la normalizzazione e le sue varianti -- vengono descritte nell'appendice dello standard Unicode: [Unicode Normalization Forms](http://www.unicode.org/reports/tr15/), nella pratica le informazioni fornite in questa sezione sono sufficienti.
653+
Se volete approfondire il tema della normalizzazione e le sue varianti -- vengono descritte nell'appendice dello standard Unicode: [Unicode Normalization Forms](http://www.unicode.org/reports/tr15/), nella pratica le informazioni fornite in questa sezione, ti saranno sufficienti.
651654
652655
653656
## Riepilogo

0 commit comments

Comments
 (0)