1. A függvény paraméterként kapott kifejezéseket kiértékeli - A paramétereknek ez a **kezdőértéke** 2. Nyit egy lokális keretet a függvénynek 3. A lokális keretben végrehajtja a függvényben definiált utasítássorozatot - lehet hatása a **globális** keretre pl **globális változó**kon és **referenciák**on keresztük 4. A return utasítással átadja a visszatérési értéket a meghívás helyének és törli a lokális keretet - A függvény meghívása egy utasítás, de a függvény maga kezelhető kifejezésként. - Egy kifejezés kiértékeléséhez, lehet hogy végre kell hajtanunk egy utasítást ami meghív egy függvényt
1. megadjuk a lehetséges paramétereket - tetszőleges számú lehet (akár 0 is) - típus számít (valahol előre meg kell adni) - sorrend számít (kikerülhető) 2. utasítássok sorozata 3. megadjuk a visszatérési (return) értéket
A visszatérési érték kiszámolása és visszaadása
minden a függvény lokális keretén túlmutató dolog amit a függvény csinál a visszatérési érték kiszámolásán kívül (módosít globális változón, kiír valamit a képernyőre, elment valami fájlt...)
A **globális változó**kkal szemben, amit a program globális keretében szerepelnek, elérhetőek és módosíthatóak, a függvényekhez tartoznak lokális változók: - a függvény paraméterei (bemeneti változói helytelen nyelvtannal) - a függvényben deklarált változók - csak a függvény látja és éri el őket, a függvényt hívó program nem - a függvény lokális keretének részei, amit a függvény meghívásakor végrehajtott utasítások módosítanak - globális/lokális változók elválasztásának szigorúsága függ programnyelvtől
#### [C++](http://pythontutor.com/iframe-embed.html#code=%23include%20%3Cstring%3E%0A%23include%20%3Ccmath%3E%0A%23include%20%3Ciostream%3E%0A%0Ausing%20namespace%20std%3B%0A%0Astring%20operator*%28string%20s,%20int%20n%29%20%7B%0A%20%20%20%20string%20out%3B%0A%20%20%20%20while%20%28n%20%3E%200%29%7B%0A%20%20%20%20%20%20%20%20out%20%3D%20out%20%2B%20s%3B%0A%20%20%20%20%20%20%20%20n%20%3D%20n-1%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20out%3B%0A%7D%0A%0A%0Astring%20fun1%28string%20a,int%20b%29%7B%0A%20%20%20%20string%20c%20%3D%20a%20%2B%20%22%20fing%20%22%3B%0A%20%20%20%20return%20c%20*%20b%3B%0A%7D%0A%0Aint%20fun2%28int%20n%29%7B%0A%20%20%20%20int%20a%20%3D%20-2%20*%20n%3B%0A%20%20%20%20int%20b%20%3D%20pow%28a,2%29%3B%0A%20%20%20%20a%20%3D%20a%20-%208%3B%0A%20%20%20%20int%20h%20%3D%20a%20%2B%20b%3B%0A%20%20%20%20return%20h%3B%0A%7D%0A%0Afloat%20fun3%28float%20a,%20float%20b,float%20c%29%7B%0A%20%20%20%20float%20x%20%3D%20a%20%2B%20b%3B%0A%20%20%20%20return%20c/x%20%2B%202*x/c%3B%0A%7D%0A%0A%0Aint%20main%28%29%20%7B%0A%0A%20%20int%20v%20%3D%20fun2%282%29%3B%0A%20%20string%20w%20%3D%20fun1%28%22bla%22,v%29%3B%0A%20%20float%20a%20%3D%20fun3%2811%2B2,5/4,3%29%3B%0A%20%20string%20b%20%3D%20fun1%28%22boo%22,fun2%282%29%20-%202%29%3B%0A%0A%20%20cout%20%3C%3C%20w%20%3C%3C%20endl%3B%0A%20%20cout%20%3C%3C%20b%3B%0A%0A%20%20return%200%3B%0A%7D&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=cpp&rawInputLstJSON=%5B%5D&textReferences=false)
#### [JavaScript](http://pythontutor.com/iframe-embed.html#code=function%20fun1%28a,b%29%7B%0A%20%20%20%20var%20c%20%3D%20a%20%2B%20%22%20fing%20%22%0A%20%20%20%20return%20c.repeat%28b%29%0A%7D%0A%0Afunction%20fun2%28n%29%7B%0A%20%20%20%20var%20a%20%3D%20-2%20*%20n%0A%20%20%20%20var%20b%20%3D%20Math.pow%28a,2%29%0A%20%20%20%20a%20%3D%20a%20-%208%0A%20%20%20%20var%20h%20%3D%20a%20%2B%20b%0A%20%20%20%20return%20h%0A%7D%0A%0Afunction%20fun3%28a,b,c%29%7B%0A%20%20%20%20var%20x%20%3D%20a%20%2B%20b%0A%20%20%20%20return%20c/x%20%2B%202*x/c%0A%7D%0A%0Avar%20v%20%3D%20fun2%282%29%0Avar%20w%20%3D%20fun1%28%22bla%22,v%29%0Avar%20a%20%3D%20fun3%2811%2B2,5/4,3%29%0Avar%20b%20%3D%20fun1%28%22boo%22,fun2%282%29%20-%202%29&codeDivHeight=400&codeDivWidth=350&curInstr=0&origin=opt-frontend.js&py=js&rawInputLstJSON=%5B%5D)
#### [python](http://pythontutor.com/iframe-embed.html#code=def%20fun1%28a,b%29%3A%0A%20%20%20%20c%20%3D%20a%20%2B%20%22%20fing%20%22%0A%20%20%20%20return%20c%20*%20b%0A%0Adef%20fun2%28n%29%3A%0A%20%20%20%20a%20%3D%20-2%20*%20n%0A%20%20%20%20b%20%3D%20a%20**%202%0A%20%20%20%20a%20%3D%20a%20-%208%0A%20%20%20%20h%20%3D%20a%20%2B%20b%0A%20%20%20%20return%20h%0A%0Adef%20fun3%28a,b,c%29%3A%0A%20%20%20%20x%20%3D%20a%20%2B%20b%0A%20%20%20%20return%20c/x%20%2B%202*x/c%0A%0Av%20%3D%20fun2%282%29%0Aw%20%3D%20fun1%28%22bla%22,v%29%0Aa%20%3D%20fun3%2811%2B2,5/4,3%29%0Ab%20%3D%20fun1%28%22boo%22,fun2%282%29%20-%202%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)
Műveleteket fel lehet fogni függvényként, és nagyon jól kell ismerni őket! Pl: - $+(4,6)$ ként is jelölhetjük $4 + 6$-ot, az összeadás egy függvény - $ge(13,9)$ lehet $13 \geq 9$, logikai értékű függvény
- lehet őt - definiálni - meghívni - van(nak)/lehet(nek) neki - neve - paraméterei - visszatérési értéke (főhatása) - mellékhatása - lokális változói - ha meghívjuk lokális kerete