Asociativitatea operatorilor

Pentru conceptul matematic de asociativitate, vezi Proprietate asociativă.

În limbajele de programare, asociativitatea unui operator este o proprietate care determină modul în care sunt grupați operatorii de aceeași precedență în absența parantezelor. Dacă un operand este atât precedat, cât și urmat de operatori (de exemplu, ^ 3 ^), iar acești operatori au precedență egală, atunci operandul poate fi utilizat ca intrare pentru două operații diferite (adică cele două operații indicate de cei doi operatori). Alegerea operațiilor la care se aplică operandul este determinată de asociativitatea operatorilor. Operatorii pot fi asociativi (ceea ce înseamnă că operațiile pot fi grupate în mod arbitrar), asociativi la stânga (ceea ce înseamnă că operațiile sunt grupate dinspre stânga), asociativi la dreapta (ceea ce înseamnă că operațiile sunt grupate dinspre dreapta) sau neasociativi (ceea ce înseamnă că operațiile nu pot fi înlănțuite, adesea din cauză că tipul de ieșire este incompatibil cu tipurile de intrare). Asociativitatea și precedența unui operator face parte din definiția limbajului de programare; limbaje de programare diferite pot avea asociativitate și precedență diferite pentru același tip de operator.

Considerați expresia a ~ b ~ c. Dacă operatorul ~ are asociativitate stânga, această expresie ar fi interpretată ca (a ~ b) ~ c. Dacă operatorul are asociativitate dreapta, expresia ar fi interpretată ca a ~ (b ~ c). Dacă operatorul este neasociativ, expresia ar putea fi o eroare de sintaxă sau ar putea avea o semnificație specială. Unii operatori matematici au asociativitate inerentă. De exemplu, scăderea și împărțirea, așa cum sunt utilizate în notația matematică convențională, sunt inerent asociative la stânga. Adunarea și înmulțirea, în schimb, sunt atât asociative la stânga, cât și la dreapta. (de exemplu, (a * b) * c = a * (b * c)).

Multe manuale de limbaje de programare oferă un tabel de precedență și asociativitate a operatorilor; a se vedea, de exemplu, tabelul pentru C și C++.

Conceptul de asociativitate notațională descris aici este înrudit cu asociativitatea matematică, dar diferit de aceasta. O operație care este asociativă din punct de vedere matematic, prin definiție, nu necesită asociativitate notațională. (De exemplu, adunarea are proprietatea asociativă, prin urmare nu trebuie să fie nici asociativă la stânga, nici asociativă la dreapta). Cu toate acestea, o operație care nu este asociativă din punct de vedere matematic trebuie să fie asociativă la stânga, la dreapta sau neasociativă din punct de vedere notațional. (De exemplu, scăderea nu are proprietatea asociativă, prin urmare trebuie să aibă asociativitate notațională.)

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.