A Tcl programozási nyelvben a proc
paranccsal definiálhatunk eljárásokat.
proc név arg törzsA
proc
név néven olyan parancsot hoz létre,
amelynek végrehajtását a törzs script definiálja. Ha már
létezik az adott néven parancs, az új definíció lép a régi helyébe. A
proc
parancs üres stringet ad vissza.
A formális paramétereket az arg argumentum specifikálja.
Az arg egy lista, melynek minden eleme egy formális
paramétert ír le. Egy formális paramétert egy egy- vagy kételemű
lista ad meg. Az első listaelem a formális paraméter neve, az
opcionális második pedig az alapértelmezés szerinti értéke. Az utolsó
formális paraméter neve lehet a különleges jelentésű
args
, hozzá alapértelmezés nem adható meg.
Az eljárás meghívásakor a formális paraméterek lokális változóként
jönnek létre, vagyis érték szerinti paraméterátadás valósul meg.
Kezdőértékük a sorrendben nekik megfelelő aktuális paraméter, ennek
híján az alapértelmezés szerinti érték lesz. Az aktuális
paramétereknek le kell fedniük az alapértelmezéssel nem rendelkező
formális paramétereket. Ha az utolsó formális paraméter az
args
, a formálisnál több aktuális paraméter is megadható,
az args
értéke ekkor olyan lista, amely a "maradék"
aktuális paramétereket tartalmazza.
Az eljárástörzs végrehajtása során alapértelmezésben a globális
változók nem láthatók, a hivatkozott változók lokálisak. Akkor
jönnek létre, amikor először értéket adunk nekik, és az eljárás
elhagyásakor automatikusan törlődnek. Nem lokális változókat a
global
és az upvar
parancsok segítségével
érhetünk el.
Az eljárás végrehajtása return
paranccsal vagy a
törzs utolsó parancsának végrehajtása után ér véget. A visszatérési
érték előbbi esetben a return
parancsban megadott string,
utóbbi esetben pedig a törzs utolsó parancsának eredménye lesz.
global változónév ?változónév ...?A
global
deklaráció jellegű parancs. Egy eljárástörzsben
kiadva, a felsorolt változónevek az eljárás befejezéséig az azonos
nevű globális változókra hivatkoznak. Visszatérési értéke üres
string.
upvar ?szint? hivatkozott változónév ?hivatkozott változónév ...?Az
upvar
parancs a global
általánosítása,
tetszőleges eljáráshívási szinten elhelyezkedő változóhoz rendelhetünk
vele nevet. A relatív szintet nemnegatív egész szám adja meg, 0 az
aktuális szintet, 1 az eljárást hívó szintjét, 2 a hívót hívó
szintjét, és így tovább, jelenti. Abszolút szintre '#' karakterrel
prefixelt számmal hivatkozhatunk, például #0 a globális szintet
jelöli. A szint elhagyható, ha az első argumentum nem számjeggyel
vagy kettőskereszt karakterrel kezdődik. Hivatkozott lehet
egyszerű változó, tömb vagy tömbelem, de változónévnek
egyszerű változónévnek kell lennie.
Az upvar
-ral létrehozott változónév teljes értékű
alternatívája az eredeti változónévnek. Például a hivatkozott változó
(vagy tömbelem) az első értékadásnál jön létre, ha még nem létezik.
Az unset
parancs is
magát a hivatkozott változót törli, nem a hivatkozást. A hivatkozás
nem is szüntethető meg az eljárás elhagyása nélkül, legfeljebb
átirányítható újabb upvar
paranccsal.
Az upvar
az egyetlen lehetőség, hogy hivatkozás szerinti
paraméterátadást szimuláljunk Tcl-ben. Ehhez a hivatkozni kívánt
változó nevét paraméterként átvesszük, majd egy
upvar
utasításban kapcsolatot teremtünk a változóval:
proc decr {name {value 1}} { upvar 1 $name $name incr $name [expr - $value] }
global
vagy
upvar
paranccsal létrehozott hivatkozás, hiszen ezek
egyenértékűek a hivatkozott változó eredeti nevével.