Ahogy sok más nyelv , a TTCN-3 is lehetőséget biztosít a saját funkcionalitások függvényekbe való rendezésére. A függvények alapelve tehát megegyezik szinte minden más programozási nyelvével, abban viszont egyediek, hogy megszorításokat tehetünk a komponensek típusaira amin futni fognak.
A függvények definíciója tehát:
Az ADA-ból már jól ismert in out illetve inout kulcsszavakkal határozhatjuk meg a függvényparaméterek átadásának típusát (érték szerinti az in, referencia szerinti az inout illetve out).
Lehetőség van továbbá függvényreferenciák létrehozására is, ekkor a kapcsolatot a refers, a függvényhívást pedig az apply eljárás segítségével valósíthatjuk meg.
Léteznek speciális, beépített függvények melyek bármikor a rendelkezésünkre állnak:
A TTCN3 nyelvben paraméterezhetőek a modulok, a template-ek, a függvények, az altsep-ek valamint a testcase-ek. Paraméterként használhatóak: értékek, template-ek, timer-ek és portok.
Kulcsszó | Engedélyezett paramétertipus | Engedélyezett paraméterezési forma | Engedélyezett paramétertípusok |
---|---|---|---|
module | érték | statikus, futás elején | összes alap típus, összes felhasználó által definiált típus, address típus |
template | érték és template | dinamikus, futásidőben | összes alap típus, összes felhasználó által definiált típus, address típus, template típus |
function | érték, template, port és timer | dinamikus, futásidőbenn | összes alap típus, összes felhasználó által definiált típus, address, component, port, default, template, timer típus |
alstep | érték, template, port és timer | dinamikus, futásidőben | összes alap típus, összes felhasználó által definiált típus, address, component, port, default, template, timer típus |
testcase | érték, template, port és timer | dinamikus, futásidőben | összes alap típus, összes felhasználó által definiált típus, address típus, template típus |
Paraméterezett templatek, függvények, alstep-ek és testcase-ek formális paramétereit formális paraméter listában adhatjuk meg. A modulok formális paramétereit a modul paraméter definíciós részében adjuk meg (modulepar). A formális paraméterek in, out, inout paraméterek lehetnek, amennyiben ezt nem adjuk meg explicit módon, akkor in paraméter lesz. Az in típusú paramétereknek lehet alapértelmezett értékük, melyet abban az esetben használunk, ha nem adunk át aktuális paramétert. Az out típusúak ugyan olvashatóak a parametizált objektumon belül, de mégse lehet aktuális paraméterként átadni. Adott objektumon belül olvasás előtt, írni kell.
Az összes alap típus, az összes felhasználó által létrehozott típus, az address típus, a component típus, és a default átadható értékparaméterként. Érték típusú formális paraméterek ugyanúgy használhatóak, mint pl az értékek a kifejezésekben. Modulok esetében az érték szerinti paraméterezés engedélyezett, viszont modulparaméterek esetében a futtatás indítása előtt ismerni kell ezek értékét, futás közben nem módosithatóak, ugymond statikus paraméterezés. Érték szerint paraméterezés használható továbbá template-ek, testcase-ek, alstep-ek, és függvények esetében. Ezek esetében a paraméterezés dinamikus, azaz futásidőben kell megadni a paraméterek értékét. Néhány nyelvi elem esetében nem engedélyezett a paraméterezés. Ilyenek a const, var, timer, control, record of, set of, enumerated, port, component, altípusok definíciója, group és import. A templatek, és a defaultként aktivált alstepek esetében csak in típusú formális paraméter adható meg. A runs on-ban megadott komponens elemei nem lehetnek alapértelmezett értékei az in tipusú paramétereknek.Component típusu formális paraméter esetén a következő alapértelmezett értékek engedélyezettek: null, mtc, self vagy system. Default típusú formális paraméter alapértelmezett értéke csak null lehet.
A template típusú paramétereket arra használjuk, hogy parametizált objektumoknak templateket adjunk át. Template-ek, függvények, alstep-ek, és testcase-ek esetében használhatunk template típusú formális paramétert. A template kulcsszó használatával jelezhetjük, hogy template típusú paramétert vár az adott objektum. A templatek, a defaultként aktivált alstepek és komponens viselkedéseként indított függvények esetében csak in típusú formális paraméter adható meg.
Függvényeket, és alstep-eket lehet timer típusú paraméterrel paraméterezni. A timer típusú paraméternek inout típusúnak kell lennie. A paraméterként átadott timer állapota átadáskor nem változik meg. Pl ha az átadás pillanatában fut, átadás után is running státuszban marad, nem lesz implicit módon leállitva. A timer kulcsszóval jelöljük, hogy timer tipusú paraméterről van szó.
Függvényeknek és altsepeknek lehet port típusú formális paramétere. A paraméterként átadott portok ugyanúgy használhatóak, mint bármely más port, nem kell őket külön a runs on klózban megadott komponensben deklarálni őket. A paraméterként átadott portokra, ugyanúgy mint a timerekre érvényes a státusz megőrzése, azaz a paraméter átadás során nem változik a státuszuk. Pl egy elindított port továbbra is fog küldeni/fogadni üzeneteket, nem lesz implicit módon leállítva, tehát a parametizált objektumon belül továbbra is küldhetünk/fogadhatunk az adott porton. A port típusú formális paramétereknek szintén inout típusúnak kell lenni.
Parametizált objektumoknak érték, template, timer és port típusú aktuális paramétereket adhatunk át. Aktuális paramétereket átadhatunk a formális paraméterek listájával megegyező sorrendű listában, avagy értékadás operátorral, explicit módon a formális paraméterek neveinek felhasználásával. Lista formátumű megadás esetén az aktuális paraméterlistának meg kell egyezni a formális paraméterlistával. Minden alapértelmezett érték néküli formális paraméterhez rendelni kell egy aktuális paramétert. Alapértelmezett értékkel rendelkező formális paraméter kihagyható a listában, ennek jelölése „-”. Alapértelmezett értékekkel rendelkező formális paraméterek esetében az aktuális paraméter elhagyható, amennyiben nem követi olyan formális paraméter a listában, amelynek nincs alapértelmezett értéke. A két fajta megadási módszer nem keverhető, vagy listát használunk vagy explicit értékadást. Az aktuális paraméter típusúnak meg kell egyezni a formális paraméter típusával.