Associativiteit van operatoren

Voor het wiskundige begrip associativiteit, zie Associatieve eigenschap.

In programmeertalen is de associativiteit van een operator een eigenschap die bepaalt hoe operatoren met dezelfde precedentie worden gegroepeerd bij afwezigheid van haakjes. Indien een operand zowel wordt voorafgegaan als gevolgd door operatoren (bijvoorbeeld ^ 3 ^), en die operatoren hebben gelijke voorrang, dan kan de operand worden gebruikt als invoer voor twee verschillende operatoren (d.w.z. de twee operatoren die door de twee operatoren worden aangegeven). De keuze van de operand wordt bepaald door de associativiteit van de operatoren. Operatoren kunnen associatief zijn (d.w.z. dat de operatoren willekeurig gegroepeerd kunnen worden), links-associatief (d.w.z. dat de operatoren van links gegroepeerd worden), rechts-associatief (d.w.z. dat de operatoren van rechts gegroepeerd worden) of niet-associatief (d.w.z. dat operatoren niet gegroepeerd kunnen worden, vaak omdat het uitgangstype incompatibel is met het ingangstype). De associativiteit en voorrang van een operator maken deel uit van de definitie van de programmeertaal; verschillende programmeertalen kunnen verschillende associativiteit en voorrang hebben voor hetzelfde type operator.

Bekijk de uitdrukking a ~ b ~ c. Als de operator ~ een links associativiteit heeft, zou deze uitdrukking worden geïnterpreteerd als (a ~ b) ~ c. Als de operator rechts associativiteit heeft, zou de uitdrukking worden geïnterpreteerd als a ~ (b ~ c). Als de operator niet-associatief is, kan de uitdrukking een syntaxisfout zijn, of kan de uitdrukking een speciale betekenis hebben. Sommige wiskundige operatoren hebben inherente associativiteit. Bijvoorbeeld, aftrekken en delen, zoals gebruikt in de conventionele wiskundige notatie, zijn inherent links-associatief. Optellen en vermenigvuldigen daarentegen zijn zowel links- als rechts-associatief. (b.v. (a * b) * c = a * (b * c)).

In veel handleidingen voor programmeertalen vindt u een tabel met de rangorde en associativiteit van operatoren; zie bijvoorbeeld de tabel voor C en C++.

Het hier beschreven concept van notationele associativiteit is verwant aan, maar verschilt van de mathematische associativiteit. Een bewerking die mathematisch associatief is, heeft per definitie geen notationele associativiteit nodig. (Bijvoorbeeld, optellen heeft de associatieve eigenschap, en hoeft dus niet links-associatief of rechts-associatief te zijn). Een bewerking die niet mathematisch associatief is, moet echter notationeel links-, rechts-, of niet-associatief zijn. (Bijvoorbeeld, aftrekken heeft niet de associatieve eigenschap, dus moet het notationele associativiteit hebben.)

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.