Occhio agli errori
Quando lavoriamo su un programma può presentarsi la necessità di fare delle operazioni tra tipi di variabili differenti.
Questo tipo di operazioni possono presentare dei rischi: per esempio assegnando ad una variabile numerica di tipo short (i cui limiti di memorizzazione vanno da -32768 a +32767) il risultato della somma di due variabili di tipo integer che hanno una capacità di memorizzazione molto più ampia, si può ottenere un risultato sbagliato:
dim a as integer dim b as integer dim c as short 'limite: da -32768 a +32767 a = 32766 b= 1 c = a + b print c 'viene stampato a video il valore corretto 32767 a = 32767 b= 1 c = a + b print c 'viene stampato a video il valore errato -32768
In questo caso il compilatore FreeBASIC non ci avverte neanche del problema. Quindi occorre assolutamente stare attenti.
Modalità di conversione
Esistono due modalità di conversione di tipo:
- conversione implicita (coercion)
- conversione esplicita (conversion)
Modalità implicita
In una espressione con più argomenti, o nelle procedure (nel passaggio degli argomenti o nel ritorno dei risultati), il compilatore FreeBASIC provvede ad operare una serie di conversioni automatiche di tipo di dato secondo i seguenti criteri:
- tutte le variabili numeriche con capacità più piccola di quella del tipo integer vengono convertite nel tipo integer;
- più in generale, le variabili numeriche vengono convertite nello stesso tipo di dato della variabile con più capacità (vedi Tabella dei limiti dei tipi di dato standard);
- se in una espressione compaiono variabili di tipo single, queste vengono convertite in double.
Modalità esplicita
Come programmatori possiamo anche forzare la conversione di tipo chiedendo esplicitamente al compilatore FreeBASIC – per esempio con l’istruzione cast – di operare una determinata conversione.
Oltre all’istruzione cast, esistono diversi operatori e procedure di conversione di tipi di dato che sono predefinite in FreeBASIC. Per esempio:
'funzione str 'converte una espressione numerica in una stringa dim a as integer dim b as integer dim tot as string a = 3 b = 2 tot = str(a + b) print tot
oppure:
'funzione val 'converte una stringa in un valore numerico a virgola mobile (double) dim a as string dim b as integer a = "1" b = 4 + val(a) print b 'stampa a video 5
A rileggerci nel prossimo articolo dove parleremo delle costanti.



