3. Rutiny: PROC a RETURN
Na čo to je
Program sa delí na menšie pomenované kusy – procedúry. Kus, ktorý sa opakuje, napíšeš raz a potom ho len voláš menom.
Ako sa to píše
PROC Meno()
príkazy
RETURN| Časť | Význam |
|---|---|
PROC | začiatok procedúry |
Meno | meno, ktoré si zvolíš: začína písmenom, potom písmená, číslice a _ |
() | zátvorky sú povinné, aj keď sú prázdne |
RETURN | koniec procedúry: program sa vráti tam, odkiaľ ju zavolal |
Procedúra sa volá tak, že napíšeš jej meno so zátvorkami: Meno().
Komentár začína bodkočiarkou a siaha do konca riadka. Môže stáť na vlastnom riadku aj za príkazom.
Celý program
Súbor examples/proc.act:
; Three routines. The program starts in the last one.
PROC Line()
PrintE("--------------------")
RETURN
PROC Greet()
PrintE("Good morning!") ; a comment may follow a statement
RETURN
PROC Main()
Line()
Greet()
Greet()
Line()
RETURNPreklad a spustenie
action26 proc.act --simČo uvidíš
--------------------
Good morning!
Good morning!
--------------------Ako to funguje
Program má tri procedúry: Line, Greet a Main.
Program začína v poslednej procedúre. To je pravidlo Action! – nezáleží na mene, ale na poradí. Tu je posledná Main, takže program začne v nej.
Main postupne zavolá Line(), dvakrát Greet() a znova Line(). Pri každom volaní program odskočí do volanej procedúry, vykoná jej príkazy a po RETURN pokračuje za volaním.
Keď RETURN vykoná posledná procedúra (tá, v ktorej program začal), program končí.
Procedúra musí byť napísaná skôr, než ju niekto zavolá. Prekladač číta súbor zhora nadol a meno, ktoré ešte nevidel, nepozná. Preto sú pomocné procedúry hore a Main dole.
Časté chyby
| Čo sa stalo | Čo povie prekladač |
|---|---|
| procedúra je napísaná až pod miestom, kde sa volá | error ACT008: undeclared name 'Greet' |
chýbajú zátvorky pri PROC Main | error ACT007: invalid argument list: expected '(' after the routine name |
chýbajú zátvorky pri volaní (Greet namiesto Greet()) | error ACT010: illegal assignment: expected '=', '==' or '(' after 'Greet' |
| dve procedúry majú rovnaké meno | error ACT006: 'Greet' is already declared |
Chýbajúci RETURN prekladač nehlási. Procedúra bez RETURN neskončí a program pokračuje príkazmi nasledujúcej procedúry, čo skoro nikdy nechceš. Keby v tomto programe chýbal RETURN za Greet, program by z Greet „prepadol“ do Main, tá by znova zavolala Greet – a Good morning! by sa vypisovalo donekonečna. Na konci každej procedúry preto píš RETURN.
Vyskúšaj si
- Pridaj procedúru
Bye, ktorá vypíšeGood night!, a zavolaj ju zMainpred poslednou čiarou. - Presuň procedúru
Mainna začiatok súboru. Čo povie prekladač a prečo? - Zavolaj
Line()aj z procedúryGreet. Koľko čiar program vypíše?
Zhrnutie
PROC Meno()…RETURNje procedúra; volá saMeno().- Program začína v poslednej procedúre súboru.
- Procedúra musí byť v súbore nad miestom, kde sa volá.
RETURNna konci procedúry nevynechávaj.;začína komentár do konca riadka.
Späť: 2. Prvý program · Ďalej: 4. Výpis