Akcia DO_LOOP, EXIT_LOOP, END_LOOP


Funkcia
Pomocou akcií je možné implementovať cyklus.
Deklarácia
[FOR  _ctrlVar [RANGE struct | = lBoundExpr TO uBoundExpr] ] DO_LOOP
  
 ...; akcie 1
  
 [EXIT_LOOP [expression]]
  
 ...; akcie 2
  
 [EXIT_LOOP [expression]]
  
 ...; akcie 3
  
 END_LOOP

Parametre
expression in Výraz typu Bool.

Popis
Cyklus má dva varianty:
  1. Cyklus s riadiacou premennou.
    Na začiatku cyklu je riadiaca premenná nastavená na hodnotu 1 (variant s kľúčovým slovom RANGE) alebo na hodnotu danú výrazom lBoundExpr. Hodnota výrazu musí byť platná. Taktiež sa jedenkrát vyhodnotí horné obmedzenie pre hodnotu riadiacej premennej.
    V prvom prípade (variant RANGE) je to rozmer danej štruktúry (struct\DIM).
    V druhom prípade je horné obmedzenie získané vyhodnotením výrazu uBoundExpr. Hodnota výrazu musí byť platná. Riadiaca premenná cyklu bude pri jednotlivých iteráciách automaticky postupne zvyšovaná až po horné obmedzenie. Riadiaca premenná musí byť deklarovaná typu INT. V tele cyklu je možné ju meniť. Prípadné zneplatnenie jej hodnoty spôsobí chybu za behu pri vykonávaní akcie END_LOOP. Cyklus je možné predčasne ukončiť akciou EXIT_LOOP.
    Po ukončení cyklu má riadiaca premenná hodnotu o 1 väčšiu ako horné obmedzenie.

    INT _i
    INT _uBound
     
    _uBound := 10
    FOR _i=2 TO _uBound DO_LOOP
      _uBound := _uBound + 1 ; zmena hodnoty nemá vplyv na počet iterácií
    END_LOOP
    ; hodnota premennej _i je 11

    INT _i
    RECORD (SD.ArchVal) _struct
     
    REDIM _struct[10]
    FOR _i RANGE _struct DO_LOOP
      REDIM _struct[2] ; zmena rozmeru nemá vplyv na počet iterácií
    END_LOOP
    ; hodnota premennej _i je 11


  2. Cyklus bez riadiacej premennej.
    Akcie uzavreté medzi akcie DO_LOOP a END_LOOP budú cyklicky vykonávané. Ukončiť cyklus je možné akciou EXIT_LOOP. Ak je akcia s parametrom, cyklus bude ukončený ak expression nadobudne hodnotu @TRUE.

    INT _i
     
    _i := 1
    DO_LOOP
      EXIT_LOOP _i = 10
      _i := _i + 1
    END_LOOP

    Ekvivalentný zápis bez podmieneného ukončenia cyklu:

    INT _i
     
    _i := 1
    DO_LOOP
      IF _i = 10 THEN
        EXIT_LOOP
      ENDIF
      _i := _i + 1
    END_LOOP

Poznámka
Chybný zápis cyklu nastane, ak je jeho začiatok a koniec "prekrížený" s akciou IF THEN.

Napríklad:
 
INT _i
_i := 1
 
IF Sec = 1 THEN
  DO_LOOP
ENDIF
  EXIT_LOOP _i = 10
  _i := _i + 1
END_LOOP

 
alebo
 
INT _i
 
_i := 1
DO_LOOP
  IF _i = 10 THEN
    EXIT_LOOP
  ENDIF
  _i := _i + 1
IF Sec = 1 THEN
    _i := _i + 1
  END_LOOP
ELSE
  END_LOOP
ENDIF


Súvisiace stránky:

Napíšte komentár