sabato 23 gennaio 2021

Ancora sui tipi primitivi e un po' sulle stringhe

Ora che abbiamo realizzato il nostro primo semplice programmino, applichiamo alcune modifiche per parlare ancora di tipi primitivi, espressioni, casting e qualche accenno sulle stringhe. Prima di procedere però diamo una piccola occhiata alla configurazione del compilatore di debug perché si scrivano sorgenti più rigorosi senza lasciarsi andare alle rischiose automazioni di Visual Basic.

Clicca sul triangolino vicino al pulsante per avviare il debug del programma e nel menu a tendina che si apre clicca su "Proprietà di debug..." oppure dal menu "Debug" scegli l'ultima voce che dice "Proprietà di debug..."


Quello che andremo a modificare sono i 3 campi option presenti nella scheda "Compilazione". Selezionare i flag on/off come nell'immagine sotto.


Si osservi che quando si modifica qualcosa appare un asterisco accanto al nome del file modificato, perchè questo anche se mostrato graficamente è in realtà un file xml che contiene la configurazione di debug del progetto. Questo significa che occorre salvare, cliccando sul dischetto piuttosto che nel menu "File" e poi "Salva elementi selezionati" che nel caso attuale è la scheda con sfondo arancione.
Cosa sono questi flag option che abbiamo modificato?
  • Option Explicit se attivo richiede che le variabili siano sempre dichiarate esplicitamente, non è quindi possibile iniziare a utilizzare un nome di variabile che non sia stato dichiarato
  • Option Strict se attiva consente di assegnare una variabile di un tipo ad un'altra di un altro tipo sempre che quella di destinazione sia capace di contenere la prima. Se ad esempio abbiamo
    Dim j As Byte
    Dim k As Integer

    k = 10
    j = k

    L'ultima istruzione causa un errore perchè un numero di tipo intero 32 bit con segno non può essere memorizzato in un intero 8 bit senza segno, senza che sussista il rischio di perdita di dati. In questi casi, consapevoli del rischio, si effettuano operazioni di conversione esplicite chiamate casting o operazione di cast
  • Option Infer se attiva abilita l'inferenza ossia la capacità di Visual Basic di indovinare il tipo di una variabile dichiarata senza che il tipo sia specificato in dichiarazione, ma basandosi sull'uso e i valori che le vengono assegnati. Assolutamente no, dichiariamo tutto ed esplicitiamo in dichiarazione l'uso che ne facciamo con il tipo di dato. Quindi va messa a off.
Le option possono essere inserite anche nel sorgente e vanno poste prima di ogni altra istruzione nel file.

Ovviamente le option specificate nel file prevalgono su quelle impostate nel file di configurazione del debug del progetto e possono essere personalizzate da sorgente a sorgente.
Modifica ora il programma precedente in modo che A e B siano di tipo double, e a B sia assegnato un valore di 20.6. Infine dichiara una variabile di tipo stringa con nome Messaggio che contenga il testo "Il risultato è " e che prima della visualizzazione sia concatenato con il risultato R, ossia nella variabile Messaggio sia presente il Messaggio suddetto seguito dal valore di R.


Applicando le modifiche al sorgente come mostrato sopra possiamo notare che abbiamo un errore dovuto al tentativo di assegnare un valore Double, in virgola mobile, ad un Integer che contiene solo numeri interi. Ma se posizioniamo il mouse sulle righe ondulate appare la lampadina a suggerire una possibile correzione.

La correzione proposta da applicare cliccando "Aggiungi cast esplicito" consiste nel rimuovere la riga rossa e sostituirla con la verde che non fa altro che utilizzare una parola chiave che converte, esplicitamente, il risultato dell'espressione passato come argomento in un valore Integer. Di questo tipo di parole chiave ne esiste una per ogni tipo primitivo.

In alternativa esiste la parola chiave CType che accetta due argomenti: il valore da convertire e il valore in cui convertirlo come mostrato nel codice corretto di seguito. Le due alternative sono identiche e producono il medesimo risultato.

Ora che gli errori sono risolti facciamo qualche osservazione sul tipo stringa. La dichiarazione è uguale a quella di qualunque altra variabile. In più è stato effettuata l'inizializzazione della variabile con un valore all'atto della dichiarazione. Sebbene un valore di default sia sempre assegnato a una variabile all'atto della dichiarazione, è sempre bene esplicitare una inizializzazione prima di utilizzare una variabile per non incorrere in errori di logica inattesi. L'inizializzazione all'atto della dichiarazione della variabile è possibile per tutti i tipi di dato. In particolare alla variabile Messaggio è stato assegnato il letterale stringa (la stringa è una sequenza o flusso di caratteri - il letterale stringa è una sequenza di caratteri racchiusi tra doppi apici) "Il risultato è ". Successivamente, alla riga 17, è stata effettuata la concatenazione di stringhe. L'operatore per concatenare le stringhe è &. Quindi l'istruzione di assegnazione valuta l'espressione alla sua destra in cui Messaggio è risolto con "Il risultato è", mentre R è risolto con 31 (ebbene si, il risultato convertito è arrotondato) e il numero 31 è convertito nella stringa "31" per cui la concatenazione finale avviene tra "Il risultato è " & "31" producendo la stringa "Il risultato è 31" che viene assegnato alla variabile Messaggio. Eseguendo il programma premendo F5 otteniamo il risultato atteso.


Bene, stiamo imparando un sacco di cose sia sul Visual Studio che su Visual Basic. Sappiamo creare un progetto, eseguirlo, configurare il debugger affinché il compilatore ci spinga a scrivere del codice migliore con le option, dichiarare delle variabili e usarle per fare dei calcoli mostrando a video il risultato fornendo informazioni aggiuntive con le stringhe, effettuare il casting esplicito fra vari tipi di dato ossia passare un valore di un certo tipo a una variabile di tipo diverso.

Nel prossimo post vedremo quali sono gli operatori disponibili in Visual Basic per le nostre espressioni, i commenti e scriveremo un codice d'esempio.