Operator (programowanie)

Operator – konstrukcja językowa jedno-, bądź wieloargumentowa zwracająca wartość.

Do podstawowych operatorów, będących elementem większości języków programowania, należą operatory arytmetyczne: dodawania (+), odejmowania (-), mnożenia (*), dzielenia (/); operatory porównania: większe niż (>), mniejsze niż (<), większe równe (>=), mniejsze równe (<=), równe (= lub ==), różne (<> lub !=), a także operatory operacji logicznych, operacji bitowych, przypisań itd. Główne cechy opisujące operator to liczba i typy argumentów, typ wartości zwracanej, wykonywane działanie, priorytet oraz łączność lub jej brak oraz umiejscowienie operatora względem operandów. Dany język posiada swoją listę operatorów wraz z określonymi cechami, mówiącymi o kolejności wykonywania operacji w przypadku, gdy nie zastosowano nawiasów. W niektórych językach można definiować nowe operatory oraz zmieniać priorytety i łączność.

Umiejscowienie względem operandów

Operator umieszczany przed swoimi operandami nazywa się operatorem przedrostkowym (prefiksowym), po operandach — przyrostkowym (postfiksowym), pomiędzy operandami — wrostkowym (infiksowym). Dla operatorów składających się z kilku symboli leksykalnych powyższe rozróżnienie nie zachodzi.

Pierwszeństwo, priorytet

Pierwszeństwo operatorów określa jak należy interpretować wyrażenie gdzie na jednym poziomie (struktury nawiasowej) występują dwa operatory. Przykładowo a + b * c może być interpretowane jako (a + b) * c lub a + (b * c). Gdy + ma wyższy priorytet niż *, zachodzi sytuacja pierwsza. Gdy jest na odwrót — druga. Projektanci języków programowania starają się tak dobierać priorytety, żeby odpowiadały intuicji w typowych konstrukcjach. Na przykład operatory arytmetyczne mają priorytety zgodne z kolejnością wykonywania działań, niższy priorytet mają operatory porównania a jeszcze niższy operatory logiczne. Dlatego wyrażenie 1+2*x < 3 || x==0 nie musi być zapisane jako ((1+(2*x)) < 3) || (x==0).

Łączność, wiązanie

 Osobny artykuł: Łączność (matematyka).

Łączność to cecha operatorów pozwalająca jednoznacznie interpretować wyrażenie w którym występują operatory o tym samym priorytecie (w szczególności kilka wystąpień tego samego operatora). Wyrażenie a+b-c będzie zinterpretowane jako (a+b)-c jeśli operatory + i - są lewostronnie łączne a a+(b-c) jeśli prawostronnie łączne. Operatory o tym samym priorytecie ale innej łączności nie mogą być mieszane ze sobą. Operatory mogą nie być łączne, wtedy również ich mieszanie z innymi jest niedozwolone. W większości języków podstawowe operatory arytmetyczne są łączne lewostronnie, natomiast operatory potęgowania czy przypisania prawostronnie.

Przykładowy zapis w języku C

(zmienna liczba jest typu int)

liczba *= ((liczba=10) + 7) % 3;

Nawiasy w tym przypadku wymusiły zmianę priorytetów operatorów. Działania wykonane zostaną w porządku narzuconym przez nawiasy. To samo wyrażenie pozbawione nawiasów:

liczba *= liczba = 10 + 7 % 3;

jest również poprawne ze względu na składnię. Wynik będzie jednak inny – pierwsza wykonana zostanie operacja dzielenia modulo, następnie dodawania, a na końcu oba przypisania od prawej do lewej.

W języku C kolejność obliczania operandów operatora nie jest gwarantowana ze względu na zastrzeżenie możliwości optymalizacji kodu wynikowego przez kompilator (nie dotyczy to operatorów &&, ||, ?: oraz ,). Użycie operandów, których obliczenie wartości wpływa na wartość pozostałych nie gwarantuje takiego samego wyniku we wszystkich implementacjach języka.

Np. kod:

int i = 1;
tablica[i] = i++;

nie gwarantuje, czy wartość 1 zostanie wstawiona pod indeks 1, czy może pod indeks 2 tablicy.

Zobacz też

Bibliografia

  • Brian W. Kernighan, Dennis M. Ritchie: Język ANSI C. Warszawa: WNT, 2004. ISBN 83-204-2979-X.
  • Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Kompilatory Reguły, metody i narzędzia. Warszawa: WNT, 2002, seria: Klasyka informatyki. ISBN 83-204-2656-1.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya