Home Rhyylen
Contatto
 
 
 
Crystal Language
Capitolo 7
I caratteri

In questo linguaggio i caratteri sono definiti tramite una struttura, un costrutto che impareremo a conoscere. Questo tipo di dati occupa 32 bit e rappresenta un elemento Unicode. Ovviamente, grazie all'ampiezza disponibile, è possibile visualizzare con essi caratteri appartenenti non solo al nostro alfabeto latino. Aggiungiamo che i caratteri sono elementi immutabili.
Formalmente abbiamo la solita rappresentazione, un simbolo all'interno di una coppia di singoli apici
:

'a' 'b' '9' '='

sono tutti esempi validi di carattere. La coppia di singoli apici stabilisce che tratta di caratteri, qualsiasi cosa vi sia al suo interno, purchè si tratti di un solo elemento (UTF - 8) a parte i casi che mostriamo subito qui di seguito. Infatti, come in altri linguaggi, ci sono anche alcune sequenze particolari utilizzate per presentare casi di caratteri particolari:

'\''    # single quote
'\\'    # backslash
'\e'    # escape
'\f'    # form feed
'\n'    # nuova linea
'\r'    # ritorno del carrello
'\t'    # tabulazione
'\v'    # tabulazione verticale

Si può usare anche il formato seguente:

'\101\' è il carattere A
'\123\' è la S

e così via. E' anche possibile la rappresentazione tramite il formato esadecimale, in due forme:

'\u0041' è ancora la nostra A
'\u{41}' di nuovo è la A.

La struct Char contiene alcune costanti, forse non le userete mai, ad esempio Zero e MAX, rispettivamente il classico '\0' del C e il massimo carattere rappresentabile.
Possiamo scrivere

puts 'b' - 'a'

in quanto l'operatore - nell'ambito dei caratteri è così definito:

def -(other : Char)
ord - other.ord
end

Il + per i caratteri è invece un po' diverso è può essere usato per concatenare un carattere ad una stringa (che è definita tramite una coppia di doppia apici, ricordiamolo)

puts "cia" + 'o'
puts 'c' + "iao"

oppure

puts 'a' + 1

ma non

puts 'a' + 'b'

in quanto questo overload dell'operatore + è definito

def +(other : Int) : Char
(ord + other).chr
end

potreste però riunire i due caratteri in una stringa (vedere relativo capitolo)

Non preoccupatevi se questo codice non vi è chiaro, potrete tornarci sopra quando avremo parlato delle funzioni.
I caratteri hanno tante altre interessanti proprietà che sono elencate sul sito ufficiale. Qui ne illustro alcune anche per chiarirne le modalità d'uso:

puts 'c'.lowercase?
puts 'g'.uppercase?
puts '4'.number?
puts 'F'.hex?
puts ' '.whitespace?
puts '4'.alphanumeric?

c1 = 'a'
c2 = c1.clone
puts c1
puts c2

Direi piuttosto semplice. Le ultime 4 righe espongono il metodo clone per effettuare una copia al posto del classico =.

Se volete trovare il codepoint di un carattere (nel caso dell'ambito ASCII il suo codice corrispondente) potrete usare ord

puts 'a'.ord

mentre l'inverso, ovvero per converire da intero verso il carattere corrispondente (purchè l'ambito nimerico sia corretto) si ottiene con chr

puts 97.chr

come avevamo già visto nel paragrafo dedicato agli interi.
Se il carattere rappresenta un numero è possibile convertire questo in intero o float.

x = '1'
i = x.to_i
f = x.to_f

applicare questo metodo su un elemento che non sia un numero dà origine ad un errore. Esistono tuttavia i metodi col ? finale che evitano l'errore to_i? e to_f? e di essi parleremo a tempo debito
Il metodo to_s invece converte il carattere in una stringa costituita da un solo elemento.
Anche i caratteri supportano il metodo succ:
 
'a'.succ
restituisce b e questo ci sarà utile quando parleremo dei range.