Gyakorlati alapok II.

Érték és cím szerinti paraméterátadás

 

A címben lévő fogalmak megértéséhez először olvassuk el az Ezt sajnos most kell tisztáznunk: mutató és referencia című fejezetet.

 

Az objektumorientált nyelvek egyik legfontosabb jellegzetessége, hogy a programfunkciók szétoszthatók, megoszthatók a metódusok között (tegyük hozzá: (az objektumorientált alapelvből következően ez kötelező is). Ennek sokféle követelménye van, az egyikük az, hogy a metódusok bemeneti adatokat, paramétereket kaphatnak, amit aztán belső programjuk szerint kimeneti adatokká alakítanak át (ez a return utasítás utáni érték).

 

Érték szerinti paraméterátadás

Eddig nem volt feltűnő, sőt a Java-nyelvben szinte alapértelmezésnek vettük, hiszen ez a logikus, hogy a bemeneti adatok, paraméterek azok a kiindulópontok, ahonnan a metódus elkezdi működését, hogy aztán megfelelő kimeneti adatokat kapjunk. Ehhez csupán az kellett, amit egyébként a Java alkotói biztonsági szempontból szintén észrevettek-, hogy a bemeneti adatokat senki és semmi se tudja megváltoztatni.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A Java nyelv így is tesz: a metódus bemeneti adatait semmi sem tudja megváltoztatni, legfőképpen nem maga a metódus. Az ilyen jellegű paraméterátadást érték szerinti paraméterátadásnak nevezzük. Technikailag nézve ez kizárólag referenciákkal történik.

 

Cím szerinti paraméterátadás

Ha a Java nyelvben működne a memóriacímképző & operátor, akkor (elméletileg) egy dedikált memóriaterület közvetlenül elérhetővé, ezáltal a benne tárolt tartalom módosíthatóvá válna. 

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Ezt a fajta paraméterátadást cím szerinti paraméterátadásnak nevezzük. Talán legfőbb jellegzetessége, hogy a bemeneti paraméterként kapott változót maga a metódus is képes megváltoztatni.

 

Ilyen példát a Java nyelvben nem tudunk megmutatni, ezért más programozási nyelvekhez kell fordulnunk. Dr. Czirkos Zoltán honlapja szerint (www.eet.bme.hu/~czirkos/) a C++ nyelv vezette be a cím szerinti paraméterátadást. Az alábbi kód alapja onnan származik (Referenciák című fejezet):

 

void szamol(int a, int b, int& osszeg, int& szorzat) {
    osszeg = a + b;
    szorzat = a * b;
}

int o, sz;
szamol(5, 9, o, sz);

 

A Java nyelvben jártasak a kódot minimum szokatlannak minősíthetik, hiszen jól látható, ahogy a metódus bemeneti paraméterlistája direkt memóriacímzéssel kimeneti adatokat is tartalmaz. Memóriacímek közvetlen címzése és ilyetén használata még nyilvánvaló veszélyei ellenére is mindenképpen praktikus és előnyös, bár igen távol áll a Javában elvárt és megszokott programozási szabványoktól.