1.3. A függvény mint utasítás

iDevice ikon

Amikor a kör kerületét kívánjuk kiszámolni, akkor tudjuk, hogy ahhoz a sugarára van szükségünk - amit mindig r-rel jelöltünk -, hiszen a képlet: 2*∏*r. Vegyük észre, hogy a feladatvégzés eredményét hasznosítani akarjuk, tehát vagy tovább számolunk vele, vagy csak egyszerűen meg akarjuk jeleníteni.

Például: jelenjen meg: KÖR_KERÜLETE(5)

A függvény visszaadott értékét itt most megjelenítettük, de a függvényt akárhányszor, különböző bemenő értékkel is meghívhatnánk, ha lenne hozzá egy formális paraméterre megírt műveletvégzőnk, lehetőleg mindig beszédes elnevezéssel.

Például az adattípusok deklarációját mellőzve:

függvény KÖR_KERÜLETE (paraméter: sugár)
visszaadott érték: 2*∏*sugár

A fenti utasítás hatására a 31.415926535... érték fog megjelenni a szoftver beállítástól függően valahány tizedesre kerekítve. A függvényhívás tehát egy utasítás arra, hogy a függvényben fogalmazott műveletsort a híváskor átadott érték(ek)re elvégezzük vagy mással (esetleg a számítógéppel) elvégeztessük. A hatékony programtervezési szemlélet megköveteli a megoldás részfeladatokra való bontását, és az ismétlődő teendők egységként való kezelését. A jól azonosított elnevezés és a műveletek egyszeri kidolgozása formális adat(ok)ra segíti a terjesztést, az együttdolgozást és a továbbfejlesztést.

Függvény-használathoz bonyolultabb műveletek egész sorának ismételt végrehajtása céljából gyakran folyamodunk.

  1. Szívesen végeztetnénk el mással, hogy egy adott dátumból levegye a hónap sorszámát. Egy feltétel szerint kívánunk adatokat szűrni, amikor HÓNAP(dátum)=5 logikai kifejezést írunk egy parancs feltételt tartalmazó részébe. Megszoktuk, hogy bármely szoftver rendszerfüggvényei között találunk ilyen függvényt hasonló, általában angol néven.
  2. Az eladási tételek értékének kiszámolása esetére is érdemes függvényt írni, ha a tételben szereplő termék eladott mennyiségét a termék aktuális egységárával szoroznánk össze. Például: érték := mennyiség * ÁR('T123')

függvény ÁR(paraméter: eladott_termék)
visszaadott érték: ár
eladott_termék keresése TERMÉK fájlban
ár:=TERMÉK.egységár

    3. Sokkal összetettebb feladat elvégzésére is utasíthatunk függvényhívással. Ha például a tételes eladások mennyiségét szeretnénk összegezni:

jelenjen meg ÖSSZEG(mennyiség) az ELADÁSOK táblából

akkor az ELADÁSOK tábla sorait egyenként beolvasva az ott található mennyiségeket kellene összegezni egy gyűjtőnek használt segédváltozóban. Az alkalmazások fejezetében még szó lesz az ilyen összesítő függvényekről.

Láthatjuk, hogy az egyszerű képlettel megadott függvény meghívása is utasítás, hiszen a formálisan x-szel jelölt bemenő paraméterrel felírt műveleteket akarjuk a műveleti sorrendnek megfelelően elvégeztetni, amikor dolgoznánk az x-nek átadott konkrét adat függvényértékével.

Az f(x) = (x+3)*(x+1)2 függvény tetszőleges x-re könnyedén kiszámolható az aritmetikai műveletek műveleti sorrendjének figyelembevételével. Meg sem lepődünk, amikor az ABS(x) függvényhívást alkalmazzuk az x szám abszolút értékének kiszámítására, vagy az INT(x)-et az x valós szám egész részének visszaadására. Pedig a középiskolában külön jele volt mindkét műveletnek. Az ABS(x), vagyis az x funkciója, hogy mielőtt a kapott x-et visszaadja, szorozza meg (-1)-gyel, amennyiben negatív volt, egyébként ne csináljon vele semmit. Az INT(x), vagyis az [x] funkciója, hogy visszaadja a kapott x számnál kisebb vagy egyenlő egészek legnagyobbikát. Végezetül hadd hívjam fel újra a figyelmet arra, hogy bizonyos függvények értékének kiszámítása a műveletvégzés bonyolultsága miatt csak külső segítséggel megy. Itt névvel jól azonosított függvényekre gondolok, melyek értékét függvénytáblából vagy számítógépes közelítéssel vesszük.

Az átlagos középiskolás nem is sejti, hogy például a szinusz 3.14 (radiánban) egy kifejezetten összetett művelet végrehajtását kívánja meg:

Nagyobb függvénytani fegyvertárat igényel annak az eldöntése, hogy a végtelen összeg helyett az első hány taggal történő közelítés legyen az előírt pontosságot kielégítő számérték.