Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script

Capitolo 3: Strutture di controllo e strutture condizionali

Ritorna all'Indice analitico


Introduzione

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.

Costrutti condizionali

Developer's Toolkit fornisce due costrutti condizionali:

Costrutti di controllo

Developer's Toolkit fornisce vari costrutti per modificare il flusso dei programmi:

Istruzione IF

Modulo dell'istruzione IF

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.

Esempio IF

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;


Condizioni true

IF ed ELSIF sono seguite sempre da una condizione Booleana. Se la condizione è valutata su TRUE, vengono eseguite le seguenti istruzioni IF o ELSIF.

Condizioni False

Se la condizione è valutata su FALSE, si verifica una delle tre ipotesi di seguito elencate:

Valutazione booleana di forma breve

Developer's Toolkit utilizza la valutazione booleana di forma breve. Ciò indica che si valutano due clausole:


Istruzione WHEN

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.

Esempio d'istruzione IF

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.

Esempio d'istruzione WHEN

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; 

Loop FOR

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)

Esempio FOR

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.

Utilizzo di DOWNTO

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;


Utilizzo di FOR negli elenchi

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; 

Loop REPEAT

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; 

Espressioni booleane

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).

Loop WHILE

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; 

Istruzioni Exit e ExitLoop

Exit

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.

ExitLoop

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.

Esempio ExitLoop

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

Ritorna all'Indice analitico

Copyright