Char è un tipo di dato in Crystal che rappresenta un punto di codice Unicode a 32 bit.
Le sue dimensioni lo rendono efficiente in termini di memoria e gli conferiscono proprietà specifiche che le stringhe non hanno.
Si crea usando virgolette singole (') e consente di inserirvi un solo punto di codice Unicode.
'a' # => 'a'
'a'.class # => Char
È piuttosto comune lavorare con i Char quando si lavora con le stringhe in Crystal, dato che parecchi metodi della classe String restituiscono Char o accettano Char come argomenti.
Per esempio, il metodo String#[] restituisce un Char, oppure il metodo String#chars restituisce una collezione di Char.
Dato che un Char è un punto Unicode a 32 bit, supporta l'incremento e il decremento: questo fa sì che, se hai 'a', puoi ottenere 'b' aggiungendo uno.
'a' + 5
# => 'f'
'z' - 25
# => 'a'
Esiste anche un metodo chiamato Char#succ, che restituisce il carattere successivo nella tabella Unicode, e Char#pred, che restituisce il carattere precedente nella tabella Unicode.
'a'.succ
# => 'b'
'z'.pred
# => 'y'
Dato che i Char servono solo a rappresentare un punto Unicode a 32 bit, due Char non possono essere concatenati. Di conseguenza, i Char possono essere concatenati solo con le stringhe.
'a' + "bc"
# => "abc"
'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char
Crystal ha alcuni metodi per ottenere informazioni su un carattere, come se è un numero o una lettera, oppure se è maiuscolo o minuscolo. Ecco un elenco di alcuni dei metodi; per un elenco completo, consulta l'API di Char:
| Metodo | Descrizione |
|---|---|
Char#number? |
Restituisce true se il Char è un numero |
Char#letter? |
Restituisce true se il Char è una lettera |
Char#lowercase? |
Restituisce true se il Char è minuscolo |
Char#uppercase? |
Restituisce true se il Char è maiuscolo |
Char#ascii? |
Restituisce true se il Char è un carattere ASCII |
Char#whitespace? |
Restituisce true se il Char è un carattere di spazio |
Dato che un Char è un punto Unicode a 32 bit, puoi convertire tra Char e punti di codice (Int).
Puoi farlo usando il metodo Char#ord, che restituisce il punto di codice del Char, oppure il metodo Int#chr, che restituisce il Char del punto di codice.
'a'.ord
# => 97
97.chr
# => 'a'
Come per gli altri tipi di dato, i Char hanno alcuni metodi per convertire tra tipi.
Il più comune è il metodo Char#to_s, che converte il Char in una stringa. Esiste però anche il metodo Char#to_i, che converte il Char in un Int, e il metodo Char#to_f, che converte il Char in un Float.
'a'.to_s
# => "a"
'4'.to_i
# => 4
'a'.to_i
# => Error: Invalid integer: a (ArgumentError)
La biblioteca di Luton è una grande biblioteca con una vasta collezione di letteratura, che va dai libri all'arte. La biblioteca ha una sezione in cui si studia la letteratura e si aggiungono libri al sistema informatico.
Alcune parti mirano a essere automatizzate e ti viene chiesto di dare una mano. Tra le cose da fare ci sono l'automazione dei moduli del processo di registrazione e la decifratura dei testi.
I libri di una biblioteca dovrebbero essere facili da trovare, quindi sono ordinati per la prima lettera del titolo.
Implementa il metodo Library.first_letter, che prende un argomento title contenente il titolo del libro.
Il metodo deve restituire la prima lettera del titolo.
Library.first_letter("Mystery of the Crystal Skull")
# => 'M'
La biblioteca ha molti libri scritti da autori diversi.
Spesso ci si riferisce agli autori con le loro iniziali, quindi la biblioteca ha chiesto un sistema che restituisca le iniziali dell'autore partendo dal suo nome e dal suo cognome.
Le iniziali devono essere formattate così: {first_letter_of_first_name}.{first_letter_of_last_name}
Implementa il metodo Library.initials, che prende due argomenti first_name e last_name contenenti il nome e il cognome dell'autore.
Il metodo deve restituire le iniziali dell'autore.
Library.initials("William", "Shakespeare")
# => "W.S"
Parte della letteratura è cifrata e la biblioteca ha molti testi cifrati. La biblioteca vorrebbe un nuovo sistema di decifratura per questa cifratura speciale.
La cifratura funziona prendendo la lettera e sostituendola con la lettera che la precede nell'alfabeto.
Per esempio, a diventa z, b diventa a, c diventa b e così via.
La biblioteca vorrebbe che fosse in grado di decifrare sia le lettere maiuscole sia quelle minuscole, mantenendo lo stesso caso della lettera originale.
Implementa il metodo Library.decrypt_character, che prende un argomento character contenente la lettera da decifrare.
Il metodo deve restituire la lettera decifrata.
Library.decrypt_character('a')
# => 'z'
La biblioteca vorrebbe anche decifrare un intero testo con questa cifratura, quella che prende la lettera precedente nell'alfabeto.
Il decifratore deve decifrare solo le lettere e lasciare invariati tutti gli altri caratteri.
Implementa il metodo Library.decrypt_text, che prende un argomento text contenente il testo da decifrare.
Il metodo deve restituire il testo decifrato.
Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.