Kifejezés
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