Download - Cach é Object Script
24.3.2004 Cache Object Script 2
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
24.3.2004 Cache Object Script 3
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“
24.3.2004 Cache Object Script 4
Proměnné - konverze
Z Do Pravidla
Číslo Objekt NELZE
Číslo Řetězec Př. 22 “22“
Objekt Číslo Objektu se přiřadí číslo
Objekt Řetězec “oref@classname“ kde oref je číslo instance a classname jméno třídy.
Řetězec Číslo Převede první číselný podřetězec.
Řetězec Objekt NELZE
24.3.2004 Cache Object Script 5
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íme
mezerou.
24.3.2004 Cache Object Script 6
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
24.3.2004 Cache Object Script 7
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“
24.3.2004 Cache Object Script 8
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é
24.3.2004 Cache Object Script 9
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
24.3.2004 Cache Object Script 10
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
24.3.2004 Cache Object Script 11
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
24.3.2004 Cache Object Script 12
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é
24.3.2004 Cache Object Script 13
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“
24.3.2004 Cache Object Script 14
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
24.3.2004 Cache Object Script 15
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
24.3.2004 Cache Object Script 16
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
24.3.2004 Cache Object Script 17
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)
24.3.2004 Cache Object Script 18
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í
24.3.2004 Cache Object Script 19
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
24.3.2004 Cache Object Script 20
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
24.3.2004 Cache Object Script 21
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ý“)
24.3.2004 Cache Object Script 22
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
24.3.2004 Cache Object Script 23
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
24.3.2004 Cache Object Script 24
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
24.3.2004 Cache Object Script 25
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)
24.3.2004 Cache Object Script 26
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.
24.3.2004 Cache Object Script 27
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“
24.3.2004 Cache Object Script 28
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“
24.3.2004 Cache Object Script 29
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)
24.3.2004 Cache Object Script 30
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)
24.3.2004 Cache Object Script 31
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“
24.3.2004 Cache Object Script 32
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.
24.3.2004 Cache Object Script 33
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
24.3.2004 Cache Object Script 34
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
24.3.2004 Cache Object Script 35
Aritmetické operátory
• Plus (binární, unární): +
• Mínus (binární, unární): -
• Krát: *
• Děleno: /
• Celočíselné dělení: \
• Modulo: #
• Mocnina: **
24.3.2004 Cache Object Script 36
Ř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“
24.3.2004 Cache Object Script 37
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: ‘!
24.3.2004 Cache Object Script 38
Porovnávací číselné operátory
• Test na rovnost: =
• Test na nerovnost: ‘=
• Větší: >
• Menší: <
• Větší nebo rovno: ‘<
• Menší nebo rovno: ‘>
24.3.2004 Cache Object Script 39
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: @
24.3.2004 Cache Object Script 40
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ář: /*, */
24.3.2004 Cache Object Script 41
Operátory +, -, *, /, \, #, ** • 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 );
24.3.2004 Cache Object Script 42
Operátory ‘, &, &&, !, ||, ‘&, ‘!
• 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);
24.3.2004 Cache Object Script 43
Operátory =, ‘=, >, <, ‘>, ‘<
• 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;
24.3.2004 Cache Object Script 44
Ř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
24.3.2004 Cache Object Script 45
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 )
24.3.2004 Cache Object Script 46
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
24.3.2004 Cache Object Script 47
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
24.3.2004 Cache Object Script 48
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.
24.3.2004 Cache Object Script 49
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
24.3.2004 Cache Object Script 50
Literatura
• Caché On-Line Dokumentation
• M[UMPS] by Example• Ed de Moel, 1995-2004.