Operátorok asszociativitása

Az asszociativitás matematikai fogalmához lásd: asszociatív tulajdonság.

A programozási nyelvekben az operátorok asszociativitása egy olyan tulajdonság, amely meghatározza, hogy zárójelek hiányában az azonos precedenciájú operátorok hogyan csoportosulnak. Ha egy operandus előtt és után is operátorok állnak (például ^ 3 ^), és ezek az operátorok azonos precedenciájúak, akkor az operandus két különböző művelet (azaz a két operátor által jelzett két művelet) bemeneteként használható. Azt, hogy az operandus melyik művelethez alkalmazható, az operátorok asszociativitása határozza meg. Az operátorok lehetnek asszociatívak (azaz a műveletek tetszőlegesen csoportosíthatók), balra asszociatívak (azaz a műveletek balról csoportosíthatók), jobbra asszociatívak (azaz a műveletek jobbról csoportosíthatók) vagy nem asszociatívak (azaz a műveletek nem láncolhatók, gyakran azért, mert a kimeneti típus nem kompatibilis a bemeneti típusokkal). Az operátor asszociativitása és precedenciája a programozási nyelv definíciójának része; a különböző programozási nyelvek eltérő asszociativitást és precedenciát alkalmazhatnak ugyanarra az operátortípusra.

Vizsgáljuk meg a a ~ b ~ c kifejezést. Ha az ~ operátor balra asszociativitású, akkor ezt a kifejezést (a ~ b) ~ c-ként értelmeznénk. Ha az operátor jobb asszociativitású, akkor a kifejezést a ~ (b ~ c)-ként értelmezzük. Ha az operátor nem asszociatív, a kifejezés lehet, hogy szintaktikai hiba, vagy lehet, hogy valamilyen speciális jelentése van. Egyes matematikai operátorok eredendően asszociatívak. Például a hagyományos matematikai jelölésekben használt kivonás és osztás eredendően balra asszociatív. Az összeadás és a szorzás ezzel szemben balra és jobbra egyaránt asszociatív. (pl. (a * b) * c = a * (b * c)).

Néhány programozási nyelv kézikönyve táblázatot ad az operátorok elsőbbségéről és asszociativitásáról; lásd például a C és a C++ táblázatát.

Az itt leírt notációs asszociativitás fogalma kapcsolódik a matematikai asszociativitáshoz, de különbözik attól. Egy matematikailag asszociatív művelet definíció szerint nem igényel notációs asszociativitást. (Például az összeadásnak megvan az asszociatív tulajdonsága, ezért nem kell sem balra, sem jobbra asszociatívnak lennie). Egy olyan műveletnek azonban, amely matematikailag nem asszociatív, notációsan bal-, jobb- vagy nem-asszociatívnak kell lennie. (Például a kivonás nem rendelkezik asszociatív tulajdonsággal, ezért notációs asszociativitással kell rendelkeznie.)

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.