Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script
Questo capitolo contiene informazioni sui costrutti di controllo e sui costrutti condizionali che gestiscono il test e la risposta alle condizioni del test. Inoltre, questi costrutti forniscono i mezzi necessari per modificare il flusso dei programmi per ripetere le operazioni come richiesto.
Developer's Toolkit fornisce due costrutti condizionali:
Developer's Toolkit fornisce vari costrutti per modificare il flusso dei programmi:
Il modulo generale dell'istruzione IF del Developer's Toolkit è:
IF <condizione> THEN <elenco istruzioni> ELSIF <seconda condizione> THEN <elenco istruzioni> ELSE <elenco istruzioni> END;
Le istruzioni ELSIF e ELSE non sono richieste se si verifica una sola condizione.
Gli utilizzi dell'esempio in questo costrutto sono:
IF (age < 18) OR (age > 90) THEN WRITELN('Improper age, please re-enter'); END;
IF display = 'CGA' THEN LoadCGADriver; ELSIF display = 'MCGA' THEN LoadMCGADriver; ELSIF display = 'EGA' THEN LoadEGADriver; ELSE LoadVGADriver; END;
IF processor = '8086' THEN maxMem := 640000; operatingSystem := 'DOS'; ELSE maxMem := 16000000; operatingSystem := 'OS/2'; (* operatingSystem is a string *) END;
IF ed ELSIF sono seguite sempre da una condizione Booleana. Se la condizione è valutata su TRUE, vengono eseguite le seguenti istruzioni IF o ELSIF.
Se la condizione è valutata su FALSE, si verifica una delle tre ipotesi di seguito elencate:
Developer's Toolkit utilizza la valutazione booleana di forma breve. Ciò indica che si valutano due clausole:
Le istruzioni WHEN sono un tipo speciale di istruzioni IF che consentono di eseguire un'azione relativa al valore di una variabile o di un'espressione.
Considerare la seguente istruzione IF:
IF i*j = 1 THEN WriteOne; ELSIF i*j = 2 THEN WriteTwo; ELSIF i*j = 3 THEN WriteThree; ELSE WriteOther; END;
Nell'esempio precedente, il controllo del valore restituito dall'espressione i*j comporta un nuovo calcolo dell'espressione per ogni valore d'immissione. Se i*j è maggiore di 3, l'espressione i*j sarà calcolata tre volte.
Questo metodo ha due aspetti negativi:
Un metodo alternativo sarebbe quello di assegnare un valore i*j a una variabile locale e utilizzare, dunque, quella variabile nell'istruzione IF.
Una soluzione migliore per la manutenzione e per la prestazione è di utilizzare un'istruzione WHEN invece di una IF.
L'istruzione WHEN del Developer's Toolkit fornisce un metodo migliore per valutare una condizione, come mostrato di seguito.
WHEN i*j IS 1 THEN WriteOne; ELSWHEN 2 THEN WriteTwo; ELSWHEN 3 THEN WriteThree; ELSE WriteOther; END;
L'istruzione WHEN valuta un'espressione una volta e poi la confronta con ogni valore del test. L'espressione deve essere di numero intero di dati semplici o di stringa.
Nota: Quando utilizzata con le stringhe, WHEN non è inquiry.
E' possibile inoltre specificare più valori del test utilizzando il formato delimitato dalla virgola, mostrato di seguito:
WHEN i*j IS 1,2,3 DO WriteOne; ELSWHEN 4,5,6 DO WriteTwo; ELSWHEN 7,8,9 DO WriteThree; ELSE WriteOther; END;
Il costrutto del loop FOR viene utilizzato per eseguire una o più istruzioni in un numero di volte prestabilito. Il costrutto FOR assume la forma seguente:
FOR <parametro loop>:=<lo-bound> TO <hi-bound> DO <elenco istruzioni> END;
I componenti di questo modulo sono. visualizzati nella tabella.
Componente | Descrizione |
<parametro loop> | Una variabile del numero intero assegnata ai valori compresi tra <lo-bound> e <hi-bound> (estremi inclusi) |
<lo-bound> | Un'espressione del numero intero calcolata una volta all'inizio del loop e assegnata al <parametro loop> |
<hi-bound> | Un'espressione del numero intero calcolata una volta all'inizio del loop e confrontata con il valore <parametro loop> ogni volta che attraversa il loop |
<elenco istruzioni> | Una o più istruzioni Developer's Toolkit eseguite per ogni valore di <parametro loop> compreso tra <lo-bound> e <hi-bound> (estremi inclusi) |
L'esempio seguente illustra il modo più semplice per utilizzare l'istruzione FOR. In questo esempio, una stringa viene scritta sullo schermo 10 volte. Il valore della variabile i non viene utilizzato all'interno dell'elenco di istruzioni.
FOR i:=1 TO 10 DO WinWriteLN(myWindow,'Hello'); END;
L'esempio seguente è leggermente più complicato.
FOR i:=j TO k*3 DO WinWriteLN(myWindow,'i = ' & i); END;
Nota: Se il margine inferiore è uguale al margine superiore, l'elenco delle istruzioni viene eseguito una volta. Se il margine inferiore è più grande del margine superiore, l'elenco delle istruzioni non viene eseguito completamente.
La parola chiave DOWNTO può essere utilizzata in luogo di TO per eseguire il loop da un valore più alto a un valore più basso, come mostrato nell'esempio seguente:
FOR i:=10 DOWNTO 1 DO WinWriteLN(myWindow,i); END;
L'istruzione FOR viene utilizzata in maniera diversa con le variabili di tipo LIST:
FOR <parametro elenco> DO <elenco istruzioni> END;
Qui, l'elenco istruzioni viene eseguito una volta per ogni membro nel parametro di elenco. Il puntatore dell'elemento corrente del parametro di elenco, $Current, viene inizializzato per indicare il primo elemento nell'elenco. Al termine dell'esecuzione dell'elenco di istruzioni, il puntatore dell'elemento avanza. Ciò consente a ogni istruzione di essere eseguita per ogni elemento in un elenco.
Considerare il seguente esempio:
ListInsert(myList,'One'); ListInsert(myList,'Two'); ListInsert(myList,'Three'); FOR myList DO WinWriteLN(myWindow,myList[$Current]); END;
Il costrutto loop REPEAT esegue una serie di
istruzioni per volta, quindi continua a eseguirle fino a che una
determinata condizione diventa true.
Il costrutto loop REPEAT ha il seguente formato:
REPEAT <elenco istruzioni> UNTIL <condizione>;
Il codice seguente scrive la stringa 'Hello' per 10 volte sullo schermo:
i:=1; REPEAT WinWriteLN(myWindow,'Hello'); i:=i + 1; UNTIL i > 10;
Nell'esempio precedente, <condizione> è un'espressione
booleana calcolata ogni volta tramite il loop. Se viene calcolata su
FALSE, le istruzioni nell'<elenco istruzioni> vengono eseguite
nuovamente.
Le espressioni booleane possono essere costituite da clausole
connesse da:
Una clausola consiste di due espressioni di tipi di dati compatibili separati da un operatore relazionale (=, >, <, e così via).
Il costrutto loop WHILE è simile al costrutto loop REPEAT, ma la condizione Exit viene verificata all'inizio del loop e non alla fine. Le istruzioni in un costrutto loop REPEAT possono essere eseguite almeno una volta, mentre le istruzioni in un costrutto loop WHILE non vengono eseguite affatto se la condizione del loop è falsa dall'inizio.
I costrutti loop WHILE hanno il seguente formato:
WHILE <condizione> DO <elenco istruzioni> END;
Nel programma seguente la stringa 'Hello' viene scritta per 10 volte sullo schermo
i:=1; WHILE i <= 10 DO WinWriteLN('Hello'); i:=i + 1; END;
L'istruzione Exit può essere utilizzata per uscire da una chiamata per una funzione o una procedura. Una volta emessa, la routine corrente si arresta completamente, anche se si trova in un loop FOR, REPEAT o WHILE.
Come indica il nome, l'istruzione ExitLoop può essere utilizzata per uscire da un loop prima che la condizione di chiusura diventi true.
Nell'esempio seguente, un loop è impostato per leggere e stampare ogni riga dalla tabella del database EMPLOYEES. Se l'istruzione SQLFetch riporta esito negativo nel restituire un valore inferiore a 1 (indicante quindi un errore o la fine della serie di risultati), l'istruzione ExitLoop fa in modo che il loop arresti l'esecuzione. L'istruzione che segue immediatamente il loop è la prossima a essere eseguita.
L'esempio seguente illustra l'utilizzo di ExitLoop.
VARIABLES i: Integer; cursor: SQLCursor; employee: EmployeeRecord; ACTIONS i:=SQLSelect(cursor,'SELECT * FROM EMPLOYEES'); WHILE i > 0 DO i:=SQLFetch(cursor,employee); IF i < 1 THEN ExitLoop; END; PrintEmployee(employee); END; SQLCloseCursor(cursor);
Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script