Kifejezés

A Programozás Wiki wikiből

A programnyelvekben kifejezésnek nevezzük a program egy olyan részét, amely egy kiértékelhető műveletsort ír le.

A kifejezés eredménye jellemzően egy érték (szám, szöveg, objektum). A típusos nyelvek esetén a kifejezések típussal is rendelkeznek. Az erősen típusos nyelveknél ez már fordítási időben is meghatározható.

Fajtái[szerkesztés]

Egy programnyelvi kifejezés általában változók és literálok műveletekkel összekapcsolt halmaza. A műveletek lehetnek matematikai, logikai, szövegfeldolgozási műveletek, illetve az elemek a program, valamilyen könyvtár, vagy a nyelv beépített függvényeivel, metódusaival is összekapcsolhatók.

Többnyire maguk a változók, vagy literálok is kezelhetők kifejezésként, sőt, egyes nyelvekben (pl. C) egy visszatérési érték nélküli függvény hívása is tekinthető annak.

A programokban előforduló makró hívások, és feltételes fordítási direktívák is felfoghatók kifejezésekként, annak ellenére, hogy ezek gyakran nem a programozási, hanem a makrónyelv részei.

Műveleti sorrend[szerkesztés]

A programnnyelvek többnyire rögzítik a kifejezés egyes műveleteinek elvégzési sorrendjét. Ezt rendszerint a műveletek ún. precedenciája határozza meg. A sorrend jellemzően a matematikában megszokottakon alapul. Az alapműveleteken túli területeken kisebb-nagyobb eltérések tapasztalhatók az egyes nyelvek között.

Egyes műveletek sorrendje bizonyos nyelvekben nem teljesen meghatárzott, például Pascal-ban a logikai kifejezések, C-ben a függvény-argumentumok kiértékelési rendje nem definiált. Ilyenkor a fordító, vagy a futtató környezet dönt afelől, hogy pontosan hogyan zajlik a kiértékelés.

Mellékhatás[szerkesztés]

A funkcionális és lekérdező nyelvektől eltekintve a kifejezések mellékhatással is rendelkezhetnek. Azon túl, hogy meghatározzák az eredményt, az egyes műveletek más adatokat (fájlokat, rendszereket) is módosíthatnak. Ez leginkább függvény, vagy metódus hívások esetén jellemző.

Példák[szerkesztés]

Néhány példa C++-ban

6+5*3 // aritmetikai kifejezés

*(++x) += 5 // kifejezés mellékhatással

figure.move() || gui.message( "Cannot move" ) // metódus-hívást tartalmazó kifejezés