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.