A Simula programozási nyelv

Alprogramok, modulok

Szintaxis

<eljárásfej> ::= <eljárásazonosító> <formális paraméterlista>; <paraméterátadási mód specifikációja> <típusspecifikációja> <típusspecifikáció>
<paraméterátadási mód specifikációja> ::= <érték-szerinti paraméterátadás specifikációja> <név-szerinti paraméterátadás specifikációja> | <név-szerinti paraméterátadás specifikációja> <érték-szerinti paraméterátadás specifikációja>
<név-szerinti paraméterátadás specifikációja> ::= name <azonosítólista>; | <üres>
<specifikátor> ::= <típus> | ARRAY | <típus> ARRAY | LABEL | SWITCH | PROCEDURE | <típus> PROCEDURE
<paraméterelhatároló> ::= ,

Eljárások, függvények, paraméterátadás

Az eljárások tekintetében a SIMULA 67 eltér az ALGOL 60 programozási nyelvtől:

A paraméterek típusát az eljárás, ill. függvény fejlécében egy kicsit szokatlan módon kell megadni:

integer procedure myproc(a, b, c, F); name a; value b; real a; text b; ref(X) c; Boolean procedure F;

Ez egy integer értéket visszaadó függvény, amelynek egy real, egy text, egy ref(X) típusú érték és egy Boolean visszatérési értékű függvény a paramétere. A paraméterátadásnak három módja van: érték, hivatkozás és név szerinti. Érték típusú paraméterekre az érték szerinti, az összes többi paraméterre pedig a hivatkozás szerinti paraméterátadási mód az alapértelmezés. Az 'a' paraméterre explicit módon név szerinti paraméterátadást (name) definiál a függvény az érték szerinti alapértelmezéssel szemben. Ehhez hasonlóan a 'b' paraméterre explicit módon érték szerinti paraméterátadást (value) határoz meg a függvény a hivatkozás szerinti alapértelmezéssel szemben.

Az eljárásparaméterek különböző fajtáira alkalmazható paraméterátadási módokat a következő táblázat tartalmazza:
(A : alapértelmezés, V : választható, I : illegális)

Paraméterérték szerintihivatkozás szerintinév szerinti
érték típusúAIV
objektumhivatkozásúIAV
szövegtípusúVAV
érték típusú tömbVAV
hivatkozás típusú tömbIAV
eljárásIAV
függvényeljárásIAV
címkeIAV
kapcsolóIAV

Érték szerinti paraméterátadás

A formális paraméter egy lokális változó, melynek kezdőértéke a neki megfelelő aktuális paraméter kiértékelésével kapott érték. Az aktuális paraméterek kiértékelése az eljárásba való belépéskor, ill. egy objektum generálásakor történik meg. Az objektumhivatkozási és hivatkozás típusú array paraméterekre az érték szerinti paraméterátadás illegális.

Hivatkozás szerinti paraméterátadás

A hivatkozás szerint átadott formális paraméter a neki megfelelő aktuális paraméter kiértékelésével kapott hivatkozás. Az aktuális paraméterek kiértékelése az eljárásba való belépéskor, ill. egy objektum generálásakor történik meg. A hivatkozás szerint átadott tömb, eljárás, címke és kapcsoló paraméter az eljárás vagy osztálytörzsön belül nem lehet megváltoztatni. A hivatkozás szerint átadott tömbparaméternél az aktuális paraméter típusának egybe kell esnie a formális paraméter típusával. Hivatkozás szerint átadott eljárásparamétereknél az aktuális paraméter típusa a formális paraméter típusával megegyező lehet, vagy pedig annak alárendelt típusa.

Név szerinti paraméterátadás

A névszerinti paraméterátadás az eljárásparaméterek egy átadási módja, nem alapértelmezés. Hasonlóan, mint az ALGOL 60-ban, ez egy szövegszerű helyettesítést jelent. A névszerint átadott paraméterek minden egyes futás közbeni előfordulása egy kifejezés ismételt kiértékelését idézheti elő. A név szerinti paraméterátadás tulajdonképpen olyan mint egy makróhívás.

Paraméterátadási módok
Példa: egészértékű függvény két input paraméterrel (kiszámolja a legnagyobb közös osztót): Begin Integer Procedure GCD(M, N); Integer M, N; Begin While M<>N do If M<n then N := N - M else M := M - N; GCD := M End of GCD; Integer A, B; OutText("Enter an integer number: "); OutImage; A := InInt; OutText("Enter an integer number: "); OutImage; B := InInt; OutText("Greatest Common Divisor of your numbers is "); OutInt(GCD(A,B), 4); OutImage; End of Program;