Tipo Carattere in Object Pascal
- In Object Pascal, il tipo
Char
rappresenta singoli caratteri Unicode a doppio byte. - I caratteri possono essere rappresentati in notazione simbolica (apici singoli) o numerica (preceduti da
#
). - Le funzioni
Chr
eOrd
permettono di convertire tra caratteri e i loro code point Unicode. - Il tipo
Char
è un tipo ordinale, consentendo l'uso di funzioni comeInc
eDec
, e ciclifor
con contatori di tipoChar
. - Le operazioni comuni sul tipo
Char
includono funzioni comeIsLetter
,IsDigit
,IsWhiteSpace
,ToUpper
eToLower
.
Caratteri in Object Pascal
Le variabili carattere sono definite utilizzando il tipo Char
.
Un'importante caratteristica del tipo Char è che rappresenta caratteri Unicode a doppio byte (rappresentati anche dal tipo WideChar
). Le vecchie versioni di Delphi e Object Pascal utilizzavano il tipo AnsiChar
per rappresentare caratteri a singolo byte, ma oggi si consiglia di utilizzare Char
o WideChar
per garantire la compatibilità con i caratteri Unicode.
Studieremo in dettaglio i caratteri in Unicode nelle lezioni sulle stringhe. Per ora, è sufficiente sapere che il tipo Char rappresenta un singolo carattere Unicode, che può essere una lettera, una cifra, un simbolo o un carattere di controllo.
Un carattere costante, o carattere letterale, può essere rappresentato in due modi:
-
con la notazione simbolica:
In altre parole, racchiudendo il carattere tra apici singoli, come ad esempio:
'a' 'b' '1' '#' '$' ' '
-
con la notazione numerica:
In questo caso, si utilizza il simbolo
#
seguito dal numero intero che rappresenta il carattere. Ad esempio, il carattere 'N' può essere rappresentato come#78
, poiché 78 è il code point Unicode per la lettera maiuscola 'N'.
La notazione numerica può anche essere espressa utilizzando la funzione di sistema Chr
. La funzione Chr
accetta un numero intero come argomento e restituisce il carattere corrispondente. Ad esempio, Chr(78)
restituirà il carattere 'N'.
La conversione opposta può essere fatta con la funzione Ord
. Questa funzione accetta un carattere come argomento e restituisce il suo valore numerico (code point Unicode). Ad esempio, Ord('N')
restituirà 78.
Quando ci si riferisce a caratteri speciali, come i caratteri di controllo dello standard ASCII, si utilizzerà generalmente la notazione numerica.
La seguente lista include alcuni dei caratteri speciali più comunemente utilizzati:
#8
backspace#9
tab#10
nuova riga#13
carriage return#32
spazio#27
escape
Operazioni sul Tipo Carattere
Come altri tipi ordinali, il tipo Char ha diverse operazioni predefinite che si possono applicare a variabili di questo tipo.
Per poter utilizzare queste funzionalità è necessario abilitarle riferendosi all'unità Character
in un'istruzione uses
.
Le funzioni più comuni messe a disposizione per il tipo Char sono:
IsLetter
: restituisce True se il carattere è una lettera (maiuscola o minuscola).IsDigit
: restituisce True se il carattere è una cifra (0-9).IsWhiteSpace
: restituisce True se il carattere è uno spazio bianco (spazio, tab, nuova riga, ecc.).ToUpper
: converte il carattere in maiuscolo.ToLower
: converte il carattere in minuscolo.
Proviamo queste funzioni in un semplice programma:
program EsempioChar;
uses
Character;
var
Ch: Char;
begin
Write('Inserisci un carattere: ');
ReadLn(Ch);
if IsLetter(Ch) then
WriteLn(Ch, ' è una lettera.')
else if IsDigit(Ch) then
WriteLn(Ch, ' è una cifra.')
else if IsWhiteSpace(Ch) then
WriteLn('Hai inserito uno spazio bianco.')
else
WriteLn(Ch, ' non è né una lettera né una cifra.');
WriteLn('Maiuscolo: ', ToUpper(Ch));
WriteLn('Minuscolo: ', ToLower(Ch));
end.
Un possibile output di questo programma potrebbe essere:
Inserisci un carattere: a
a è una lettera.
Maiuscolo: A
Minuscolo: a
Char
come Tipo Ordinale
Il tipo di dati Char
è un tipo ordinale, quindi si possono utilizzare le funzioni Inc
e Dec
su di esso (per ottenere il carattere successivo o precedente o spostarsi avanti di un numero dato di elementi, come abbiamo visto nella lezione sui tipi interi) e scrivere cicli for
con un contatore Char
.
Per chiarire questo concetto, consideriamo un programma di esempio in cui, partendo dal carattere A
, si stampano tutti i caratteri maiuscoli dell'alfabeto:
program EsempioCharFor;
uses
Character;
var
Ch: Char;
begin
for Ch := 'A' to 'Z' do
Write(Ch, ' ');
WriteLn;
end.
Il risultato di questo programma sarà:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Studieremo in dettaglio il ciclo for
nelle prossime lezioni sulle strutture di controllo.