Operatørassociativitet

For det matematiske begreb associativitet, se Associativ egenskab.

I programmeringssprog er en operators associativitet en egenskab, der bestemmer, hvordan operatorer med samme præcedens grupperes i mangel af parenteser. Hvis en operand både indledes og efterfølges af operatorer (f.eks. ^ 3 ^), og disse operatorer har samme præcedens, kan operanden bruges som input til to forskellige operationer (dvs. de to operationer, der er angivet af de to operatorer). Valget af, hvilke operationer operanden skal anvendes til, bestemmes af operatorernes associativitet. Operatorer kan være associative (hvilket betyder, at operationerne kan grupperes vilkårligt), venstre-associative (hvilket betyder, at operationerne grupperes fra venstre), højre-associative (hvilket betyder, at operationerne grupperes fra højre) eller ikke-associative (hvilket betyder, at operationerne ikke kan kædes sammen, ofte fordi udgangstypen er uforenelig med indgangstyperne). En operators associativitet og præcedens er en del af definitionen af programmeringssproget; forskellige programmeringssprog kan have forskellig associativitet og præcedens for den samme type operatør.

Opnå udtrykket a ~ b ~ c. Hvis operatoren ~ har venstreassociativitet, ville dette udtryk blive fortolket som (a ~ b) ~ c. Hvis operatoren har højre associativitet, ville udtrykket blive fortolket som a ~ (b ~ c). Hvis operatoren er ikke-associativ, kan udtrykket være en syntaksfejl, eller det kan have en særlig betydning. Nogle matematiske operatorer har iboende associativitet. F.eks. er subtraktion og division, som de anvendes i konventionel matematisk notation, i sagens natur venstre-associative. Addition og multiplikation er derimod både venstre- og højreassocierende. (f.eks. (a * b) * c = a * (b * c)).

Mange manualer til programmeringssprog indeholder en tabel over operatorpræcedens og associativitet; se f.eks. tabellen for C og C++.

Det her beskrevne begreb om notationsassociativitet er beslægtet med, men forskelligt fra den matematiske associativitet. En operation, der er matematisk associativ, kræver pr. definition ingen notationel associativitet. (F.eks. har addition den associative egenskab, og derfor behøver den ikke at være hverken venstre- eller højreassocierende). En operation, der ikke er matematisk associativ, skal imidlertid være notationelt venstre-, højre- eller ikke-associativ. (F.eks. har subtraktion ikke den associative egenskab, og derfor skal den have notationel associativitet.)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.