Lezione 3: Un primo sguardo al linguaggio di programmazione

Sin da questa lezione introdurremo le strutture fondamentali del linguaggio di programmazione che consentiranno di risolvere in futuro moltissime problematiche.
Lezione 3: Un primo sguardo al linguaggio di programmazione

Sin da questa lezione introdurremo le strutture fondamentali del linguaggio di programmazione che consentiranno di risolvere in futuro moltissime problematiche.
Cercheremo di presentarle nel modo più semplice possibile evitando appositamente le sterili – a mio modo di vedere – tradizionali definizioni per concentrare la nostra attenzione subito su di un esempio concreto.
Per la realizzazione del nostro esempio faremo uso di alcuni nuovi controlli peraltro già citati nella precedente lezione.
Per semplicità mostro subito quale vorrei fosse il risultato finale dell’applicazione che svilupperemo in questa lezione.

Come potete notare, scegliendo da un apposito combo box un prodotto fra quelli proposti e specificata la quantità che deve essere acquistata, facendo clic sull’apposito pulsante (command button) si potrà aggiungerlo alla “lista della spesa” (list box) in basso.
Abbiamo già cominciato ad acquisire familiarità con i vari controlli, quindi provvediamo ad aggiungere sul form vuoto che compare all’avvio di Visual Basic tutti gli oggetti necessari, ovvero:

– 2 combo box
– una casella di testo (textbox)
– un pulsante (command button)
– una lista (listbox)

Facciamo clic ora sul menù Progetto quindi su Componenti ed infine spuntiamo Microsoft Windows Common Controls-2 5.0 in modo da aggiungere nella casella degli strumenti due nuovi controlli utilizzabili nella nostra applicazione (Animation e UpDown).
Quello che ci interessa in questo caso è UpDown contrassegnato nella casella degli strumenti dall’icona

UpDown è una sorta di barra di scorrimento ridotta costituita da due soli pulsanti freccia: aggiungiamo un oggetto UpDown nel progetto.
Variando le rispettive proprietà (Name) modifichiamo i nomi dei vari controlli appena aggiunti così come segue:

combo1 in prodotti
combo2 in misura
list1 in lista
text1 in quantita
command1 in aggiungi

Interveniamo su proprietà ed eventi

Variamo anche la proprietà (Name) del form cambiandola da Form1 a Principale.
Possiamo modificare altresì il titolo del form agendo sulla proprietà Caption: inseriamo la frase Lista della spesa.

Cambiamo anche l’etichetta del pulsante Aggiungi intervenendo sulla proprietà Caption e sostituendo, al posto del vecchio valore, Aggiungi.

Se si hanno dubbi su tali operazioni è consigliabile rileggere la lezione precedente.

Portiamoci ora all’interno dell’evento Form_Load facendo doppio clic sul form ove abbiamo appena inserito tutti i controlli necessari per il funzionamento della nostra piccola applicazione.
Inseriamo il codice come in figura:

Le varie istruzioni [nome].Clear consentono di eliminare il contenuto dei vari combo box e list box.
[nome].AddItem permette di aggiungere valori all’interno di combo box e list box.

Nell’esempio utilizziamo AddItem per aggiungere manualmente ciò che deve contenere ciascun combo box all’avvio dell’applicazione.

Con [nome].Text impostiamo il testo che deve essere visualizzato all’avvio dell’applicazione nei rispettivi oggetti.

Apriamo ora l’evento Aggiungi_Click associato al pulsante Aggiungi ed inseriamo il codice seguente:

lista.AddItem quantita.Text + " " & misura.Text + " " & prodotti.Text

così come è mostrato in figura:

Il lettore avrà già intuito il significato della semplice istruzione appena aggiunta: mediante l’utilizzo degli operatori + e & che hanno, in questo caso, il ruolo di concatenare più stringhe, aggiungiamo al controllo lista un nuovo valore stringa che si ottiene come combinazione dei valori associati alle rispettive proprietà text degli oggetti quantita, misura e prodotti.

Esecuzione dell’applicazione e cicli For

Possiamo provare ora ad eseguire per la prima volta l’applicazione scegliendo Avvia dal menù Esegui o premendo più semplicemente il tasto F5.

Se si sono seguite attentamente le istruzioni, dopo aver selezionato un prodotto dall’elenco ed aver specificato la quantità desiderata, sarà possibile aggiungerlo alla “lista della spesa” facendo clic sul pulsante Aggiungi.

Supponiamo di essere un pò distratti e di aggiungere lo stesso prodotto due o più volte nella nostra “lista della spesa”. Per come abbiamo strutturato l’applicazione, il programma “non si accorge” dell’errore e non ci fa notare la “distrazione”: sviluppiamo allora un algoritmo che sia in grado di verificare se un prodotto è già stato aggiunto in lista.

Sostituiamo quindi il codice precedentemente aggiunto all’interno dell’evento Aggiungi_Click con il seguente:

Dim i As Integer
' verifica che nella lista della spesa non sia
' già presente il prodotto che si vuole inserire ora
For i = 1 To lista.ListCount
If InStr(lista.List(i - 1), prodotti.Text) > 0 Then
    Beep
    MsgBox "Il prodotto selezionato è già presente in lista. Impossibile aggiungerlo.", vbExclamation, "Attenzione!"
    Exit Sub
End If
Next i
lista.AddItem quantita.Text + " " & misura.Text + " " & prodotti.Text

Cerchiamo adesso di analizzare il codice appena inserito. E’ bene ricordare che quando si scrive una applicazione esistono molteplici modi per risolvere una particolare problematica. In questo caso ho optato per l’algoritmo appena introdotto dato che racchiude in sé alcuni elementi fondamentali di programmazione.
In futuro analizzeremo tecniche di approccio al problema notevolmente più raffinate.
Il costrutto For…Next, semplice da identificare, permette di ripetere un gruppo di istruzioni per il numero di volte specificato: si tratta di “automatismi” che vengono usati molto spesso in qualunque genere di programma e che risultano di enorme utilità.
L’istruzione For…Next si presenta nella forma:

For contatore = inizio To fine
    [istruzioni]
    [istruzioni]
Next [contatore]

In questo caso utilizziamo For…Next per muoverci all’interno della “lista della spesa” e verificare la presenza di “doppioni”.
Facciamo subito un esempio concreto per comprendere meglio il procedimento utilizzato:
Supponiamo di avviare la nostra applicazione ed inseriamo un primo prodotto (ad esempio: 2 kg di mele), quindi un secondo ad esempio (2 hg di prosciutto), poi un terzo (1 kg di pere).
Inseriamo successivamente un prodotto già aggiunto (per esempio, il prosciutto): il programma entrerà nel “ciclo” For…Next ed eseguirà il controllo tante volte quanti sono i prodotti già inseriti in lista. Se il prodotto che si desidera inserire viene trovato già in lista, viene mostrato un messaggio di errore.

La proprietà ListCount, applicata ad un oggetto di tipo “lista” (una listbox) permette di contare automaticamente quanti sono gli elementi presenti nella lista stessa. Se la lista è vuota il valore restituito è ovviamente 0 (zero).

Il ciclo For…Next ha inizio – nel nostro caso – se e solo se è già presente almeno un valore nella lista della spesa ovvero nell’oggetto lista. Se la lista è vuota (cioè non è stato ancora inserito alcun elemento) il ciclo non ha luogo ed il prodotto scelto viene immediatamente aggiunto passando subito all’istruzione lista.AddItem quantita.Text + " " & misura.Text + " " & prodotti.Text
In conclusione, quello che è essenziale comprendere è che i=1 è il valore iniziale, mentre <i<lista.Listcount è il valore finale: ogni qualvolta le istruzioni all’interno del ciclo For…Next sono eseguite, il valore della variabile i (che inizialmente vale, in questo caso, 1) viene incrementato di una unità. Non appena questo raggiunge il valore di lista.ListCount il ciclo termina: ciò significa che tutti gli elementi della lista sono stati controllati.

Vediamo quindi quali sono le istruzioni di controllo utilizzate all’interno di For…Next.
E’ possibile notare immediatamente il costrutto If…Then…Else: si tratta di una struttura decisionale.
Cosa significa ciò?

Le istruzioni If…Then…Else, Instr e MsgBox

Ogni giorno noi ci troviamo a compiere delle scelte: “se facciamo una cosa allora le conseguenze sono….” è il nostro ragionamento. L’equivalente in Visual Basic è l’istruzione If…Then…Else che può essere efficacemente tradotta in questi termini: Se…Allora…Altrimenti.

Va sottolineato che Else è opzionale e può essere omesso nel caso non risulti necessario (come in questo caso).

Ricordo inoltre che il blocco di istruzioni racchiuse all’interno di If…Then…Else o, nella forma più semplice If…Then, deve essere chiuso da un’istruzione End If.
In molti casi è possibile utilizzare l’istruzione If…Then…Else in forma nidificata ovvero, se l’operazione decisionale risulta abbastanza complessa può essere necessario “annidare”, una all’interno dell’altra, più strutture If…Then…Else. Vedremo in futuro diversi esempi a riguardo.

Fra If e Then è identificabile l’istruzione:

InStr(lista.List(i - 1), prodotti.Text)

La funzione InStr( ) restituisce un valore che specifica la posizione della prima occorrenza di una stringa all’interno di un’altra.
Nel nostro caso utilizziamo appunto InStr per verificare se il prodotto selezionato dall’utente è già presente nella “lista della spesa”.
Se la funzione Instr restituisce un valore maggiore di zero significa che il prodotto selezionato è già presente in lista, allora verrà subito segnalato l’errore all’utente ed il prodotto “doppione” non sarà aggiunto nella lista.

Al verificarsi della condizione InStr(lista.List(i - 1), prodotti.Text) > 0, Visual Basic provvede ad eseguire le istruzioni poste dopo il Then:

Beep
MsgBox "Il prodotto selezionato è già presente in lista. Impossibile aggiungerlo.", vbExclamation, "Attenzione!"
Exit Sub

Beep è una istruzione che provoca il verificarsi di un evento sonoro (“bip”) mediante il dispositivo di uscita audio che può essere l’altoparlante del personal computer, oppure, ove sia correttamente installata e configurata, una scheda sonora.

MsgBox consente di mostrare un messaggio all’interno di una finestra di dialogo.
La finestra di dialogo può presentarsi in svariati modi: può essere scelta l’icona che deve essere visualizzata, il titolo della finestra di dialogo, i pulsanti che devono essere posizionati all’interno di essa.
Dedicheremo più avanti un’apposita lezione alle finestre di dialogo ed in particolare a MsgBox.
Nel caso della nostra applicazione la finestra di dialogo richiamata mediante MsgBox avrà un aspetto simile:

Exit Sub permette di uscire dalla procedura (in questo caso trattasi di una subroutine: daremo proprio nella prossima lezione una definizione esauriente di subroutione e funzioni).

Se, infatti, il prodotto selezionato viene trovato nella lista, tale prodotto non deve essere aggiunto e la procedura di verifica può essere interrotta.

Nel caso in cui Visual Basic termini l’esecuzione del ciclo For…Next senza trovare alcuna occorrenza del prodotto cercato nella lista, tale prodotto, dato che non è presente, viene aggiunto tramite l’istruzione:

lista.AddItem quantita.Text + " " & misura.Text + " " & prodotti.Text

Un’ultima nota: dato che ciascun prodotto deve essere aggiunto ovviamente in quantità non nulla all’interno della “lista della spesa”, utilizziamo ancora una volta l’istruzione If…Then…Else:

If Val(quantita.Text) = 0 Then
    Beep
    MsgBox "Impossibile inserire un prodotto in quantità nulla", vbExclamation, "Attenzione!"
    Exit Sub
End If

Ti consigliamo anche

Link copiato negli appunti