510 likes | 689 Views
Cach é Object Script. Jan Lánský zizelevak@matfyz.cz. Proměnné. Nemusí se deklarovat, netypované Mohou být i pole (téměř) neomezené dimenze Lokální proměnné - Při konci procesu zaniknou Př. SET pozdrav = “AHOJ“ Globální - Perzistentní, uloženy v DB Př. SET ^pozdrav = “AHOJ“
E N D
Caché Object Script Jan Lánský zizelevak@matfyz.cz
Proměnné • Nemusí se deklarovat, netypované • Mohou být i pole (téměř) neomezené dimenze • Lokální proměnné - Při konci procesu zaniknou • Př. SET pozdrav = “AHOJ“ • Globální - Perzistentní, uloženy v DB • Př. SET ^pozdrav = “AHOJ“ • Systémové - Speciální sada proměnných prostředí • Př. SET cas = $HOROLOG • Systémové a perzistentní • Př. ^$JOB Cache Object Script
Vícedimenzionální proměnné • SET a(1)=“ Pepa“ • SET a(1,“věk“)=56 • SET a(1,“děti“,1,“jméno“)=“Honza“ • SET a(1,“děti“,1,“pohlaví“)=“Muž“ • SET a(1,“děti“,2,“jméno“)=“Jana“ • SET a(1,“děti“,2,“pohlaví“)=“Žena“ Cache Object Script
Proměnné - konverze Cache Object Script
Příkazy • Syntax: Příkaz:podmínka parametry • Názvy příkazů jsou psány velkými písmeny, lze je zkrátit na libovolný jejich prefix. • Většina příkazů má jeden nebo více parametrů. • Za příkazem následuje dvojtečka, podmínka, mezera a parametry příkazu. • Podmínku (a dvojtečku) lze vždy vynechat. • Parametr lze často vynechat, pokud ho nahradímemezerou. Cache Object Script
Použití podmínky v příkazech • K ukončení cyklu • FOR i=1,1 WRITE i QUIT:i>2 WRITE * • Vypíše 1*2*3 • K nahrazení IF • WRITE:i>5 i • Je náhradou za IF (i>5) WRITE i Cache Object Script
Příkaz SET • Nastaví hodnotu proměnné • SET a=1 • SET a=1,b=2,c=3 • SET (a,b,c)=1 • SET (a,b)=1,c=6,(d,e,f)=2 • SET osoba.jmeno= “Honza“ Cache Object Script
Příkaz KILL • KILL – mazání proměnných • KILL x // zruší proměnnou x • KILL x,y // zruší proměnné x,y • KILL (x) // zruší lokální proměnné mimo X • KILL // zruší všechny lokální proměnné Cache Object Script
Příkaz WRITE • Vypíše text • WRITE “Ahoj“ • Vypíše hodnotu proměnné, výsledek funkce • SET a=1 WRITE a • Bez parametru vypíše jména a hodnoty všech lokálních proměnných • Lze používat formátovací znaky Cache Object Script
Formátovací znaky • Odřádkování: ! • SET x=5 WRITE “x = “,x,! WRITE “y = “,y • Nová stránka: # • Smaže terminál a začne na hoře novou stránku • Sloupec n: ?n • Nastaví se n-tý sloupec Cache Object Script
Příkaz READ • READ formát, popisek, proměnná • Načte hodnotu proměnné se standardního vstupu. • Popisek se zobrazí před načtením proměnné • Formát (viz předchozí slide) udává, kde na obrazovce objeví oblast pro zadání hodnoty proměnné. • READ !, “Zadej celé číslo“, X Cache Object Script
Příkaz IF, ELSEIF, ELSE • IF podmínka { příkazy } • Jeli splněna podmínka vykoná se blok příkazů • ELSEIF podmínka { příkazy } • ELSE + IF • nepovinné • ELSE { příkazy } • Není-li splněna podmínka za IF, vykoná se blok příkazů za ELSE • nepovinné Cache Object Script
Příkaz IF, ELSEIF, ELSE • READ “Zadej číslo:“, X • IF (X=1) WRITE “Jednička“ • ELSEIF (X=2) WRITE “Dvojka“ • ELSEIF (X=3) WRITE “Trojka“ • ELSE WRITE “Větší než tři“ Cache Object Script
Příkaz FOR • FOR řídící=start:přírůstek:konec { příkazy } • Řídící proměnnou nastaví na hodnotu start • V každém kroku cyklu ji zvýší o přírůstek • Skončí po provedení cyklu, ve kterém řídící proměnná dosáhla hodnoty konec. • Cyklus lze kdykoliv ukončit pomocí QUIT • Příklad • FOR i=0:7:70 WRITE I,! • Vypíše malou násobilku sedmi Cache Object Script
Příkaz FOR • FOR řídící=start:přírůstek { příkazy } • Nekonečný cyklus • Ukončit lze pomocí QUIT • FOR {příkazy} • Nekonečný cyklus • Za FOR jsou 2 mezery Cache Object Script
Příkaz FOR • FOR řídící=položka1,položka2, …{ příkazy} • Řídící proměnná se postupně nastavuje na hodnoty uvedené v seznamu a pro ně vykonává blok příkazů • Příklad • FOR i=Petr,Honza,Karel WRITE !,“To je“,i Cache Object Script
Příkaz DO, WHILE • DO { příkazy } WHILE (podmínka) • Vykonává blok příkazů dokud je splněna podmínka • WHILE (podmínka) { příkazy } • Dokud je splněna podmínka vykonává blok příkazů • Předčasně lze ukončit pomocí QUIT • Příklad: WHILE (i>5) SET i=(i-1) Cache Object Script
Funkce • $JménoFunkce(Parametr1,Parametr2,…) • $ a závorky jsou povinné • Parametry se oddělují čárkou, po čárce může být mezera • Mezi jménem funkce a závorkou nesmí být mezera • Jména funkcí lze zkracovat na libovolný prefix • Parametry můžou být nepovinné nebo libovolné množství Cache Object Script
Funkce $DATA • $DATA(proměnná, cíl) • Vrátí informace o proměnné (případně i části vícedimenzionální proměnné) • Parametr cíl je nepovinný, uloží se sem výsledek • Návratové hodnoty • 0 – nedefinované proměnná • 1 - proměnná obsahuje data, ale nemá potomky • 10 – proměnná neobsahuje data, ale má potomky • 11 – proměnná obsahuje data i potomky Cache Object Script
Funkce $DATA • SET a(1)=“ Pepa“ • SET a(1,“děti“,1,“jméno“)=“Honza“ • SET a(1,“děti“,1,“pohlaví“)=“Muž“ • SET a(1,“děti“,2,“pohlaví“)=“Zena“ • $DATA(a(2)) // vrátí 0 • $DATA(a(1,“děti“,1,“pohlaví“)) // vrátí 1 • $DATA(a(1,“děti“,2)) // vrátí 10 • $DATA(a(1)) // vrátí 11 Cache Object Script
Funkce $GET • $GET(proměnná, DefaultHodnota) • Vrátí hodnotu proměnné. Pokud proměnná není definována, tak vrátí defaultní hodnotu. • Defaultní hodnota jen nepovinný parametr, není-li zadán, je nastaven na prázdný řetězec. • Příklad: • SET a(1)=“Pepa“ • SET b=$GET(a(1),“neznámý“) Cache Object Script
Funkce $ORDER • $ORDER(proměnná, směr, cíl) • Vrátí jméno Následníka (či předchůdce) proměnné, která je na stejné úrovni vnoření. U proměnných bez indexu vrátí následující (předchozí) lokální proměnnou. • Směr je nepovinný parametr, nabývá hodnot –1 (předchůdce) a 1 (následník) - defaultní hodnota. • Parametr cíl je nepovinný, uloží se sem výsledek Cache Object Script
Funkce $ORDER • SET a(1)=“ Pepa“, d=4 • SET a(1,“děti“,1,“jméno“)=“Honza“ • SET a(1,“děti“,1,“pohlaví“)=“Muž“ • SET a(1,“děti“,2,“pohlaví“)=“Zena“ • $ORDER(a) // vrátí “d“ • $ORDER(a(1,“děti“,2),-1) // vrátí 1 Cache Object Script
Funkce $QUERY • $ QUERY(reference, směr, cíl) • Vrátí referenci na Následníka (či předchůdce) vstupní reference, který obsahuje data. Nemusí být na stejné úrovni vnoření. U proměnných bez indexu vrátí jejich nejlevější definovaný list. • Je-li list poslední (první) vrací prázdný řetězec • Směr je nepovinný parametr, nabývá hodnot –1 (předchůdce) a 1 (následník) - defaultní hodnota. • Parametr cíl je nepovinný, uloží se sem výsledek Cache Object Script
Funkce $QUERY • SET a(1)=“ Pepa“, a(2)=“Radek “ • SET a(1,“děti“,1)=“Honza“ • SET a(1,“děti“,2 )=“Jana“ • $ORDER(a) // vrátí a(1,“děti“,1) $ORDER(a(1,“děti“,2 )) // vrátí a(2) • $ORDER(a(1,“děti“,2),-1) • // vrátí a(1,“děti“,1) Cache Object Script
Funkce $PIECE • $PIECE(řetězec,oddělovač,od,do) • Řetězec je rozdělen na podřetězce pomocí oddělovače. Jsou vráceny podřetězce z rozpětí udaného parametry od a do. • Parametry od a do jsou nepovinné. Udávají rozpětí ze kterého se mají vzorky vracet. Defaultně jsou oba parametry 1. Cache Object Script
Funkce $PIECE • $PIECE(“a,b,c,d,e“,“,“) // vrátí “a“ • $PIECE(“a,b,c,d,e“,“,“,2,4) // vrátí “b,c,d“ • $PIECE(“ABCcxBcx“,“cx“) // vrátí “ABC“ Cache Object Script
Funkce $EXTRACT • $EXTRACT(řetězec,od,do) • Vrátí podřetězec začínající na pozici od a končící na pozici do • Parametry od a do jsou nepovinné, defaultně nastavené na 1. Je-li nastaven pouze parametr od, parametr do má stejnou hodnotu. • Příklad: • $EXTRACT(“123456789“,5,7) // vrátí “5,6,7“ Cache Object Script
Funkce $SELECT • $SELECT(výraz:hodnota, …) • Libovolný počet parametrů typu výraz:hodnota • Při vyhodnocování se prochází tento seznam a prvního výrazu, který je TRUE se vrátí jeho hodnota. • Není-li žádný výraz TRUE, vrátí error. • Příklad: • $SELECT(x=“a“:1, x=“b“:1, x=“c“:1) Cache Object Script
Funkce $CASE • $CASE(cíl,výraz:hodnotu,…,default) • Postupně prochází seznam parametrů typu výraz:proměnná a porovnává cíl s výrazem. Při prvním TRUE vrátí příslušnou hodnotu. V případě nenalezení TRUE vrátí default. • Parametr defalut je nepovinný, chybí-li s žádný výraz není TRUE, nastane error. • Příklad • $SELECT(x,“a“:1,“b“:1,“c“:1,-1) Cache Object Script
Funkce $LISTBUILD • $LISTBUILD(element, …) • Parametr element může mít libovolný počet výskytů. • Vytvoří spojový seznam, který bude obsahovat elementy, v pořadí jak byli zadány jako parametry funkce. • Příklad • SET X=$LISTBUILD(“a“,“b“,“c“) • WRITE $LIST(X,1,3) // vrátí “a,b,c“ Cache Object Script
Operátory - úvod • Syntax: [operand] operátor operand • Operandem libovolného operátoru může být číslo, řetězec i logická hodnota. Dochází k automatické konverzi na typ vyžadovaný operátorem. Cache Object Script
Vyhodnocování Operátorů • Neuznává priority operátorů, striktně vyhodnocuje zleva doprava. • Př.: 1+1*2 • Vrátí 4, místo 3 • IF K=L+3 THEN WRITE K • Vždy vypíše K • Prioritu lze určit závorkami • Př.: 1+(1*2) = 3 • IF K=(L+3 ) THEN WRITE K Cache Object Script
Typy operátorů • Číselné – operandy čísla,vrací číslo • Řetězcové – operandy řetězce, vrací řetězec • Logické – operandy TRUE(1) nebo FALSE(0), vrací TRUE(1) nebo FALSE(0) • Porovnávací –vrací TRUE nebo FALSE • Číselné – operandy čísla • Řetězcové – operandy řetězce Cache Object Script
Aritmetické operátory • Plus (binární, unární): + • Mínus (binární, unární): - • Krát: * • Děleno: / • Celočíselné dělení: \ • Modulo: # • Mocnina: ** Cache Object Script
Řetězcové operátory • Konkatenace: _ • op1_op2 • Zřetězí levý operand (op1) s pravým operandem (op2) • Příklad: • Zadání: “ahoj“_865 • Výsledek: “ ahoj865“ Cache Object Script
Logické operátory • NOT: ‘ • AND s úplným vyhodnocením: & • AND s redukovaným vyhodnocením: && • OR s úplným vyhodnocením: ! • OR s redukovaným vyhodnocením: || • NAND: ‘& • NOR: ‘! Cache Object Script
Porovnávací číselné operátory • Test na rovnost: = • Test na nerovnost: ‘= • Větší: > • Menší: < • Větší nebo rovno: ‘< • Menší nebo rovno: ‘> Cache Object Script
Porovnávací řetězcové operátory • Test na rovnost řetězců: = • Test na nerovnost řetězců: ‘= • Levý operand je podřetězcem pravého: [ • Levý operand není podřetězcem pravého : ‘[ • Lexikograficky větší: ] • Lexikograficky menší nebo rovno: ‘] • Numericky větší: ]] • Numericky menší nebo rovno: ‘]] • Porovnání se vzorem: @ Cache Object Script
Speciální operátory • Závorky, volání funkce, index pole: (, ) • Porovnání, přiřazení: = • Přístup k metodám a proměnným objektů: . • Dereference: @ • Komentář do konce řádky: // • Komentář: /*, */ Cache Object Script
SET X=-3 SET Y=12 SET Z=+X SET Z=-X SET Z=X+Y SET Z=X–Y SET Z=X*Y SET R=X/Y SET Z=X\Y SET Z=X#Y SET Z=X**Y int X = -3, Y = 12, Z; double R; Z = +X; Z = -X; Z = X + Y; Z = X – Y; Z = X * Y; R = X / Y; Z = X / Y; Z = X % Y; Z = pow( X, Y ); Operátory +, -, *, /, \, #, ** Cache Object Script
SET X=0,Y=7 SET Z=‘ X SET Z=X&Y SET Z=X&&Y SET Z=X!Y SEZ Z=X||Y SET Z=X‘&Y SET Z=X‘!Y int X = 0, Y = 7, Z; Z = ! X; Z = (!!X + !!Y) == 2; Z = X && Y; Z = !! (!! X + !! Y); Z = X || Y; Z = (!!X + !!Y) != 2; Z = ! (!! X + !! Y); Operátory ‘, &, &&, !, ||, ‘&, ‘! Cache Object Script
SET X=4,Y=7 SET Z=X=Y SET Z=X‘=Y SET Z=X>Y SET Z=X<Y SET Z=X‘>Y SET Z=X‘<Y int X = 4, Y = 7, Z; Z = X == Y; Z = X != Y; Z = X > Y; Z = X < Y; Z = X <= Y; Z = X >= Y; Operátory =, ‘=, >, <, ‘>, ‘< Cache Object Script
Řetězcové operátory =, ‘= • Operátor rovnost řetězců: = • op1 = op2 • Vrací TRUE pokud levý operand (op1) a pravý operand (op2) obsahují shodný textový řetězec. • Příklad: “007“ = “7“ vrací FALSE • Operátor nerovnost řetězců: ‘= • op1 ‘= op2 • Vrací TRUE pokud levý operand (op1) a pravý operand (op2) obsahují různý textový řetězec. • Příklad: “ahoj“ = “ahoj“ vrací FALSE Cache Object Script
Operátory [, ‘[, ], ‘] • Je podřetězcem: op1 [ op2 • Vrací TRUE, pokud pravý operand (op2) je podřetězcem levého operandu (op1). • Příklad: “ABCDE“ [ “BC“ vrací TRUE • op1 ‘[ op2 je zkratka za ‘( op1 [ op2 ) • Je lexikograficky větší: op1 ] op2 • Vrací TRUE, pokud levý operand (op2) je lexikograficky větší než pravý operand (op1). • Příklad: “ABC“ ] “AC“ vrací FALSE • op1 ‘] op2 je zkratka za ‘( op1 ] op2 ) Cache Object Script
Operátory ]], ‘]] • Operátor numerické větší pro řetězce: ]] • op1 ]] op2 • Vrací TRUE pokud levý operand (op1) je numericky větší než pravý operand (op2). • Příklad: “10“ = “8“ vrací TRUE • Operátor numerické <= pro řetězce : ‘]] • op1 ‘]] op2 • Vrací TRUE pokud levý operand (op1) je numericky menší nebo rovný než pravý operand (op2). • Příklad: “569“ = “ahoj“ vrací FALSE Cache Object Script
Operátor ? • Porovnání ze vzorem: op1 ?op2 • Vrací TRUE pokud se levý operand (op1) odpovídá vzorku definovaném v pravém operandu (op2). • Za ? Nesmí být mezera • Vzorek se skládá z těchto částí v tomto pořadí • Počet opakování vzorku • Vlastí vzorek • Po logickém OR může následovat další vzor Cache Object Script
Operátor ? – počet opakování • Počet opakování vzorku ve vzoru • n – právě n krát • n.m – nejméně n krát, nejvýše m krát • .m – njevýše m krát • n. – nejméně n krát • Příklad: “ABABAB“ ?1.4“AB“ • Vrátí TRUE, neboť AB se opakuje třikrát. Cache Object Script
Operátor ? – vlastní vzorek • Místo řetězce lze použít konstanty • A – písmeno • C – znak od 31 do 255 ASCII • E – cokoliv • L – malé písmeno • N – číslice (Př.: rodné číslo: 6N1“/“4N) • P – interpunkční znaménko • U – velké písmeno Cache Object Script
Literatura • Caché On-Line Dokumentation • M[UMPS] by Example • Ed de Moel, 1995-2004. Cache Object Script