Appunti di Programmazione

Opzioni di compilazione: Explicit, Strict, Compare, Infer

Visual Studio offre molti strumenti per un scrittura più precisa, consapevole e veloce del codice, riducendo al minimo la possibilità di generare errori. Quattro di questi tools sono rappresentati dalle Opzioni di Compilazione, che è possibile impostare a livello di progetto attraverso la finestra Proprietà :

menù Progetto->Proprietà di nome_applicazione->Tab Compilazione

oppure:

click con il pulsante destro del mouse sul nome del progetto nella finestra Esplora Soluzioni, e poi scegliete l'opzione Proprietà dal menù contestuale che si presenta, quindi selezionate il Tab Compilazione.

Ecco la schemata che appare in Visual Basic 2008 Express:

Opzioni Compilazione

Option Explicit

Di default questa opzione è impostata su ON e impedisce che vengano utilizzate variabili che non sono state ESPLICITAMENTE dichiarate attraverso l'uso di Dim, Public, Private, Friend...
Nell'immagine seguente si può vedere un esempio di codice con una variabile, la "c", che non è stata dichiarata prima di essere usata, e come si può vedere l'IDE rileva l'incongruenza e prontamente la segnala.

Opzioni Compilazione Errore 1

Option Strict

Di default questa opzione è impostata su OFF, e il suo scopo è quello, se attivata, di consentire al compilatore di conoscere il tipo di appartenenza di ogni variabile e di effettuare unicamente conversioni di tipo SOLO attraverso la dichiarazione esplicita.
Nell'esempio indicato dall'immagine, la variabile "d" non può essere assegnata direttamente alla "c", in quanto sono di tipo diverso (Integer una e Long l'altra). Con Option Strict abilitato il compilatore rileva un errore e lo visualizza nella rispettiva finestra. Affinché la conversione abbia esito positivo è necessario effettuare la trasformazione in modo diretto (in questo caso è stato usato CType).

Opzioni Compilazione Errore 2

Attenzione: è lecito assegnare ad una variabile il valore di un'altra di tipo divesro, se la variabile a destra del segno di uguaglianza è di un tipo il cui intervallo di valori è compreso in quella a sinista del segno "=".
Nell'esempio riportato nell'immagine precedente se Option Strict è attivato NON si può scrivere "d=c" ma si PUÒ digitare "c=d", poiché tutti i valori che sono memorizzabili in "d" sono compresi anche in "c" pertanto l'assegnazione "c=d" non provoca perdita di dati.
Contrariamente, se disabilitiamo Option Strict, e assegnamo ad una variabile Integer il contenuto di una Double, il compilatore NON segnala alcun errore ma perdiamo la parte decimale del valore numerico contenuto nella Double (esempio nell'immagine sottostante).

Opzioni Compilazione Errore 3

Option Compare

L'opzione di default è BINARY. Questa opzione consente di scegliere se il confronto fra due stringhe deve avvenire valutando la rappresentazione BINARIA dei singoli caratteri o quella LETTERALE senza distinzione fra maiuscole e minuscole.

Nel caso in cui venga scelta l'opzione Binary si ha:

A<B<C<...Z<a<b<c<...z

Nel caso in cui venga scelta l'opzione Text si ha:

(A=a)<(B=b)<(C=c)<...(Z=z)

Il seguente codice,

Module Module1

    Sub Main()

        Dim s1 As String = "A"
        Dim s2 As String = "a"
        Dim s3 As String = "Z"

        Confronta(s1, s2)
        Confronta(s1, s3)
        Confronta(s2, s3)

        Console.ReadLine()

    End Sub

    Private Sub Confronta(ByVal stringa1 As String, ByVal stringa2 As String)

        If stringa1 < stringa2 Then Console.WriteLine("{0}" + "<" + "{1}", stringa1, stringa2)
        If stringa1 = stringa2 Then Console.WriteLine("{0}" + "=" + "{1}", stringa1, stringa2)
        If stringa1 > stringa2 Then Console.WriteLine("{0}" + ">" + "{1}", stringa1, stringa2)

    End Sub

End Module

Con Option Compare impostato a Binary genera:

A<a
A<Z
a>Z

Con Option Compare impostato a Text genera:
A=a
A<Z
a<Z

Option Infer

L'opzione di default è ON. È possibile dichiarare variabili SENZA usare la clausola AS per l'indicazione del tipo di appartenenza. Nel caso un cui Option Infer sia impostato su OFF il compilatore assegna alla variabile il tipo OBJECT; invece se Option Infer è ON il compilatore DEDUCE il tipo di appartenenza in base al valore inserito nella variabile.

Option Infer impostato su OFF:

    Dim i1 As Integer = 12

    Dim i2 = 23

i2 viene considerato dal compilatore come una variabile Object

Option Infer impostato su ON:

    Dim i1 As Integer = 12

    Dim i2 = 23

i2 viene considerato dal compilatore come una variabile Integer.