Skip to content

Commit 2737cfc

Browse files
authored
chapter6 (richardanaya#506)
1 parent fdb21df commit 2737cfc

File tree

1 file changed

+196
-0
lines changed

1 file changed

+196
-0
lines changed

lessons/it/chapter_6.yaml

+196
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
- title: Capitolo 6 - Testo
2+
content_markdown: >
3+
Ora che abbiamo capito un po' come Rust pensa alla memoria, siamo pronti
4+
parlare del testo in modo più dettagliato.
5+
6+
Rust si preoccupa molto del testo internazionale e il livello dei byte ti preoccupa
7+
potrebbe non avere familiarità con
8+
9+
da altre lingue. Detto questo, Rust ha molti ottimi strumenti per la gestione
10+
quelle preoccupazioni.
11+
- title: Stringhe letterali
12+
content_markdown: >
13+
Le stringhe letterali sono sempre Unicode.
14+
15+
16+
I tipi di stringhe letterali sono `&'static str`:
17+
18+
19+
* `&` significa che si riferisce a un luogo nella memoria e manca a
20+
`&mut` significa che il compilatore non consentirà modifiche
21+
22+
* `'statico` significa che i dati della stringa saranno disponibili fino alla fine del nostro
23+
programma (non si interrompe mai)
24+
25+
* `str` significa che punta a una sequenza di byte sempre validi
26+
**utf-8**
27+
28+
29+
Dettagli della memoria:
30+
31+
* Il compilatore Rust probabilmente inserirà la tua stringa nel segmento dati del tuo file
32+
memoria del programma
33+
code: >-
34+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
35+
- title: Cos'è utf-8
36+
content_markdown: "Poiché sui computer venivano utilizzate più lingue, il mondo aveva bisogno di rappresentare più caratteri di testo\ndi quelli consentiti dall'ASCII (1 byte consentiva solo 256 caratteri). \n\n**utf-8** è stato introdotto con una lunghezza in byte variabile di 1 -4 byte aumentando notevolmente la gamma di caratteri possibili.\n\nUn vantaggio dei caratteri di dimensione variabile è che il testo non ha byte non necessari per ASCII molto comuni (richiede solo 1 byte ancora in **utf-8**).\n\ nUno svantaggio dei caratteri di dimensione variabile è che la ricerca dei caratteri non può più essere eseguita rapidamente \n(**O(1)** tempo costante) con una semplice indicizzazione (ad esempio `mio_testo[3]` per ottenere il quarto carattere). possibile che i \ncaratteri precedenti possano avere larghezze variabili, alterando il punto in cui inizia effettivamente il 4° carattere nella sequenza di byte.\n\nDobbiamo invece scorrere una sequenza di byte **utf-8** per capire dove iniziano effettivamente i caratteri Unicode (**O(n)** tempo lineare).\n\nFerris: \"Per lo più sono semplicemente felice di avere **utf-8** per rappresentare gli emoji dei miei amici sott'acqua.\"\n\n< span class=\"emoji\">\U0001F420\U0001F419\U0001F41F\U0001F42C\U0001F40B</span>\n"
37+
- title: Personaggi in fuga
38+
content_markdown: >
39+
È difficile rappresentare visivamente alcuni personaggi, quindi **scappare
40+
i codici** ci permettono di mettere un simbolo al loro posto.
41+
42+
43+
Rust supporta i comuni codici di escape dei linguaggi basati su C:
44+
45+
* `\n` - nuova riga
46+
47+
* `\r` - ritorno a capo
48+
49+
* `\t` - tab
50+
51+
* `\\` - barra rovesciata
52+
53+
* `\0` - nullo
54+
55+
* `\'` - virgoletta singola
56+
57+
58+
L'elenco completo esiste
59+
[here](https://doc.rust-lang.org/reference/tokens.html).
60+
code: >-
61+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
62+
- title: Stringhe letterali su più righe
63+
content_markdown: |
64+
Le stringhe di ruggine sono multiline per impostazione predefinita.
65+
66+
Usa un `\` alla fine di una riga se non si desidera una pausa.
67+
code: >-
68+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
69+
- title: Stringhe letterali grezze
70+
content_markdown: >
71+
Le stringhe grezze ci consentono di scrivere una sequenza di caratteri parola per parola iniziando
72+
con `r#"` e termina con `"#`. Ci consente di inserire
73+
74+
caratteri che altrimenti potrebbero confondere una stringa normale come letterali (come
75+
virgolette doppie e barre rovesciate).
76+
code: >-
77+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
78+
- title: Stringhe letterali da file
79+
content_markdown: >
80+
Se hai del testo molto grande, considera l'utilizzo della macro `include_str!` per
81+
includi testo da file locali nel tuo programma:
82+
83+
84+
"ruggine".
85+
86+
let ciao_html = include_str!("ciao.html");
87+
88+
```
89+
- title: Fetta di corda
90+
content_markdown: >
91+
Una porzione di stringa è un riferimento a una sequenza di byte in memoria che deve
92+
essere sempre valido utf-8.
93+
94+
95+
Anche una porzione di stringa (una sotto-fetta) di una porzione `str` deve essere utf-8 valida.
96+
97+
98+
Metodi comuni di `&str`:
99+
100+
* `len` ottiene la lunghezza della stringa letterale in byte (non il numero di
101+
caratteri).
102+
103+
* `starts_with`/`ends_with` per test di base.
104+
105+
* `is_empty` restituisce vero se la lunghezza è zero.
106+
107+
* `find` restituisce una `Option<usize>` della prima posizione di del testo.
108+
code: >-
109+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
110+
- title: Caratteri
111+
content_markdown: >
112+
Con così tante difficoltà nel lavorare con Unicode, Rust offre un modo per farlo
113+
recupera una sequenza di byte utf-8 come vettore di caratteri di tipo "char".
114+
115+
116+
Un "char" è sempre lungo 4 byte (consentendo una ricerca efficiente dei singoli file
117+
caratteri).
118+
code: >-
119+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
120+
- title: Corda
121+
content_markdown: >
122+
Una **String** è una struttura che possiede una sequenza di byte utf-8 nella memoria heap.
123+
124+
125+
Poiché la sua memoria è nell'heap, può essere estesa, modificata, ecc
126+
modi in cui i letterali stringa non possono.
127+
128+
129+
Metodi comuni:
130+
131+
132+
* `push_str` per aggiungere più byte utf-8 alla fine di una stringa.
133+
134+
* `replace` per sostituire sequenze di byte utf-8 con altre.
135+
136+
* `to_lowercase`/`to_uppercase` per le modifiche alle maiuscole.
137+
138+
* `trim` per tagliare lo spazio
139+
140+
141+
Quando una String viene eliminata, viene eliminata anche la sua memoria heap.
142+
143+
144+
`String` ha un operatore `+` che estende la stringa con un `&str` e
145+
ritorna da solo, ma potrebbe non essere ergonomico come speri.
146+
code: >-
147+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
148+
- title: Testo come parametri di funzione
149+
content_markdown: >
150+
Le stringhe letterali e le stringhe vengono generalmente passate come porzioni di stringhe
151+
funzioni. Questo offre molta flessibilità per
152+
153+
nella maggior parte degli scenari in cui non è necessario trasferire effettivamente la proprietà.
154+
code: >-
155+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
156+
- title: Costruire stringhe
157+
content_markdown: |
158+
"concat" e "join" sono due modi semplici ma potenti per creare stringhe.
159+
code: >-
160+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
161+
- title: Stringhe di formattazione
162+
content_markdown: >
163+
La macro `format!` ci consente di creare una stringa definendo un file parametrizzato
164+
stringa con segnaposto per dove e come posizionare i valori (ad es.
165+
"{}`).
166+
167+
168+
`format!` utilizza le stesse stringhe parametrizzate di `println!`
169+
170+
171+
Le capacità di questa funzione sono troppo ampie per *Tour of Rust*;
172+
consulta la documentazione [qui](https://doc.rust-lang.org/std/fmt/).
173+
code: >-
174+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
175+
- title: Conversione di stringhe
176+
content_markdown: |
177+
Molti tipi possono essere convertiti in una stringa utilizzando "to_string".
178+
179+
La funzione generica "parse" può essere utilizzata per convertire stringhe
180+
o valori letterali stringa in un valore tipizzato. Questa funzione ritorna
181+
un "Risultato" perché potrebbe fallire.
182+
code: >-
183+
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021
184+
- title: Capitolo 6 - Conclusione
185+
content_markdown: >
186+
Ora conosci le basi del testo! Come hai visto, Unicode fa funzionare
187+
con testo un po' complicato, ma la libreria standard
188+
189+
ha molte funzionalità per renderlo facile da gestire.
190+
191+
192+
Finora abbiamo guardato Rust principalmente dalla lente di un procedurale
193+
paradigma (cioè solo funzioni e dati),
194+
195+
ma è giunto il momento di parlare dei tratti e delle capacità sbloccate da
196+
Il paradigma orientato agli oggetti di Rust.

0 commit comments

Comments
 (0)