In Visual Basic vengono trattati solo due diversi types: i reference type e i value type. La principale (e fondamentale) differenza consiste nel fatto che i value type allocano una porzione di memoria direttamente riempita con il valore d’interesse, mentre i reference type contengono contengono un puntatore ad un oggetto (e quindi al relativo valore). Questa differenza è fondamentale, in quanto stravolge completamente il funzionamento dei due types. Ad esempio, infatti, quando si copia il valore di una variabile in una seconda è fondamentale conoscere il type della prima. Nel caso si trattasse di un value type, nella seconda variabile verrà copiato direttamente il valore contenuto nella prima e le due variabili lavoreranno indipendentemente. I reference type, invece, se copiati in una seconda variabile, creano una seconda copia del puntatore allo stesso oggetto. Questo implica che una modifica al valore di una delle due variabili comporta una variazione all’oggetto identificato dal puntatore e quindi qualsiasi variabile conterrà il puntatore a quell’oggetto vedrà il valore di quest’ultimo modificato.
Alcuni esempi di value type sono i seguenti:
Tutti i tipi di dati numerici
Boolean, Chare Date
Tutte le strutture, anche se i relativi membri sono reference type
Alcuni esempi di reference type sono i seguenti:
String
Tutte le matrici, anche se i relativi elementi sono value type
Per quanto riguarda la definizione di questi due type in C# e VB.net, in entrambi i linguaggi, i reference type sono dichiarati attraverso l’istruzione Class, mentre i value type vengono dichiarati attraverso l’istruzione Structure. Di seguito sono riportati i codici di esempio per dichiarare i due type descritti finora nei due linguaggi:
VB.net
C#
Reference Type
Public Class Studente_C
Public Eta As Double
Public Peso As Double
End Class
class Studente_C
{
public double Eta;
public double Peso;
}
Value Type
Public Structure Studente_S
Public Eta As Double
Public Peso As Double
End Structure
struct Studente_S
{
public double Eta;
public double Peso;
}
Come si può notare, la sintassi è molto simile. L’unica differenza è sulla compattezza del codice, che però rimane una differenza che caratterizza i due codici nel complesso.
Microsoft Visual Studio (più comunemente detto Visual Studio) è un ambiente di sviluppo integrato (IDE) sviluppato da Microsoft. Un IDE è un software che supporta i programmatori il fase di sviluppo del codice, segnalando errori di sintassi direttamente in fase di scrittura, oltre a tutta una serie di strumenti e funzionalità di supporto alla fase di sviluppo e debugging.
Nonostante generalmente gli IDE siano rivolti ad uno specifico linguaggio di programmazione, alcuni degli IDE in uso sono multilinguaggio, tra cui Eclipse e lo stesso Visual Studio. Normalmente è composto da più componenti, da cui appunto il nome integrato:
un editor di codice sorgente;
un compilatore e/o un interprete;
un tool di building automatico;
(solitamente) un debugger.
Un editor di testo serve per facilitare la scrittura di un testo. Spesso sono integrati dal suggerimento della sintassi e aiutano anche nel debug. In Visual Studio l’editor inserisce alcuni comandi automaticamente (come la chiusura di un ciclo o della creazione di una classe).
Il compilatore è un programma che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto). L’interprete, invece, è un programma che riesce ad eseguire altri programmi a partire direttamente dal relativo codice sorgente, scritto in un linguaggio di alto livello (come VB.net e C# , senza la previa compilazione dello stesso (codice oggetto), eseguendo cioè le istruzioni nel linguaggio usato traducendole di volta in volta in istruzioni in linguaggio macchina del processore.
Infine il debugger è un programma specificatamente progettato per l’analisi e l’eliminazione dei bug, ovvero errori di programmazione interni al codice. Il suo compito principale è quello di mostrare il frammento di codice macchina che genera il problema.
Visual Studio comprende tutti gli elementi finora descritti e supporta diversi linguaggi di programmazione tra cui C#, VB.net e C++. In questo blog verranno scritti diversi programmi utilizzando i primi due linguaggi elencati.
Inoltre Visual Studio fornisce nella sua interfaccia grafica anche di una casella degli strumenti, da cui è possibile selezionare e trascinare i vari controlli direttamente nel form del programma che si sta progettando, integrandolo con la possibilità di modificare velocemente, attraverso un’apposita finestra, le caratteristiche grafiche dei vari controlli introdotti.
Un linguaggio di programmazione è un linguaggio formale che specifica un insieme di istruzioni che possono essere usate per produrre dati in output. Di solito si utilizza per il controllo del comportamento di una macchina.
Esistono moltissimi linguaggi di programmazione, ognuno differente dall’altro, che possono essere suddivisi in diverse categorie di linguaggi:
imperativi: propongono comandi per la manipolazione del contenuto della memoria e le operazioni da eseguire in modo arbitrario. Ogni elemento presente lascia traccia nella memoria centrale;
funzionali: danno dei comandi che calcolano risultati partendo dai dati di ingresso e non consentono che le funzioni modifichino la memoria del computer;
dichiarativi: descrivono oggetti informatici come la struttura di un database e la sequenza delle loro dichiarazioni non è relazionata al tempo;
procedurali: permettono di generare operazioni di alto livello scomponendole in procedure o funzioni;
logici: consentono di ideare sistemi matematici logici;
orientati agli oggetti: semplificano le realizzazione di schemi predefiniti tramite i quali le problematiche standard della programmazione trovano soluzioni standardizzate.
Un’ulteriore suddivisione va fatta tra linguaggio interpretato, compilato o JIT. Nel primo caso il sorgente viene direttamente interpretato da un software. Nel secondo caso un software compilatore legge il sorgente e lo rende eseguibile. Nel terzo caso, invece, il linguaggio è compilato in modo tale da poter essere eseguito da una macchina virtuale.
Nel nostro caso consideriamo i linguaggi C# e VB.NET. Sono entrambi linguaggi orientati agli oggetti ed entrambi compilati (anche se in verità C# è un ibrido tra compilato e JIT, poiché viene compilato in run time a seconda della macchina dove viene eseguito). Sono due tra i molti linguaggi disponibili per la piattaforma .NET.
Oltre ad una differenza nelle possibilità di programmazione che offrono i due linguaggi, differiscono anche per la sintassi utilizzata:
VB.NET risulta essere più lungo rispetto all’equivalente in C#;
C# è case sensitive, mentre VB.NET no;
in C# ogni istruzione deve terminare con “;” per poter essere eseguita, cosa non necessaria in VB.NET;
in C# si usano le parentesi graffe per delimitare i blocchi di codice, mentre in VB.NET si termina un blocco con la dichiarazione End;
in C# è necessario inizializzare le variabili, mentre VB.NET le inizializza direttamente in fase di dichiarazione.
Un esempio nella differenza tra i due linguaggi la sua apprezzare nei due seguenti codice. Entrambi servono per la costruzione del famoso programma “Hello World!”, il primo però utilizza il linguaggio C#, mentre il secondo VB.NET.
Il codice in C# risulta essere:
using System.Windows.Forms;
class HelloWorldApp
{
public static void Main()
{
MessageBox.Show("Hello World");
}
}
Mentre quello in VB.NET è:
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
MessageBox.Show("Hello, world!", "Titolo esempio", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Entrambi i programmi servono per stampare il testo “Hello world!” in una Message Box
Anche i tipi di variabili, e il loro codice, differiscono a seconda del linguaggio utilizzato.
In C# esistono due generi di tipi: tipi valore e tipi riferimento. Le variabili dei tipi valore contengono direttamente i propri dati, mentre le variabili dei tipi riferimento archiviano i riferimenti ai propri dati, noti come oggetti.
I tipi valore di C# sono ulteriormente suddivisi in tipi semplici, tipi enum, tipi struct e tipi valore nullable. I tipi riferimento di C# sono ulteriormente suddivisi in tipi classe, tipi interfaccia, tipi matrice e tipi delegato.
Tipi valore
Tipi semplici
Signed Integer: sbyte, short, int,long
Unsigned Integer: byte, ushort, uint,ulong
Caratteri Unicode: char
File binario IEEE a virgola mobile: float, double
Decimale ad alta precisione a virgola mobile: decimal
Booleano: bool
Tipi enum
Tipi definiti dall’utente nel formato enum E {...}
Tipi struct
Tipi definiti dall’utente nel formato struct S {...}
Tipi valore nullable
Estensioni di tutti gli altri tipi valore con un valore null
Tipi riferimento
Tipi classe
Classe di base principale di tutti gli altri tipi: object
Stringhe Unicode: string
Tipi definiti dall’utente nel formato class C {...}
Tipi interfaccia
Tipi definiti dall’utente nel formato interface I {...}
Tipi di matrice
Unidimensionale e multidimensionale, ad esempio int[] e int[,]
Tipi delegato
Tipi definiti dall’utente nel formato delegate int D(...)
Le variabili in VB.NET sono sostanzialmente le stesse, ma differiscono per la sintassi utilizzata nella definizione della variabile. Ad esempio in VB.NET si ha Doubleinvece di double, Integerinvece di int, Single invece di float e Boolean invece di bool.
Un’altra importante differenza riguarda gli operatori nei due linguaggi. Infatti la sintassi è diversa, sopratutto per quanto riguarda gli operatori logici. Per semplicità, il confronto è riportato nella tabella qui sotto: