• Nem Talált Eredményt

V. Függvények és hatókörök

N/A
N/A
Protected

Academic year: 2022

Ossza meg "V. Függvények és hatókörök"

Copied!
10
0
0

Teljes szövegt

(1)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

Dr. Holló Csaba, SZTE TTIK, Szoftverfejlesztés Tanszék

V. Függvények és hatókörök

Programozási alapismeretek kurzus

Olvasási idő:

10 perc

A lecke célja A változók hatóköreinek jobb megértése.

Tudás Ismeri a változók hatóköreit és a paraméterátadás lehetőségeit.

Képesség Hatékony információátadást valósít meg a függvények, illetve a globális környezet között.

(2)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

2 Függvények definiálása

C-ben a függvényeket

■ egymás után kell definiálni, PHP-ban

■ egymásba is lehetnek ágyazva

■ a definíció feltételben is lehet.

Mindkét nyelvben

■ a függvényhívás előtt a fordítónak / értel-mezőnek találkoznia kell a függvény definíci-ójával (vagy

legalább annak fejlécével).

❖ További leírások függvényekről C-ben és PHP-ban

(3)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

3

Változók hatóköre

Lokális változók függvényekben

■ a függvényben deklaráljuk és csak a függvényben elérhetők

■ a függvény meghívásakor jönnek létre

■ a függvény végén

Statikus változók függvényekben

■ a függvényben deklaráljuk és csak a függvényben elérhetők

■ a függvény végén Mire jó ez?

■ újabb függvényhíváskor visszakapjuk az otthagyott régi értéket; ennek érdekében nem fut le újra a deklaráció és ahhoz tartozó esetleges kezdeti értékadás sem.

megsemmisülnek

nem semmisülnek meg

(4)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

4

Változók hatóköre

Globális változók

■ legfelsőbb szinten, minden függvényen kívül definiáljuk

Eredeti nevükkel történő elérésükre különféle alapértelmezések vannak:

■ hivatkozhatók, csak bizonyos körülmények azt akadályozzák (pl. C-ben újradeklarálás)

■ alapból nem hivatkozhatók, de elérhetővé tehetők (PHP).

int x, y;

int x, v; int v, z;

f() g()

lokális változók globális változók

(5)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

5

Globális változók C függvényekben Mit hivatkozunk a változó nevével?

■ ha nincs deklarálva ugyanolyan nevű változó, akkor a globális változót

■ ha van deklarálva, akkor azt; ilyenkor a

globális változót csak mutatóval tudjuk elérni

void f(void){ int b; a = 3; b = 4; }

int main(){ f(); printf("a=%d, b=%d\n", a, b); … } a = 3; b = 2;

int a = 1, b = 2; int a = 3, b = 2;

(6)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

6 Globális változók PHP függvényekben

Mit hivatkozunk a változó nevével?

■ alapesetben az első hivatkozásnál létrejön egy ugyanolyan nevű lokális változó és azt hivatkozzuk;

■ ha újradeklaráltuk globálisként, akkor viszont a globális változót.

function f(){ $a = 3; global $b; $b = 4; }

Mit teszünk, ha azt szeretnénk, hogy legyen ugyanolyan nevű globális és lokális változó is?

■ nem deklaráljuk újra globálisként

■ a globálisat a GLOBALS tömb elemeként tudjuk hivatkozni.

function f(){ $GLOBALS["a"] = 5; $a = 3; global $b; $b = 4; }

$a = 1; $b = 2; $a = 1; $b = 4;

$a = 1; $b = 2; $a = 5; $b = 4;

(7)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

7

Paraméterátadás Érték szerinti: mindkét nyelvben van

■ az aktuális paraméterről egy másolat keletkezik a formális paraméterben, melynek

■ módosítása nem módosítja az aktuális paraméter értékét

Cím szerinti: C-ben nincs, PHP-ban van

■ a formális paraméter odakötődik az aktuális paraméter memóriacíméhez, így a

formális paraméter módosítása az aktuális

paramétert is módosítja.

(8)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

8

Paraméterátadás

function f($x, &$y){ $x = 3; $y = 4; }

C-ben alternatív megoldásként:

■ értékként átadhatjuk a változó címét egy mutatóba

■ mellyel módosítani tudjuk az aktuális paramétert.

int main(){

int a=1, b=2;

f(a, &b); … } void f(int x, int *y){

x = 3; *y = 4; }

$a = 1; $b = 2; f($a, $b);

$a 1 $x 1 $b 2 $y $a 1 $x 3 $b 4 $y

végül: $a = 1, $b = 4

a 1 x 1 b 2 y b címe

a 1 x 3 b 4 y b címe

végül: a = 1, b = 4

(9)

Alapvető programozásnyelvi elemek C-ben és PHP-ban

9

Kérdések, feladatok

1. Írjuk meg az előbbi példákat szemléltető programokat C-ben és PHP- ban.

2. Hogyha függvényben szeretnénk kiíratni egy paraméterként kapott tömb tartalmát, milyen paraméterátadási mód lesz hatékonyabb?

Megoldás. C-ben a tömb címét adjuk át (értékként), ez az alapértelmezett megoldás is. PHP-ban cím szerint adjuk át, bár az újabb verziókba be van építve a „copy on write technika”, melyről olvashatunk az ELTE-s PHP oldalon.

3. Milyen esetben érdemes paraméterátadás helyett globális változót használni és miért?

Megoldás. Amikor az átadandó változót a program nagy részében

használjuk és átláthatóan követni tudjuk annak módosítását. Ugyanis, a paraméterátadás több adminisztrációs tevékenységgel jár, ezért lassítja a program futását, viszont a globális változók módosítása nehezen

követhető lehet, ezért rontja a program átláthatóságát.

(10)

EFOP-3.4.3-16-2016-00014

AP1 HALLGATÓI DIPLOMA-SZERZÉST SEGÍTŐ SZOLGÁLTATÁSOK

10

AP1 Hallgatói diploma-szerzést segítő szolgáltatások

Jelen tananyag a

Szegedi Tudományegyetemen készült az

Európai Unió támogatásával.

Projekt azonosító:

EFOP-3.4.3-16-2016-00014

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Lemma: Ha és független valószínűségi változók, és folytonos függvények, akkor és is

Az akciókutatás korai időszakában megindult társadalmi tanuláshoz képest a szervezeti tanulás lényege, hogy a szervezet tagjainak olyan társas tanulása zajlik, ami nem

Az olyan tartalmak, amelyek ugyan számos vita tárgyát képezik, de a multikulturális pedagógia alapvető alkotóelemei, mint például a kölcsönösség, az interakció, a

A CLIL programban résztvevő pedagógusok szerepe és felelőssége azért is kiemelkedő, mert az egész oktatási-nevelési folyamatra kell koncentrálniuk, nem csupán az idegen

Nagy József, Józsa Krisztián, Vidákovich Tibor és Fazekasné Fenyvesi Margit (2004): Az elemi alapkész- ségek fejlődése 4–8 éves életkorban. Mozaik

A „bárhol bármikor” munkavégzésben kulcsfontosságú lehet, hogy a szervezet hogyan kezeli tudását, miként zajlik a kollé- gák közötti tudásmegosztás és a

„Én is annak idején, mikor pályakezdő korszakomban ide érkeztem az iskolába, úgy gondoltam, hogy nekem itten azzal kell foglalkoznom, hogy hogyan lehet egy jó disztichont

már CSZEPESSY; 1987) bizonyítást nyert.) A Cb ,bJ szakaszt fCx) önmagára képezi le, vagyis x. minden iterált pontja ebben a szakaszban marad. Tehát magasabbrendü fixpontok is