In questa lezione prendiamo in considerazione parole e simboli utilizzati nei linguaggi di programmazione per le operazioni più disparate, come scrivere qualcosa a video od effettuare un'operazione matematica.
Scendendo nel dettaglio, i termini definiti nei linguaggi di programmazione si suddividono in:
- Parole chiave
- Espressioni letterali
- Operatori e separatori
In particlare le parole chiave, proprio perché hanno un significato particolare, non possono essere utilizzate per definire i nomi di variabili o funzioni. Vedremo che anche per i simboli che definiscono gli operatori e i separatori ci sono alcune regole da rispettare.
Parole chiave
Le parole chiave risultano molto utili perché sono le parole, o meglio i termini composti da caratteri alfanumerici, riservate al linguaggio di programmazione. Il creatore del linguaggio di programmazione stabilisce a priori quali termini riservare e quale sarà la loro funzione, il compito del programmatore è quello di impararle ed usarle in maniera appropriata. Fortunatamente l'uso improprio di tali termini viene generalmente rilevato durante la fase di compilazione di un programma.
A titolo di esempio, facciamo un elenco di parole chiave del C++, molte delle quali vengono utilizzate anche da altri linguaggi di programmazione (i cosiddetti "C-like").
asm |
auto |
break |
case |
catch |
char |
class |
const |
continue |
default |
delete |
do |
double |
else |
enum |
extern |
float |
for |
friend |
goto |
if |
inline int |
long |
new |
operator |
private |
protected |
public |
register |
return |
short |
signed |
sizeof |
static |
struct |
switch |
template |
this |
throw |
try |
typedef |
union |
unsigned |
virtual |
void |
volatile |
while |
|
Si capisce come risulti quindi discutibile assegnare ad una funzione il nome new
o ad una variabile il nome int
, in quanto diventerebbe a quel punto impossibile (per il compilatore) distinguere tra l'uso di quella parola come elemento fondamentale del linguaggio di programmazione o semplice nome da utilizzare per memorizzare dati.
Inoltre, tanto per la cronaca, tra i termini citati, ad esempio, if
viene usato anche in Basic, C#, PHP, ASP, JavaScript, Java; questo per testimoniare che una volta apprese le parole chiave basta veramente poca accortezza per non usarle in maniera impropria.
Espressioni letterali
Le espressioni letterali vengono usate per rappresentare dei valori costanti ed al di là dell'uso per caratteri, stringhe, interi o reali, risultano molto utili grazie alle sequenze di escape.
Le sequenze di escape infatti permettono di rappresentare i caratteri di controllo come la tabulazione o il ritorno carrello, ma soprattutto permettono di inserire (ad esempio all'interno di una variabile stringa) il carattere apice ('
) e le virgolette ("
) che altrimenti potrebbero essere interpretate come delimitatori di costanti carattere. Per rappresentarle basta, infatti, farle precedere da una barra invertita (''o backslash), così l'apice diventa
'
e le virgolette "
.
Operatori e separatori
In combinazione con le parole chiave vengono spesso usati alcuni caratteri speciali per controllare il flusso delle operazioni che dobbiamo eseguire, questi caratteri vengono chiamati operatori e hanno delle proprietà che esporremo tra poco.
I separatori invece sono simboli di interpunzione che permettono di chiudere un'istruzione o di raggruppare degli elementi.
Riportiamo qui di seguito alcuni operatori secondo la notazione di Backus-Naur.
Operatori | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+ |
- |
* |
/ |
% |
^ |
& |
| |
~ |
! |
= |
< |
> |
+= |
-= |
*= |
/= |
%= |
^= |
&= |
|= |
<< |
>> |
<<= |
>>= |
== |
!= |
<= |
>= |
&& |
|| |
++ |
-- |
, |
->* |
-> |
.* |
:: |
() |
[] |
?: |
Separatori | ||||||
---|---|---|---|---|---|---|
( |
) |
, |
; |
: |
{ |
} |
Alcuni simboli possono essere usati indistintamente come separatori o come operatori (ad esempio la virgola), la differenza in questo caso si evince dal contesto.
Gli operatori hanno delle proprietà che ne caratterizzano l'uso semplice o composito, tali proprietà permettono infatti di interpretare in modo unico il significato di un'espressione.
Ecco le proprietà degli operatori:
- Posizione
- La posizione di un operatore rispetto ai suoi operandi (detti anche argomenti) è molto importante. Un operatore si dice prefisso se viene posto prima degli operandi, postfisso se viene posto dopo e infisso se si trova tra gli operandi.
- Arietà
- L'arietà è il numero di argomenti di un operatore; ad esempio il simbolo "
++
" (che incrementa di uno) ha un solo argomento, il simbolo "+" e le parentesi hanno, invece, due argomenti e, nel caso del C++, l'operatore "?:" (operatore condizionale, simile all'IF) è l'unico ad avere tre argomenti. - Precedenza (o priorità)
- Per precedenza si intende l'ordine con il quale verranno eseguiti gli operatori. L'esempio classico è quello dell'espressione
4 + 7 * 5
in cui non sappiamo se bisogna eseguire prima l'operazione di somma o di moltiplicazione; premesso che l'operatore di moltiplicazione ha una priorità maggiore rispetto all'addizione, il modo corretto di interpretare l'espressione sarà4 + (7 * 5)
. - Associatività
- Questa proprietà ci viene in aiuto quando eseguiamo due o più operatori aventi stessa precedenza. Un operatore può essere associativo a sinistra oppure associativo a destra, questo vuol dire che iniziamo ad eseguire gli operatori partendo rispettivamente da sinistra o da destra.