Operátor (programování)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Operátor je v programovacích jazycích symbol používaný ve výrazech, který předepisuje provedení nějaké (nejčastěji matematické nebo logické) operace s hodnotami (operandy) zapsanými ve svém okolí. Výsledkem použití operátoru je podobně jako u funkce hodnota; způsob použití operátorů se však zpravidla od funkcí liší syntakticky i sémanticky.

K nejrozšířenějším operátorům dostupným ve většině programovacích jazyků patří binární operátory +, -, *, / pro sčítání, odčítání, násobení a dělení čísel.

Jména operátorů

Operátory často tvoří zvláštní lexikální kategorii a zapisují se jedním nealfanumerickým znakem, případně řetězcem nealfanumerických znaků. V některých jazycích se mohou operátory zapisovat jako identifikátory nebo se může jednat o klíčová slova.

Syntaxe

Operátory se syntakticky obvykle výrazně odlišují od funkcí. Zatímco u funkcí zpravidla existuje jediný pevně stanovený způsob zápisu volání funkce (nejčastěji jméno funkce následované závorkami, které obsahují seznam parametrů vzájemně oddělených čárkami), operátory mohou používat odlišné způsoby zápisu.

Operátor mívá obvykle stanovenou

* Aritu - počet operandů, které vyžaduje; nejpoužívanější operátory jsou binární (se dvěma operandy), rozšířené jsou i unární (s jedním operandem), v některých jazycích jsou i operátory s vyšší aritou (především ternární se třemi operandy) * Umístění vůči svému operandu nebo operandům - operátory mohou být prefixové (operátor se píše před operand nebo operandy), postfixové (operátor se píše za operand nebo operandy), binární operátory navíc též infixové (operátor se píše mezi operandy) * Prioritu - jak těsně operátory vážou k sobě operandy v porovnání s jinými operátory (týká se infixových binárních operátorů, případně kombinace prefixových a postfixových unárních operátorů); přednostní vyhodnocení části výrazu lze obvykle předepsat pomocí závorek * Asociativitu - zda je možné použít stejný operátor vícekrát a zda se při použití více operátorů vyhodnocuje výraz zleva doprava nebo zprava doleva

Sémantika

Sémantiku operátorů obvykle definuje norma jazyka. V některých jazycích je možné rozšiřovat operátory na nové typy, definovat vlastní operátory, případně chování operátorů předefinovávat. +more Sémantika operátoru může záviset na typech použitých operandů.

Druhy operátorů

Aritmetické operace

Většina programovacích jazyků používá binární operátory +, -, *, / pro sčítání, odčítání, násobení a dělení čísel. Pro celočíselné dělení se zbytkem se v některých jazycích používá zvláštní operátor div, jiné jazyky použijí celočíselné dělení pokud jsou oba operandy celočíselné. +more Pro zbytek po celočíselném dělení se nejčastěji používá binární infixový operátor % nebo mod. Některé jazyky mají operátor pro umocňování, který má většinou asociativitu zprava.

Relační operace

Jako relační jsou zpravidla označovány operátory, které vracejí logickou (pravdivostní) hodnotu. Typicky mezi ně patří operátory pro test na rovnost a nerovnost zapisované = nebo == (je rovno), příp. +more <>, . =, =/= (není rovno), < <=, >, >= pro porovnávání čísel nebo lexikografické porovnávání řetězců. Některé jazyky používají operátory, jejichž jména jsou alfanumerické řetězce: obvykle eq pro je rovno, ne nebo neq pro není rovno, lt pro menší než, le nebo lte pro menší nebo rovno, ge nebo gte pro větší nebo rovno. Pro odlišení od identifikátorů se operátory v některých jazycích píší mezi tečky (. LT. ).

Některé jazyky mají pro porovnání dvou hodnot operátory <=> a/nebo cmp, které vracejí hodnoty -1, 0 nebo 1 pro menší než, rovno, větší než.

Logické operace

Většina jazyků má operátory pro logické operace: unární not, ! nebo jiné pro logickou negaci and, & nebo && pro logickou konjunkci (a zároveň), or, | nebo || pro logickou disjunkci (nebo), případně xor nebo ^ pro non-ekvivalenci (buď-anebo).

Při vyhodnocování binárních logických operátorů pro konjunkci a disjunkci je důležité, zda provádějí zkrácené (jazyk C) nebo úplné (standardní Pascal) vyhodnocení. Při zkráceném vyhodnocování se přeskakuje vyhodnocování podvýrazů, které nemohou ovlivnit logickou hodnotu celého výrazu; přeskakuje se vyhodnocování druhého operandu v konjunkci, pokud první operand je nepravdivý (výsledek konjunkce bude nepravdivý bez ohledu na hodnotu druhého operandu); podobně se přeskakuje vyhodnocování druhého operandu v disjunkci, pokud první operand je pravdivý (výsledek disjunkce bude pravdivý bez ohledu na hodnotu druhého operandu). +more Protože se často jedná o konstrukce, ve kterých by vyhodnocování druhého operandu skončilo chybou, jeví se zkrácené vyhodnocování jako užitečnější.

Příklad:

Konstrukce

while (ptr nil) and (ptr^.next nil) do ptr:=ptr^.next;

ve standardním Pascalu skončí chybou, pokud ukazatel ptr má na začátku hodnotu nil. Obdobnou konstrukci lze v jazyce C napsat takto:

while (ptr != NULL && ptr->next != NULL) ptr = ptr->next;

a lze ji použít pro posunutí ukazatele na předposlední prvek spojového seznamu.

Podmíněný výraz

Podmíněný výraz je konstrukce, která obsahuje logickou podmínku a další dva výrazy; podle logické hodnoty podmínky se použije buď jeden nebo druhý z výrazů.

V některých jazycích se podmíněný výraz zapisuje podobně jako podmíněný příkaz, tj. pomocí klíčových slov if, then, else, jazyk C zavedl pro podmíněný výraz konstrukci podmínka . +more výraz1 : výraz2, která byla převzata do mnoha dalších jazyků.

Operátor přiřazení

Část jazyků považuje přiřazení za operátor, takže lze přiřazení použít v dalším výrazu.

V jiných jazycích (Pascal) se přiřazení vyskytuje pouze v příkazu přiřazení, takže přiřazení může být v příkazu nejvýše jedno, a symbol přiřazení lze považovat za oddělovač.

Vlastnosti operátorů v programovacích jazycích

Následující tabulka shrnuje vlastnosti operátorů v několika programovacích jazycích:

{| class="sortable wikitable" |- . Programovací jazyk . +moreNealfanumerické operátory . Alfanumerické operátory . Prefixový . Infixový . Postfixový . Priorita . Asociativita . Přetěžování . Programátorem definované přetěžování . Programátorem definované symboly operátorů |- | ALGOL 68 | +* ** * / % %* %× - + < <= >= > = /= & -:= +:= *:= /:= %:= %*:= +=: :=: :/=: (Všechny operátory mají alfanumerické ekvivalenty uvedené polotučně, viz další sloupec. některé mají ne-ASCII ekvivalenty, viz níže. ) ¬ +× ⊥ ↑ ↓ ⌊ ⌈ × ÷ ÷× ÷* □ ≤ ≥ ≠ ∧ ∨ ×:= ÷:= ÷×:= ÷*:= %×:= :≠: | not abs arg bin entier leng level odd repr round shorten i shl shr up down lwb upb lt le ge gt eq ne and or over mod elem minusab plusab timesab divab overab modab plusto is isnt | | | | (prefixové operátory mají vždy prioritu 10) | Infixové operátory jsou asociativní zleva, prefixové operátory jsou asociativní zprava | | | |- | C | rowspan="3" | [] -> . . ~ ++ -- + - * & / % > >= | sizeof | | | | | | | | |- | C++ (more) | sizeof typeid new delete throw decltype static cast dynamic cast reinterpret cast const cast | | | | | | | | |- | Java | new instanceof | | | | | | | | |- | Haskell | + - * / ^ ^^ ** == /= > = >= >> $ $. . ++ . : Many more in common libraries | bgcolor="yellow" | Jméno funkce musí být v obrácených apostrofech | | | | | | colspan="2" | , pomocí typových tříd | |- | Pascal | * / + - = = := | not div mod and or in | | | | | | | | |- | Seed7 | {} [] -> ** . + - * / > & > > >= >:= &:= @:= | conv varConv parse conj div rem mdiv mod times mult in not and or digits lpad rpad lpad0 | | | | | | | | |- | Eiffel | [] + - * / // = /= | not and or implies "and then" "or else" | | | | | | | | |- | Prolog | :- . - ; , . =. = \= = >.

\

- + / * | spy nospy not is mod | | | | | | | | |- | Lisp | Lisp definuje všechny funkce a symboly jako operátory. Podle definice na této stránce nemá Lisp žádné operátory. +more | | (operátory jsou normální funkce) | | | | | | | |- | Smalltalk | (Ano - max. 2 znaky) | bgcolor="yellow" | Za klíčovým slovem musí mít alfanumerické symboly dvojtečku | | | | | | | | |- | Perl | -> ++ -- ** . ~ \ + - . =~ . ~ * / % = == . = ~~ & | ^ && || ' // . . . : = += -= *= , => | print sort chmod chdir rand and or not xor lt gt le ge eq ne cmp x | | | | | | | | |}.

Odkazy

Reference

Související články

Výraz (programování)

Externí odkazy

Kategorie:Programovací konstrukce *

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top