Přiřazení

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Příkaz přiřazení se vyskytuje ve většině imperativních programovacích jazyků. Způsobí nastavení či změnu hodnoty nějaké proměnné.

Zápis[editovat | editovat zdroj]

Přiřazení se nejčastěji zapisuje pomocí rovnítka:

cíl = výraz

V některých jazycích se (pro odlišení od operátoru porovnání) používá jiný operátor než =, např. := v jazyce Pascal, v učebnicích se někdy používá znak , ten však v praxi většinou není dostupný na klávesnici.

l-hodnota[editovat | editovat zdroj]

Cíl (který se podle konvence uvádí vlevo od přiřazení) může být pouze taková konstrukce, u které interpreter nebo překladač daného programovacího jazyka zná, kam bude hodnota uložena. Cíl tedy může být popsán přímo jménem proměnné nebo objektového atributu či tzv. vlastnosti (ve vyšších programovacích jazycích) a nebo (u těch nižších) registrem s výrazem, který nějak určuje cílovou adresu, na kterou má být příslušná hodnota uložena. Některé jazyky pomocí přiřazení abstrahují i např. zápis na některý ze vstupních portů počítače; v takovém případě není cíl určen místem v paměti ale číslem tohoto portu. Vyšší objektové jazyky dovolují přiřazení určité vlastnosti objektu abstrahovat za zavolání objektové metody s hodnotou, jež má být přiřazena, jako parametrem, a je pak na programátorovi aby spolu s přiřazením provedl libovolnou operaci, např. hodnotu zkontroloval a případně odmítl, a podobně.

Některé výrazy však popisují pouze hodnotu, nikoli adresu (např. číselný literál), takové výrazy nemohou být jako cíl přiřazení použity. Bylo „nepsaným pravidlem“ dohodnuto (a většina programovacích jazyků, s výjimkou některých assemblerů, to dodržuje), že cíl, do kterého lze přiřadit (a tedy i předat, zapsat či odeslat hodnotu), bude nalevo od operátoru přiřazení. Tento koncept se někdy označuje jako l-hodnota (anglicky l-value z left-value, tj. „levá hodnota“).

Příklad[editovat | editovat zdroj]

Jazyk C
i = 10;
*j = i + 3;
k[2] = foo(i, j);
Jazyk Pascal
i := 10;
j^ := i + 3;
k[2] := foo(i, j);