Operaattorin assosiatiivisuus

Assosiatiivisuuden matemaattisesta käsitteestä, katso Assosiatiivinen ominaisuus.

Ohjelmointikielissä operaattorin assosiatiivisuus on ominaisuus, joka määrittää, miten saman etusijajärjestyksen omaavat operaattorit ryhmitellään sulkujen puuttuessa. Jos operandia edeltävät ja seuraavat operaattorit (esimerkiksi ^ 3 ^) ja näillä operaattoreilla on sama etusija, niin operandia voidaan käyttää kahden eri operaation syötteenä (eli kahden operaattorin osoittamat kaksi operaatiota). Se, mihin operaatioon operandia käytetään, määräytyy operaattoreiden assosiatiivisuuden mukaan. Operaattorit voivat olla assosiatiivisia (eli operaatiot voidaan ryhmitellä mielivaltaisesti), vasemmalta assosiatiivisia (eli operaatiot ryhmitellään vasemmalta), oikealta assosiatiivisia (eli operaatiot ryhmitellään oikealta) tai ei-assosiatiivisia (eli operaatioita ei voida ketjuttaa, usein siksi, että ulostulotyyppi ei ole yhteensopiva syötetyyppien kanssa). Operaattorin assosiatiivisuus ja etusijajärjestys on osa ohjelmointikielen määritelmää; eri ohjelmointikielillä voi olla erilainen assosiatiivisuus ja etusijajärjestys samantyyppiselle operaattorille.

Tarkastellaan lauseketta a ~ b ~ c. Jos operaattorilla ~ on vasen assosiatiivisuus, tämä lauseke tulkitaan (a ~ b) ~ c:ksi. Jos operaattorilla on oikeanpuoleinen assosiatiivisuus, lauseke tulkitaan a ~ (b ~ c). Jos operaattori ei ole assosiatiivinen, lausekkeessa voi olla syntaksivirhe tai sillä voi olla jokin erityinen merkitys. Joillakin matemaattisilla operaattoreilla on luontainen assosiatiivisuus. Esimerkiksi vähennyslasku ja jako, joita käytetään tavanomaisessa matemaattisessa notaatiossa, ovat luonnostaan vasemmalle assosiatiivisia. Yhteen- ja kertolasku sen sijaan ovat sekä vasemmalle että oikealle assosiatiivisia. (esim. (a * b) * c = a * (b * c)).

Monissa ohjelmointikielten käsikirjoissa on taulukko operaattoreiden etusijajärjestyksestä ja assosiatiivisuudesta; katso esimerkiksi C:n ja C++:n taulukko.

Tässä kuvattu notaationaalisen assosiatiivisuuden käsite liittyy matemaattiseen assosiatiivisuuteen, mutta eroaa siitä. Operaatio, joka on matemaattisesti assosiatiivinen, ei määritelmän mukaan vaadi notaarista assosiatiivisuutta. (Esimerkiksi yhteenlaskulla on assosiatiivinen ominaisuus, joten sen ei tarvitse olla joko vasemmalle tai oikealle assosiatiivinen). Operaation, joka ei ole matemaattisesti assosiatiivinen, on kuitenkin oltava notaarisesti vasen-, oikea tai ei-assosiatiivinen. (Esimerkiksi vähennyslaskulla ei ole assosiatiivista ominaisuutta, joten sen on oltava notaarisesti assosiatiivinen.)

Vastaa

Sähköpostiosoitettasi ei julkaista.