ZIG - I caratteri
I caratteri. Un argomento che in tutti i linguaggi è centrale, normalmente
si parla di tipo "char" o similari. Bene in Zig il discorso è molto
semplice:
non esiste il tipo char.
Questa è una cosa molto interessante. In pratica se scriviamo 'A' il
linguaggio lo tratta come un u8, un numero senza segno su 8 bit. Se occorre
utilizzare un grafema più complesso Zig vede un u32, definito quindi su 4
byte. Una stringa, come vedremo, è un array di numeri senza segno. Questa è
ovviamente una scelta di design che tende ad evitare ambiguità di qualsiasi
tipo. Se vogliamo entrare nell'intero insieme Unicode avremo da definire un
u21 ovvero siamo nel range 0–0x10FFFF.
Come si "crea" allora un
carattere? Vediamo il seguente esempio
Esempio 6.1
const std = @import("std");
pub fn main() !void {
const numero: i32 = 97;
std.debug.print("Numero: {d}, Carattere: {c}\n", .{ numero, numero });
}
che ci restituisce:
| Numero: 97, Carattere: a |
Invece all'inverso, ovvero da carattere a intero:
Esempio 6.2
const std = @import("std");
pub fn main() !void {
const carattere = 'a'; // Questo è un letterale di tipo 'comptime_int'
const valore: u8 = carattere; // Viene implicitamente convertito in 97
std.debug.print("Valore ASCII di '{c}' = {d}\n", .{ carattere, valore });
}
e qui abbiamo:
| Valore ASCII di 'a' = 97 |
Questi esempi non fanno altro che ribadire la filosofia con cui Zig
tratta questi elementi. Un carattere, o meglio quello che per noi è un
carattere per Zig è sempre un numero, siamo noi a dover
esplicitamente dire che vogliamo un carattere. Questo è evidente appunto nel
codice 6.1 e 6.2. Se vogliamo il numero usiamo {d} se vogliamo vedere il
carattere usiamo {c}.
Questa impostazione ovviamente facilita eventuali
operazioni sui caratteri, ad esempio se voglio passare da lettera minuscola
a maiuscola basta una semplice operazione aritmetica:const minuscola: u8 = 'g';
const
maiuscola: u8 = minuscola - 32; // Risultato: 71, ovvero 'G'
Non ci
sono quindi proprietà particolari da illustrare. Sarà interessante vedere
invece le sequenze di caratteri, a questo punto pure sequenze di numeri.