Výrazy, operandy a operátory
Definice výrazů
Posloupnost
operandů a operátorů se nazývá výraz. Často však je výraz reprezentován
jediným operandem. Výrazy jsou podstatnými složkami příkazů. Výsledkem
vyhodnocení výrazu je hodnota - údaj. Podle typu výsledné hodnoty
(vyhodnocení) se určuje typ výrazu.
Vyhodnocení
a zobrazení výrazu lze snadno dosáhnout v Command okně, když se před výraz
zapíše otazník ( v podstatě obecný příkaz tisku či zobrazení). Tohoto příkazu
bude použito v příkladech výrazů. Na následujícím řádku bude pak
zobrazen výsledek vyhodnocení.
Typy výrazů
V
popisu příkazů se používá k vyznačení povolených typů výrazů následující
symboliky:
<výraz > = výraz libovolného typu
<výrazC> = výraz znakového typu (Character)
<výrazN> = výraz číselného typu (Numeric )
<výrazL> = výraz logického typu (Logical )
<výrazD> = výraz datového typu (Date )
Operandy
Oprandy
jsou:
- konstanty
- proměnné
- položky
- pole či jejich prvky
-
funkce
Operátory
Operátor
je symbol nebo posloupnost znaků, které předepisují operaci potřebnou k
dosažení požadovaného výsledku, prováděnou s jednou nebo více hodnotami
(operandy).
Operátory
se dělí na řetězcové, aritmetické, relační a logické. (Podle počtu
operandů se dělí na unární a binární. Unární jsou v podstatě pouze
znaménka operandů a negace. Všechny ostatní jsou binární.)
Řetězcové operátory
Lze uplatnit pouze na
operandy typu C. Řetězcové operace se provádějí ve výrazu zleva.
OPERÁTOR VÝSLEDEK OPERACE
─────────────────────────────────────────────────────────
Spojení dvou řetězců do jednoho
+ řetězce. Pravostranné mezery
zůstávají na původních pozicích.
─────────────────────────────────────────────────────────
Spojení dvou řetězců do jednoho
- řetězce. Pravostranné mezery
prvního operandu se přesunou na
konec výsledného řetězce.
? 'Adam '+ 'Šangala
'
Adam Šangala
? "nej "
- "větší"
největší
Aritmetické operátory
Aritmetické
operátory mohou být aplikované pouze na číselné nebo datové operandy
(typu N, F, D). Operátory se vyhodnocují v pořadí uvedeném v tabulce, pokud
není pořadí změněno závorkami.
OPERÁTOR VÝSLEDEK OPERACE
──────────────────────────────────────────────────
** nebo ^ Mocnina
──────────────────────────────────────────────────
* Součin
/ Podíl
% Modulo (zbytek)
──────────────────────────────────────────────────
+ Součet
- Rozdíl
──────────────────────────────────────────────────
U
datových operandů mají smysl pouze operátory + nebo -. K datu lze připočítat
(odpočítat) celé číslo ve významu "počet dnů". Výsledkem je
datum. Lze odčítat dvě data, výsledkem je počet dnů.
? 2^3
8
? 2*3**2
18
? {31.1.91}+1
01.02.91.
? 2 + 6 * 3 - 1
19
? 13%5
3
Relační operátory
Slouží
k porovnávání dvou operandů. Operandy musí být stejného typu. U řetězců
rozhodují hodnoty ASCII kódů. Vyhodnocují se ve výrazu zleva. Výsledkem
operace je vždy logická hodnota, vyjadřující vztah (poměr) operandů.
OPERÁTOR NÁZEV RELACE
──────────────────────────────────────────────────────────
1)
= pragmatické porovnání
──────────────────────────────────────────────────────────
== exaktní porovnáni
──────────────────────────────────────────────────────────
< menší než
──────────────────────────────────────────────────────────
<= menší a rovno
──────────────────────────────────────────────────────────
> větší než
──────────────────────────────────────────────────────────
>= větší a rovno
──────────────────────────────────────────────────────────
#
!= nerovnost
<>
──────────────────────────────────────────────────────────
výskyt podřetězce - 1. operand
$ v řetězci - 2. operand
( porovnání zleva )
1)Porovnávání
je nejčastější se vyskytující relační operací. Pro porovnávání
numerických hodnot není rozdílu mezi porovnáním pragmatickým a exaktním.
Buď se hodnoty přesně rovnají (pravda) nebo se nerovnají (nepravda). Pro
porovnávání řetězců však není vždy výhodné exaktní porovnání, které
dává pravdivou výslední hodnotu pouze v případě, kdy oba operandy se
shodují ve všech znacích, což v podstatě znamená, že jsou si rovny i v délce.
Z pragmatických porovnávání se nejčastěji používají dva mody, které se
volí pomocí příkazu
SET EXACT ON │ OFF
Příkaz slouží k volbě
modu pragmatického porovnávání dvou řetězců (operátor = ). Nemá vliv na
exaktní porovnávání. Parametr OFF (standard) předepisuje pravdivý výsledek
v případě, že řetězec vpravo od rovnítka se shoduje s prvními znaky řetězce
umístěného vlevo od rovnítka. Jde o nejčastěji používaný způsob porovnávání.
Největší význam má při sémantické analýze textu, kdy potřebujeme
ignorovat koncovky slov. Používá se i v triviálních úlohách typu:
Prijmeni="S" (vyhledej všechna příjmení začínající na S). Druhý
modus, odpovídající volbě SET EXACT ON, je obdobou předchozího s tím, že
ignoruje pravostranné mezery řetězce umístěného vpravo od rovnítka. Výhodou
tohoto modu je možnost použití položky ve funkci pravého operandu (položka
má konstantní délku a řetězce v ní uložené se automaticky doplňují
mezerami zprava). Vliv příkazu SET EXACT lze nejrychleji pochopit pomocí
tabulky:
vyhodnocení '=' '=' '=='
porovnání SET EXACT OFF SET EXACT ON SET EXACT ON | OFF
───────────────────────────────────────────────────────────────
'ABC'='ABC' .T. .T. .T.
'AB' ='ABC' .F. .F. .F.
'ABC'='AB' .T. .F. .F.
'ABC'='AB ' .F. .F. .F.
'AB' ='AB ' .F. .T. .F.
'AB '='AB' .T. .T. .F.
'' ='AB' .F. .F. .F.
'AB' ='' .T. .F. .F.
' ' ='' .T. .T. .F.
'' =' ' .F. .T. .F.
? 1 > -6000
T
odpoved = 'a'
? odpoved $ "aAnN"
T
Logické operátory
Logické
operace předpokládají, že operandy jsou logické hodnoty. Výsledkem operace
je logická hodnota. Operátory se ve výrazu provádějí v pořadí uvedeném
v tabulce, pokud není pořadí změněno závorkami. Operátor negace je unární.
OPERÁTOR NÁZEV OPERACE
───────────────────────────────────────────────
not nebo ! negace
───────────────────────────────────────────────
or disjunkce (nebo)
───────────────────────────────────────────────
and konjunkce (a)
Ve starších aplikacích se
mohou vyskytovat uvedené operátory ohraničené tečkami (.and., .or., .not.).
FoxPro 2.0 je respektuje.
X = .T.
Y = .F.
? X and Y
F
? X .and. !Y
? X or Y
T
? not X
F