FROM C TO Visual Basic DEDICATO AGLI UTENTI CON BASI DI C CHE SI AFFACCIANO AL MONDO DEL VISUAL BASIC. Contiene solo basi di linguaggio FEDERICO GIUNTOLI Microsoft Visual Basic Questo capitolo ha lo scopo di definire le caratteristiche elementari del linguaggio e dell’ambiente di sviluppo integrato. Un nuovo modo di programmare C ONTENUTO 1. Cenni storici 2. Descrizione generale del linguaggio 3. Programmazione event-driven Al giorno d’oggi, la disponibilità di linguaggi e di strumenti utili al fine di creare applicazioni è ampia, vale tuttavia la pena di prendere in considerazione il Visual Basic. Arrivato alla versione 8, il Visual Basic è un semplice ma potente linguaggio di programmazione di casa Microsoft per costruire software installabili direttamente sul computer. Fino alla versione 6, il VB era considerato, da molti, un linguaggio limitato e semplicistico, tuttavia, dalla versione 7, Visual Basic è stato completamente rivisto e microsoft ha lanciato il nuovo Visual Basic .NET, la sintassi è comunque molto simile a quella del VB. Con le nuove versioni questo si è evoluto in un linguaggio più vicino alle esigenze degli sviluppatori che utilizzano la programmazione orientata agli oggetti. Con questo linguaggio è possibile creare qualsiasi tipo di applicazione. Le caratteristiche per cui questo linguaggio risulta particolarmente semplice e versatile, sono diverse: • Facilità di scrittura (non utilizza formalità di punteggiatura tipica di quasi tutti gli altri linguaggi). • Funzione di progettazione dell’interfaccia grafica completamente visuale. • Il linguaggio di tipo event-driven. I programmi Event-driven (programmazione a eventi), non hanno un inizio e una fine, bensì sono predisposti ad eseguire un loop infinito di istruzioni. Il flusso di lavoro viene dunque determinato dal verificarsi di eventi esterni. Un evento o, più semplicemente, un’azione, è un’interazione dell’utente con il programma, essa può consistere in un semplice click, digitazione in una casella, inserimento di periferiche esterne, cambiamento della risoluzione, ecc. Gli oggetti del Visual Basic sono in grado di riconoscere autonomamente gli eventi più comuni, senza che il programmatore si preoccupi di stabilire, per esempio, quando l’utente ha fatto click su un oggetto. Proprio per la sua facilità e per la potenza e la flessibilità che offre, il Visual Basic viene utilizzato sia dai programmatori più esperti, sia dai neofiti che si avvicinano per la prima volta al mondo della programmazione. L’apprendimento del VB risulta, per la sua somiglianza sintattica al C# e quindi al C++, particolarmente facilitato per gli utenti i quali hanno già familiarità con quest’ultimo. S EZIONE 2 L’ambiente Microsoft Visual Basic C ONTENUTO 1. L’ambiente di sviluppo visuale Microsoft Visual Basic 2. Da che cosa è composto e le fasi di realizzazione di un progetto Visual Basic 3. Il primo progetto L’editor per la programmazione ad oggetti in Visual Basic più famoso è Microsoft Visual Studio e non si tratta esattamente di un editor, bensì di un ambiente di sviluppo. Esistono dei software, magari scritti anch’essi in Visual Basic, ad uso commerciale o meno, per implementare utility, ma sono dei surrogati dell'ambiente di sviluppo originale. VB.NET è un linguaggio di libero utilizzo. Il relativo compilatore è scaricabile dall'area download del sito Microsoft. È altresì scaricabile una versione detta Express dell'IDE di sviluppo Visual Studio completamente gratuita. Esiste inoltre un compilatore opensource e multipiattaforma che, grazie al progetto Mono, è in grado di compilare anche su piattaforme anche diverse da Windows, come Mac OS X o Linux. Oltre alle versioni di Visual Studio, esiste anche un IDE (Integrated Development Environment) open source, SharpDevelop, che permette di creare applicazioni in modo veloce e semplice. SharpDevelop permette lo sviluppo di plugin per l'IDE stesso, applicazioni Mono, creazione di applicazione con .NET Compact Framework e le classiche applicazioni Console e Windows Form. L’ambiente di sviluppo utilizzato per realizzare questa guida è Microsoft Visual Basic 2010 Express. Iniziamo con il lato pratico. Apriamo Microsoft Visual Basic 2010, spostiamoci nel menu “File” e facciamo click su “Nuovo progetto”, scegliamo “EXE Standard” (Applicazione Windows form, nel nostro caso). Avviato il nuovo progetto, ci troviamo davanti vuna finestra, il form, che sarà la finestra della nostra futura applicazione. Nel form vengono collocati tutti gli elementi dell’interfaccia utente: caselle di testo, pulsanti, immagini, ecc. Per inserirli nel progetto basterà selezionarli dalla barra strumenti e trascinarli nel punto desiderato. Altrettanto facilmente è possibile modificare la posizione e la dimensione di un controllo semplicemente utilizzando il mouse. Come comune in ambiente windows, i comandi utili alla realizzazione di un progetto sono raggruppati in una toolbox. Nella finestra proprietà sono elencate le impostazioni dell’oggetto selezionato, una proprietà è una caratteristica dell’oggetto. A seconda dell’oggetto selezionato le proprietà visibili saranno diverse. L’ambiente di Visual Basic propone già i possibili valori elencati in una casella di riepilogo. Le fasi di realizzazione di un progetto sono le seguenti: 1. Creazione dell’interfaccia utente - definiamo il form e tutti gli oggetti che saranno utilizzati nel progetto. 2. Impostazioni delle priorità - descrizione degli oggetti componenti il progetto 3. Scrittura del codice Visual Basic - Istruiamo il programma in modo da stabilire cosa deve “accadere” al verificarsi di un dato evento. Al termine di queste fasi si potrà procedere alla creazione dell’eseguibile e del pacchetto di installazione. Vediamo adesso come realizzare il nostro semplicissimo primo progetto. 1. Apriamo un nuovo progetto e iniziamo ad inserire i controlli utilizzando la toolbox degli strumenti. 2. Selezioniamo l’oggetto “Label” e posizioniamolo nel form. 3. Troviamo l’oggetto “Button” e facciamo la stessa cosa del punto 2 La situazione dovrebbe essere all’incirca questa: 4. Selezionate adesso il bottone, spostatevi nella finestra delle proprietà e quindi nel campo “name”, modifichiamolo in “cmdbutton”. 5. Nel campo “Text” scriviamo “Calcola” 6. Ripetiamo i punti 4 e 5 per Label1 e modifichiamo nel modo seguente, name: lblrisultato, Text: ”qui comparirà il risultato 7. Finestraacciamo doppio click sul bottone, si aprirà la scheda del codice, dove troveremo quanto segue: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub End Class Per versioni VB dalla 7 in poi. Public Class Form1 Private Sub cmdcalcola_Click() End Sub End Class Per vecchie versioni di VB Ogni comando inserito all’interno del sub appena creato verrà lanciato non appena si farà click sul pulsante 8. Spostiamoci all’interno del nuovo sub e scriviamo lblrisultato.text = 2 + 2 Analogamente alla sintassi del C#, l’operazione di assegnazione viene effettuata tramite l’operatore “=” 9. Eseguiamo il programma con il tasto “Run” o premendo F5 Se tutto ha funzionato, il programma dovrebbe avviarsi e, cliccando sul pulsante, dovrebbe comparire la somma di 2+2. C APITOLO 2 Allora iniziamo a programmare! - Le basi Dopo aver affrontato il primo capitolo e aver preso mano con il linguaggio e il relativo ambiente di sviluppo, questo capitolo fornisce gli elementi per applicare le basi di programmazione che si conoscono al Visual Basic S EZIONE 1 Le variabili e le costanti C ONTENUTO 1. I tipi di dato 2. Dichiarazione di una variabile 3. Dichiarazione di una costante 4. Pratica: Area del cerchio Così come in C# (e in tutti gli altri linguaggi) i dati possono essere di vario tipo, ognuno dei quali rappresenta valori diversi e occupa una diversa dimensione in memoria: Tipo di dato Dimension Intervallo e in memoria Boolean 2 byte true (-1) o False (0) Integer (intero) 2 byte Da -32.768 a 32.767 Long (intero lungo) 4 byte Da -2.147.483.648 a 2.147.483.647 Single (virgola mobile a precisione semplice) 4 byte Da -3,402823E38 a -1,401298E-45 per valori negativi;da 1,401298E-45 a 3,402823E38 per valori positivi Double (virgola mobile a precisione doppia) 8 byte Da -1,79769313486232E308 a -4,94065645841247E-324 per valori negativi; da 4,94065645841247E-324 a 1,79769313486232E308 per valori positivi String 10 byte + lunghezza stringa (10 byte + numero caratteri) Da 0 a circa 2 miliardi Vediamo adesso la differenza tra la dichiarazione di una costante e quella di una variabile. Le costanti vengono dichiarate nel seguente modo: [Public | Private] Const <NomeConstante> As <Tipo> = valore • Public e Private restringono il campo d’azione delle costanti definite, il primo stabilisce che i dati presenti nel form possono essere condivise anche con altri progetti, mentre la seconda limita l’uso dei dati al solo progetto in costruzione. • Const è la parola chiave • <NomeConstante> è il nome che si desidera assegnare alla costante • As è un’altra parola chiave, indica che <Tipo> è il tipo con cui viene dichiarata la constante • <Tipo>, come appena detto, identifica il tipo assegnato alla constante • = valore assegna il valore della constante esempi di constanti sono: Const Massimo As Integer = 10 Const pigreco As Double = 3,14 Vediamo adesso come dichiarare una variabile Dim <NomeVariabile> As <Tipo> • Dim è l’istruzione di dichiarazione esplicita che consente di assegnare alle variabili un identificatore e un tipo • <NomeVariabile> è il nome da assegnare alla variabile • As, così come <Tipo>, hanno la stessa funzione vista per le constanti Anche per le variabili è possibile assegnare un valore iniziale, sempre con l’operatore “ = “ Esempi: Dim Risultato As Integer Dim I As Integer = 1 Dim cognome As String Dim nome As String *20 Così come accadeva in C# con il tipo string, anche qui esso può sì avere una lunghezza fissa dichiarata (*20 indica che la variabile nome può contenere massimo 20 caratteri), ma può avere anche lunghezza variabile (come accade nel terzo esempio), basta non dichiarare la dimensione Vediamo adesso come realizzare un semplice programma che utilizzi sia variabili che constanti. 1. Apriamo un nuovo progetto e inseriamo nel form il controllo “TextBox” 2. Inseriamo adesso un bottone comune e una Label 3. Applichiamo le seguenti proprietà, Bottone: Name: cmdbutton, Text: Calcola; Label: Name: lblrisultato, Text: Risultato 4. Spostiamoci all’interno della scheda del codice, dentro il class, e andiamo a dichiarare le seguenti variabili e constanti: Const pigreco As Double = 3.14 Dim raggio As Double Dim Risultato As Double 5. Torniamo nella finestra del form, facciamo doppio click sul bottone, ecco che verremo spostati nuovamente nella scheda del codice, all’interno del sub 6. Qui andremo a scrivere: Raggio = TextBox1.Text Risultato = pigreco * raggio * raggio lblrisultato.text = Risultato 7. Il codice completo dovrebbe essere simile a questo: Public Class Form1 Const pigreco As Double = 3.14 Dim raggio As Double Dim Risultato As Double Private Sub cmdcalcola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcalcola.Click raggio = TextBox1.Text Risultato = pigreco * raggio * raggio lblrisultato.text = Risultato End Sub 8. Eseguite il programma, inserendo il valore del raggio nella casella di testo e premendo “Calcola”, dovrebbe comparire l’area del cerchio. S EZIONE 2 Procedure e funzioni C ONTENUTO 1. Procedure 2. Funzioni 3. Applicazioni e differenze 4. Esempio: Somma e sottrazione Come abbiamo già visto studiando il linguaggio C, nella scrittura di un programma possiamo usufruire di un potente strumento le funzioni. Le funzioni, o routine, ci permettono dunque di dividere il programma in sottoprogrammi. Rispetto al C la gestione delle funzioni è molto simile e la sintassi semplificata. Vediamo adesso alcune precisazioni. In VB abbiamo la distinzione tra procedure e funzioni. La differenza fondamentale tra procedure e funzioni è che le seconde possono restituire dei valori, mentre le procedure no. Di seguito, la dichiarazione di una procedura. Private Sub <nome>([Parametro As <Tipo>, ...]) ... End Sub •Private, indica il campo d’azione dei dati. •Sub è l’abbreviazione di “subroutine”, inizia la dichiarazione della procedura •nome: è il nome con cui vogliamo identificare la procedura per una successiva chiamata. • Dentro le parentesi tonde dobbiamo inserire il nome delle variabili con i relativi tipi, esse rispettano le regole studiate nel C, in chiamata dovremmo perciò rispettare gli stessi accorgimenti. Potremo inoltre decidere se passare il parametro per valore (anteponendo byval) o per indirizzo (byref). • end sub, è una parola chiave del VB che segna la fine della procedura. Vediamo adesso come gestire la chiamata ad una procedura: <nome>([Parametro As <Tipo>, ...]) La chiamata è estremamente semplice, basta fare riferimento al nome e includere tra parentesi i parametri da passare al parametro. Vediamo adesso la dichiarazione di una funzione. Private Function <nome>([Parametro As <Tipo>, ...]) [As <Tipo>] ... End Function •Private, indica il campo d’azione dei dati. • Fuction, inizia la dichiarazione della funzione •nome: è il nome con cui vogliamo identificare la funzione per una successiva chiamata. •Come con le procedure, passiamo, all’interno delle parentesi tonde, i parametri. •As <Tipo>: esso indica il tipo di dato restituito dalla funzione. Proviamo a mettere in pratica quanto appreso. 1. Apriamo un nuovo progetto 2. Inseriamo il necessario: tre label, due TextBox, due bottoni e modifichiamo come di seguito CAMPO \OGGETTO NOME .TEXT (O CAPTION) Label1 -invariato- Variabile A Label2 -invariato- Variabile B Label3 lblrisultato Risultato TexBox1 txtVarA -vuoto- TexBox2 txtVarA -vuoto- Botton1 cmdsomma Somma Botton2 cmdsottrazione Sottrazione Otterrete un risultato simile a questo Adesso andremo ad effettuare la somma mediante un parametro e la sottrazione mediante una funzione. 3. Dichiariamo due variabili globali: A e B come interi 4. Andiamo a scrivere la procedura somma, ricordiamo che una procedura non restituisce valori. Private Sub somma(ByVal A As Integer, ByVal B As Integer) Dim risultato As Integer risultato = Val(A) + Val(B) lblrisultato.Text = risultato End Sub Analizziamo: •Abbiamo dichiarato la procedura somma, la quale lavorerà con il valore (byval) dei parametri A e B). •Abbiamo dichiarato il risultato come un intero e abbiamo assegnato ad esso l’addizione tra A e B. •Poiché non è possibile far tornare un valore, la visualizzazione del risultato deve avvenire all’interno della procedura. 5. Scriviamo la funzione sottrazione, la quale può restituire valori. Private Function sottrazione(ByVal A As Integer, ByVal B As Integer) As Integer Dim risultato As Integer risultato = Val(A) - Val(B) Return risultato End Function Analizziamo: • Abbiamo dichiarato la funzione somma, la quale lavorerà con il valore (byval) dei parametri A e B). Questa funzione restituirà un valore intero. •Abbiamo dichiarato il risultato come un intero e abbiamo assegnato ad esso la differenza tra A e B. •Return è la parola chiave che anticipa il valore di ritorno. 6. Creiamo gli eventi click su cmdsomma e click su cmdsottrazione. 7. Assegnamo alle variabili i TextBox. 8. Effettuiamo la chiamata al sottoprogramma relativo. Risultato finale: Public Class Form1 Dim A As Integer Dim B As Integer Private Sub cmdsomma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdsomma.Click A = txtVarA.Text B = txtVarB.Text somma(A, B) End Sub Private Sub cmdsottrazione_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdsottrazione.Click A = txtVarA.Text B = txtVarB.Text Dim risultato As Integer risultato = sottrazione(A, B) lblrisultato.Text = risultato End Sub Private Sub somma(ByVal A As Integer, ByVal B As Integer) Dim risultato As Integer risultato = Val(A) + Val(B) lblrisultato.Text = risultato End Sub Private Function sottrazione(ByVal A As Integer, ByVal B As Integer) As Integer Dim risultato As Integer risultato = Val(A) - Val(B) Return risultato End Function End Class //A seconda della versione utilizzata, il codice potrebbe risultare diverso. S EZIONE 3 Funzioni iterative C ONTENUTO 1. Ciclo For ... Next 2. Ciclo Do ... Loop 3. Pratica: Fattoriale Vediamo come mandare in esecuzione dei cicli con il VB. Il ciclo più utilizzato è sicuramente il For .. Next /*anche se alla prof non piace :’) */ Vediamone la sintassi: For <Contatore> = Inizio To Fine [Step Incremento] ... Next [<Contatore>] •For: è la parola chiave che apre il ciclo •<Contatore> : è una variabile contenente valori numerici •Inizio To Fine: Inizio è il valore che assumerà subito il contatore, Fine è il valore che dovrà raggiungere. •La parola chiave Step è facoltativa, se non viene specificata, l’incremento di default sarà +1 •Next <Contatore> chiude il ciclo Il Do ... Loop può presentarsi in due forme: Do While Condizione ... Loop Do apre il ciclo. •While Condizione è la condizione da verificare per entrare nel ciclo. •Loop termina il ciclo. Questa struttura prevede per prima cosa la verifica della condizione. Il ciclo entrerà in esecuzione finché la condizione risulterà vera. Do ... Loop While Condizione Do: Apre il ciclo. Loop: segna la fine del ciclo. While Condizione è la condizione da verificare per entrare nel ciclo. Questa struttura permette di eseguire le istruzioni e di verificare la condizione al termine di ciascuna esecuzione. Scriviamo adesso un semplice programma con i vari cicli, così da evidenziarne le differenze. Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcalcola.Click Dim A As Integer A = txtVarA.Text Dim Risultato As Integer Risultato = 1 For i As Integer = 0 To A - 1 Risultato = Risultato * (A - i) Next lblrisultato.Text = Risultato End Sub End Class ‘For … Next Public Class Form1 >>>>>>Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcalcola.Click Dim A As Integer, i As Integer, Risultato As Integer A = txtVarA.Text Risultato = 1 i = 0 Do While i < A Risultato = Risultato * (A - i) i = i + 1 Loop lblrisultato.Text = Risultato End Sub End Class ‘Do ... Loop