Asociativita operátorů

Matematický pojem asociativita viz Asociativní vlastnost.

Asociativita operátoru je v programovacích jazycích vlastnost, která určuje, jak jsou operátory stejné priority seskupeny, pokud nejsou použity závorky. Pokud operandu předchází i následuje operátor (například ^ 3 ^) a tyto operátory mají stejnou prioritu, pak může být operand použit jako vstup pro dvě různé operace (tj. dvě operace označené oběma operátory). Volba, na které operace se operand použije, je určena asociativitou operátorů. Operátory mohou být asociativní (což znamená, že operace lze libovolně seskupovat), asociativní zleva (což znamená, že operace jsou seskupovány zleva), asociativní zprava (což znamená, že operace jsou seskupovány zprava) nebo neasociativní (což znamená, že operace nelze řetězit, často proto, že výstupní typ není kompatibilní se vstupními typy). Asociativita a precedence operátoru je součástí definice programovacího jazyka; různé programovací jazyky mohou mít pro stejný typ operátoru různou asociativitu a precedenci.

Považte výraz a ~ b ~ c. Pokud by operátor ~ měl levostrannou asociativitu, byl by tento výraz interpretován jako (a ~ b) ~ c. Pokud má operátor pravostrannou asociativitu, byl by tento výraz interpretován jako a ~ (b ~ c). Pokud je operátor neasociativní, může být výraz syntaktickou chybou nebo může mít nějaký speciální význam. Některé matematické operátory mají přirozenou asociativitu. Například odčítání a dělení, jak se používají v běžném matematickém zápisu, jsou ze své podstaty levoasociativní. Naproti tomu sčítání a násobení jsou asociativní jak zleva, tak zprava. (např. (a * b) * c = a * (b * c)).

V mnoha příručkách programovacích jazyků je uvedena tabulka precedence a asociativity operátorů; viz například tabulka pro jazyky C a C++.

Popisovaný koncept notační asociativity souvisí s matematickou asociativitou, ale liší se od ní. Operace, která je matematicky asociativní, z definice nevyžaduje notační asociativitu. (Například sčítání má asociativní vlastnost, proto nemusí být ani asociativní vlevo, ani asociativní vpravo). Operace, která není matematicky asociativní, však musí být notačně levá, pravá nebo neasociativní. (Například odčítání nemá asociativní vlastnost, proto musí být notačně asociativní.)

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.