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

T

? X or Y

T

? not X

F