mercoledì 27 gennaio 2021

Operatori aritmetici di Visual Basic e commenti

Ora che stiamo iniziando a scrivere i primi programmi in Visual Basic, una attività importante è la documentazione che parte proprio dai sorgenti con i commenti. I commenti sono dei testi che vengono ignorati dal compilatore ma permettono al programmatore di tenere traccia nel codice di note ed osservazioni utili a ricordare cosa fa un codice, il perché di certe scelte o di come utilizzare il codice in cui si trova la nota.


I commenti nel codice sorgente, come mostra l'immagine sopra, possono iniziare con il comando REM, oppure con un apice singolo. Il resto della riga dall'apice o dal REM in poi è interpretata tutta come commento. Si ricordi anche che Visual Basic accetta una istruzione per riga. E' possibile spezzare una istruzione molto lunga con il carattere di sottolineatura _.

Esiste poi un altro tipo di commento ottenibile digitando tre volte consecutive l'apice singolo e di cui parleremo più avanti. 

Passiamo ora ad una carrellata sugli operatori. Tra gli operatori aritmetici abbiamo +, -, *, / che com'è facile intuire sono somma, sottrazione, moltiplicazione e divisione. Da notare che + e - possono anche precedere un numero o una variabile per indicarne il segno. Abbiamo poi \, Mod e ^ che sono rispettivamente quoziente, resto e elevamento a potenza.

Per le stringhe abbiamo gli operatori & e +, entrambi utilizzati per la concatenazione di stringhe. Personalmente sconsiglio di utilizzare il + per la concatenazione, anche perché se option strinct è attivo le conversioni implicite possono scatenare errori evidenziati con le ondine rosse nell'IDE e se disattivo possono verificarsi risultati inattesi. Sempre meglio tenere il + per le somme e utilizzare la & per le concatenazioni. In più quando nelle concatenazioni sono presenti anche delle espressioni meglio racchiuderle fra parentesi in modo da rendere il codice più leggibile e garantirsi l'esecuzione delle espressioni prima della trasformazione in stringa e concatenazione. Vediamo un esempio di programma che mostra questi operatori in funzione:

Sub Main(args As String())
    Dim val1 As Integer = 15
    Dim val2 As Integer = 32

    Console.WriteLine("{0} + -{1} = {2}", val1, val2, val1 + -val2)

    Console.WriteLine("{0} + {1} = {2}", val1, val2, val1 + val2)
    Console.WriteLine("{0} - {1} = {2}", val1, val2, val1 - val2)
    Console.WriteLine("{0} * {1} = {2}", val1, val2, val1 * val2)
    Console.WriteLine("{0} / {1} = {2}", val1, val2, val1 / val2)

    Console.WriteLine("{0} \ {1} = {2}", val1, val2, val1 \ val2)
    Console.WriteLine("{0} Mod {1} = {2}", val1, val2, val1 Mod val2)
    Console.WriteLine("{0} ^ 3 = {1}", val1, val1 ^ 3)
End Sub

L'output prodotto da questo programma sarà


Si osservi come il compilatore capisce nella prima operazione che il - è operatore unario da applicare alla variabile, che la divisione \ produce un troncamento del risultato alla parte intera.

Osserviamo anche come è stata utilizzata l'istruzione Console.Writeline. Questa routine, nella sua accezione classica, accetta una stringa di formato e un elenco di parametri separati da virgola che saranno utilizzati con i segnaposto presenti nella stringa di formato stessa. I segnaposto sono degli indici numerici racchiusi tra parentesi graffe. In particolare ogni occorrenza di {0} sarà sostituita con il primo argomento dopo la stringa di formato, {1} con il secondo argomento, {2} con il terzo e così via.

Gli operatori non hanno tutti la stessa precedenza, alcuni vengono risolti prima come la moltiplicazione e la divisione e altri dopo come la somma e la sottrazione. In caso di parità di precedenza subentra l'associatività ossia se hanno associatività a sinistra verà risolto prima l'operatore a sinistre e solo dopo quello a destra. Ad esempio: 10/5/2 vedrà eseguita prima 10/5 quindi il risultato2/2. Il consiglio comunque è di utilizzare le parentesi, perché una dimenticanza può sempre capitare e comunque esplicitare il calcolo per mezzo delle parentesi rende più chiaro il codice scritto specie se iniziamo a mescolare operatori di confronto, booleani e aritmetici e bit a bit. L'unica cosa da ricordare è che a meno di parentesi, gli operatori aritmetici sono risolti per primi, quindi quelli di confronto poi quelli logici. 

Nel prossimo post vedremo gli operatori di confronto e quelli logici.