I cambiamenti nei tipi di dato e nelle dichiarazioni

Uno dei cambiamenti più evidenti in Visual Basic .NET, rispetto alle versioni precedenti, riguarda i tipi di dato. Tale modifica si è resa necessaria per rendere i tipi di dato di VB .NET formalmente uguali a quelli utilizzati in C# e in C++ (gli altri due linguaggi “principi” di Visual Studio .NET).
Il tipo di dato Long è stato sostituito da Integer, che quindi ora è usato per la rappresentazione di numeri interi a 32 bit; il vecchio Integer di VB6 e delle versioni precedenti, usato per i numeri a 16 bit, è diventato Short. In VB .NET il tipo Long serve per rappresentare i numeri a 64 bit. Comunque, per dichiarare questi tipi di dato, è possibile utilizzare anche i nomi con cui sono identificati all’interno del framework: invece di Short di può usareInt16, invece di Integer Int32 e al posto di Long Int64.
Riassumendo, ad esempio:

Visual Basic 6 Visual Basic .NET
Dim I As Integer Dim I As Short
oppure
Dim I As Int16
Dim L As Long Dim L As Integer
oppure
Dim L As Int32

Relativamente alle espressioni booleane, bisogna evidenziare una importante novità. Utilizzando l’operatore Or tra due espressioni logiche: ad esempio A > 0 Or B = 5, esse vengono sempre controllate entrambe, anche se, in realtà, nel caso in cui A > 0 sia vera, non sarebbe necessario fare il controllo sulla B, dal momento che il risultato di tutta l’espressione sarà comunque true.

Per sopperire a tale mancanza, è stato introdotto un nuovo operatore, OrElse: utilizzando quest’ultimo, A > 0 OrElse B = 5, se la prima condizione è vera la seconda non viene valutata. Analogamente, per quanto riguarda l’And, l’operatore AndAlso evita il controllo sulla seconda condizione se la prima è falsa, poiché il risultato finale sarà sempre False. Le stringhe a lunghezza fissa non sono più supportate nel linguaggio. Non è quindi più possibile scrivere una dichiarazione come la seguente:

Dim S As String * 10

La nuova versione del linguaggio introduce delle novità anche per quanto riguarda l’area di validità delle variabili: ora le variabili sono locali rispetto alla porzione di codice in cui vengono definite. Se, ad esempio, si dichiara una variabile all’interno di un ciclo For, essa non sarà più utilizzabile una volta usciti dal ciclo stesso. Si verifica quindi la seguente situazione:

Dim I As Short
For I = 0 To 10
Dim N As Integer
….
Next I

MsgBox(“Il valore di N è: ” & N & “.”) ‘Errato: la variabile N non è più utilizzabile.

Il tipo Currency è stato eliminato; al suo posto è possibile usare il nuovo tipo Decimal per i calcoli monetari e per calcoli a virgola fissa in cui la precisione riveste un’importanza particolare.

Il tipo di dati Variant non esiste più: al suo posto è necessario usare il tipo Object, che comunque conserva tutte le caratteristiche del Variant, quindi può essere utilizzato per memorizzare qualsiasi tipo di dato primitivo, nonché Empty, Null, Nothing, oppure come puntatore ad un oggetto.

Anche la gestione degli array è cambiata: ora gli array possono essere solo a base 0; non è quindi più possibile specificarne il limite inferiore. Un effetto collaterale di questa modifica è che l’istruzione Option Base 1 non esiste più.

I tipi definiti dall’utente ora non si creano più con il costrutto Type; al suo posto è stata introdotta la parola chiave Structure. Ogni elemento all’interno della struttura deve essere dichiarato con Dim, Event, Friend, Private, o Public (ritorneremo su queste parole chiave più avanti, quando parleremo delle classi in VB .NET).
Ad esempio:

Visual Basic 6 Visual Basic .NET
Public Type IMPIEGATO
Nome As String
Matricola As String
End Type
Public Structure IMPIEGATO
Dim Nome As String
Dim Matricola As String
End Structure

Una novità significativa introdotta dalle Structure di VB .NET è la possibilità di definire Sub, Function e Property all’interno di una struttura. Riprendendo l’esempio sopra riportato, è possibile aggiungere una Sub alla struttura IMPIEGATO che visualizzi una finestra contente le informazioni contenute nella struttura stessa:

Public Structure IMPIEGATO
Dim Nome As String
Dim Matricola As String
Sub Informazioni()
‘Visualizza una MessageBox che contiene le informazioni contenute nella struttura.
MsgBox(“Nome dell’impiegato: ” & Nome & vbCrLf & “Matricola: ” & Matricola, MsgBoxStyle.Information)
End Sub
End Structure

Un utilizzo di questa struttura è il seguente:

Dim I As IMPIEGATO
With I
.Nome = “Marco Minerva”
.Matricola = “232440″
.Informazioni()
‘Richiama la Sub definita nella struttura.
End With

Altre novità importanti sono state introdotte da VB .NET relativamente alla dichiarazione di costantivariabiliprocedure e funzioni. Innanzi tutto, è finalmente possibile inizializzare una variabile nella sua dichiarazione. Ad esempio, sono valide le dichiarazioni seguenti:

Dim Punti As Short = 10
Dim Nome As String = “Pippo”

Nelle precedenti versioni di Visual Basic, se non diversamente specificato, i parametri di una funzione o di una procedura venivano passati per riferimento; in pratica, la parola chiave ByRef era predefinita. In VB .NET, invece, per default gli argomenti sono passati ad una funzione per valore (ByVal); utilizzando l’editor di Visual Studio .NET, se nella dichiarazione di una Sub o di una Function non si specifica altrimenti, davanti ai nomi degli argomenti verrà automaticamente aggiunto ByVal.

Infine, se un parametro di una funzione è dichiarato come Optional, è obbligatorio specificare il valore che tale parametro assumerà nel caso in cui non venga specificato quando si richiama la funzione stessa.
Ad esempio:

Visual Basic 6 Visual Basic .NET
Private Sub DoSomething(frm As Form, Optional I As Integer)

End Sub
Private Sub DoSomething(ByVal frm As Form, Optional ByVal I As Short = -1)

End Sub

Un’ultima nota riguarda il modo di restituire un valore di una Function. Nelle precedenti versioni di Visual Basic, per restituire un valore era necessario scrivere <nome funzione> = valore. In VB .NET, oltre a questo metodo, è stato aggiunta la parola chiave Return, analoga a quanto già esistente in C e in Java. Queste due funzioni sono quindi equivalenti:

Private Function
Areatriangolo(ByVal Base As Double, ByVal Altezza As Double) As Double
Areatriangolo = (Base * Altezza) / 2
End Function

Private Function Areatriangolo(ByVal Base As Double, ByVal Altezza
As Double) As Double     Return (Base * Altezza) / 2
End Function

L’unica differenza è che, eseguendo l’istruzione Return, si uscirà automaticamente della funzione. In altre parole, l’istruzione Return dell’esempio precedente equivale a:

Areatriangolo = (Base * Altezza) / 2
Exit Function

Dopo questa panoramica sui principali cambiamenti nei tipi di dato e nelle dichiarazioni, nella prossima lezione ci occuperemo del concetto di classe, già presente nelle versioni precedenti di Visual Basic, ma che in VB .NET assume un’importanza centrale, essendo alla base della programmazione orientata agli oggetti.

Both comments and pings are currently closed.

Comments are closed.