|
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. |