![]() | LEZIONE 6: | Le Procedure |
Amos offre la possibilita di dare un tocco di classe ai propri
listati con l'utilizzo delle procedure, cioè, come già
accennato nella lezione precedente, poter creare delle parti
indipendenti dal programma main.
Esse accelerano il compito di debugging e danno un tocco di professionalita.
Procedure nome[variabili]
Tutto il listato compreso tra questo comando ed End Proc è
considerato interno alla procedura. Le variabili interne sono autonome il
loro valore è tale solo all'interno della procedura in cui sono state
assegnate.
E` possibile però metterle in comune con tutto il listato (altre
procedure comprese) col comando Global... all'inizio del main
program, oppure si può far circolare una variabile tra l'esterno
e questa procedura, mettendola tra parentesi quadre nel comando
Procedure per dar modo ad essa di entrare e nel comando End
Proc per darle modo di uscire e rendersi disponidile per l'esterno.
End Proc[parametro]
Chiude la procedura attuale e passa nel programma chiamante il parametro
usato poi con Param[]
Global variabili
Mette in comune le variabili elencate dopo Global tra tutte le
procedure e il listato esterno in modo da poterle modificare in ogni
parte del listato.
Nome-procedura[parametri]
Richiama la suddetta procedura e trasferisce i parametri dal programma
attuale nella peocedura nome-procedura, e i parametri possono avere
nomi diversi ma devono essere dello stesso tipo (Stringa/stringa, numero
intero/numero intero, numero reale/numero reale).
Param[]
Richiama nel programma chiamate il parametro specifico in End Proc.
Es.:
Procedure PRELEVANOME[MAX]
Print "IL NOME OTTIMIZZATO A"+Str$(MAX)+" LETTERE e"+Param$
Stampa il parametro stringa, ottimizzato al numero di lettere inpostato nella chiamata di procedura.
Pop Proc[]
Fa uscire immediatamente dalla procedura corrente, e anch'essa come
End Proc, accetta un parametro di uscita.
Shared variabili
Deve essere la prima istruzione all'interno di una procedura e isolata
su una riga.
Permette di condividere le variabili con l'esterno (main) e la procedura corrente.
-STRUTTURE CICLICHE E BLOCCHI DECISIONALI-
In Amos Basic non avrete più problemi nel creare cicli
complessi, basta pensare che l'editor stesso pensa ad effettuare
l'indentazione!!!
Dunque le nidificazioni più complesse diventeranno subito un gioco da
ragazzi. Sono previsti anche comandi un pò particolari che ti
semplificano il compito: si puo disattivare, ed attivare, in qualsiasi
momento l'effetto dei tasti Ctrl+C per l'interruzione del programma
in esecuzione.
Break On/Off
Attiva o disattiva la combinazione di tasti Ctrl+C che serve per
interrompere un programma durante la sua esecuzione. Da usare con cautela
perche se messo in Off e il vostro programma è dotato di un ciclo
continuo, non ci sarà più via d'uscita dal programma e dovrete
resettare, quindi se siete ancora nella fase di debug/testing del Vs
programma, metteteci una Rem davanti e toglietela solo alla fine e
soprattutto salvate il vostro lavoro.
Do/.../Loop
Segue all'infinito il loop di istruzioni finchè non trova Exit
o Exit If.
Consigliabile per la parte principale del programma.
Edit
Torna in ambiente editor.
End
Interrompe l'esecuzione di un programma.
Every n Gosub label
Salta ogni n cinquantesimi di secondo alla label specificata con
gosub; deve essere seguita da Wait VBL e da Every ON.
Every n Proc name
Salta ogni n cinquantesimi di secondo alla label specificata con
Proc deve essere seguita da Wait VBL e da Every ON.
Every On/Off
Attiva o disattiva il contatore automatico richiamato in un comando
Every; deve essere ripetuta ad ogni ripetizione del ciclo.
Exit If...[,n]
Esce da n cicli, o dal corrente, se si verifica quella condizione.
Exit [n]
Esci subito da n struttore cicliche.
For i=f To l [Step inc]...Next i
Incrementa la variabile i che parte con valore f e termina con
valore l. Questo comando rappresenta un ciclo, infatti ogni volta che
si incontra con Next ritorna al For incrementando i,
il tutto fino a che i non raggiunge il valore l.
Step dà il passo di incremento o di decremento.
Gosub label/n ...Return
Istruzione simile al Goto; con il comando Return si torna all'istruzione
che segue l'ultimo Gosub.
Goto label/n riga
Trasferisce il controllo del programma ad un'altra sezione (label o riga
numerata); si possono utilizzare le operazioni delle stringhe.
Es.:
Goto "PR"+STR$(2)
If../../Else If/../End If/End If
Se si verifica la prima condizione, esegue la prima lista di istruzioni,
altrimenti esegue la seconda (si può usare anche con Else
semplice); la condizione se è espressa da comandi che ritornano
valori (per es, Upper$, Inkey$) deve essere racchiusa da tante
parentesi quante ne bastano per rendere la condizione unica.
Es.:
If ((CONDIZIONE) Or (CONDIZIONE))
If espr. Then istr1 : Else istr2
Se si verifica la condizione espressa in espr allora esegue istr1, altrimenti esegue istr2.
If .../istr1... [/Else/istr2...] /End If
Se si verifica la condizione nel primo If allora esegue istr1 altrimenti esegue istr2.
On variabile Gosub label/n ,...
Salta ad una label (o una riga numerata) della lista a seconda del valore
della variabile.
On variabile Goto label/n ,,...
Salta ad una label (o riga numerata) della lista a seconda del valore della
variabile.
On variabile Proc proc1,...
Salta ad una procedura della lista a seconda del valore della variabile.
Pop
Cancella dallo stack l'ultimo indirizzo di ritorno del Gosub.
Repeat /istr.../Until condizione
Ripete la lista di istruzioni finche è verificata la condizione.
(Esegue il loop almeno una volta.)
While condizione/istr...Wend
Finchè la condizione è vera esegue il loop di istruzioni. (Può non eseguire il loop nemmeno una volta.)
Si è parlato di Label ma cosa sono in realta?
Una label è semplicemente un punto nel programma da noi definito dove
sistemare ad esempio una routine a noi utile. Si creano semplicemente
mettendo, all'inizio di una certa linea di programma un nome seguito dai
due punti. Per esempio se mi serve una routine di calcolo dove mandare ogni
volta il programma, basta che all'inizio della routine vi definisco la mia
label che potrei chiamare CALCOLO:. Per mandare in quel punto l'esecuzione del programma sarà sufficiente scrivere Goto CALCOLO.
Le label sono definibili anche all'interno delle procedure, ma in questo
caso, sono utilizzabili solo dalle stesse che le contengono, come pure, le
linee Data.
-GLI ERRORI ED I POSSIBILI RIMEDI-
Se in altri linguaggi la gestione degli errori non era l'argomento più semplice, con Amos si può ben dire il contrario. Infatti il suo autore ha previsto numerosi comandi che semplificano la vita al novellino quanto all'abile programmatore.
=Errm
Ritorna il numero di errore che si è generato dal programma o dall'utente.
On Error Goto label
Ogni volta che sarà generato un errore il controllo del programma
sarà trasferito alla label specificata.
On Error proc1,proc2...procn
Nel caso sia generato un errore, trasferisce il controllo del programma
alla procedura specificata.
Resume
Dopo la generazione di un errore, ripristina l'esecuzione del programma
dall'istruzione che ha generato quell'errore; naturalmente prima di
richiamarla si deve eliminare la causa dell'errore.
Resume Label
Dopo la generazione dell'errore, questo comando fa riprendere l'esecuzione
del programma dalla label specificata dal comando Resume Label nome.
Resume Label nome
Dopo la generazione di un errore, ripristina l'esecuzione del programma
dalla label specificata non appena si incontrerà un comando
Resume Label.
N.B.: Il comando Resume Label nome deve essere inserito
subito dopo i comandi On Error Goto label o On Error Proc.
Bene! La sesta lezione è terminata. Qualcuno aveva richiesto di aggiungere qualche esempio pratico alle lezioni, abbiamo quindi realizzato un programmino che dovrebbe poter chiarire alcuni dubbi, il quale è allegato alla presente lezione. In ogni caso se ancora siete incerti su qualche argomento non esitate a chedere aiuto ai nostri indirizzi E-Mail.
Alla prossima lezione.
|