Systém PROMOTIC používá skriptovací jazyk
VBScript už od prvních verzí od roku
1995.
Doba však pokročila a tento jazyk už není nejmodernější. Podporován je pouze Microsoft produkty, ostatní výrobci ho však nepodporují (např.
InternetExplorer ho podporuje ale nepodporuje ho
Chrome,
Firefox,
Edge ...).
Za tu dobu se velmi prosadil
jazyk JavaScript a ten se stal základem a standardem internetových technologií ale také se stal
standardním jazykem v systému PROMOTIC (od verze
Pm9.0.0 lze tento jazyk používat všude místo jazyka
VBScript).
Účelem této kapitoly je ukázat, že i když je jazyk
JavaScript obecnější (a proto by se zdálo že složitější), pro účely systému PROMOTIC vychází zápisy jednodušší a v mnoha případech pochopitelnější než v jazyce
VBScript.
Syntaxe je často velmi podobná jako v jazyce
VBScript. Na rozdíly těchto dvou jazyků upozorníme právě zde.
Rozdíl při psaní velkých/malých písmen
Oba jazyky se liší v rozlišování malých a velkých písmen v názvech proměnných, vlastností a metod.
Jazyk
JavaScript rozlišuje malá a velká písmena (je
case sensitive). Je proto rozdíl např. mezi názvem
Value a
value. Názvy vlastností a metod se musí psát přesně tak, jak je psáno v dokumentaci.
Jazyk
VBScript NErozlišuje malá a velká písmena. Vlastnost s názvem "
Value" se zde může psát např.
value,
VALUE atd. I zde je však doporučeno psát názvy přesně tak, jak je psáno v dokumentaci.
Default vlastnosti nebo metody
Jazyk
VBScript podporuje koncepci takzvaných "default vlastností" (nebo metod). Každý objekt může mít jednu vlastnost nebo metodu zvolenou jako hlavní (default) a tuto pak není nutno ve skriptu psát.
Příklad:
Objekt
PmaData má metodu
Item zvolenou jako hlavní. Stejně tak proměnná v
PmaData (objekt
PmVar) má hlavní vlastnost
Value. Proto přístup k hodnotě proměnné
"Teplota1" lze psát libovolně:
Příklad1:
VBScriptVyber a zkopíruj do schránky
oData.Item("Teplota1").Value = 95
' nebo
oData("Teplota1").Value = 95
' nebo
oData.Item("Teplota1") = 95
' nebo
oData("Teplota1") = 95
Jazyk
JavaScript tuto koncepci nemá a proto je nutno uvést každou vlastnost nebo metodu. To znamená, že v tom případě je nutno psát:
Příklad2:
JavaScriptVyber a zkopíruj do schránky
oData.Item("Teplota1").Value = 95;
Rozdíl při oddělování příkazů
V jazyce
VBScript každý příkaz je na novém řádku (tzn. nový řádek slouží jako oddělovač příkazů).
V jazyce
JavaScript každý příkaz musí být ukončen středníkem a lze tak dát i více příkazů na nový řádek (i když to není vhodné přehánět).
Příklad:
Dva příkazy typu přiřazení hodnot jsou každý na novém řadku
VBScriptVyber a zkopíruj do schránky
Dim a, b
a = 1
b = 2
Dva příkazy mohou být každý na novém řádku
JavaScriptVyber a zkopíruj do schránky
var a = 1;
var b = 2;
a = 1; b = 2;
// ale také mohou být na jednom řádku
Rozdíl při volání metod
Při volání metod je jazyk
JavaScript jednodušší, protože za názvem metody píše
vždy závorky (bez ohledu na to, zda metoda vrací hodnotu).
Příklad:
VBScriptVyber a zkopíruj do schránky
Pm.Debug "nějaký text"
' zde nejsou závorky, protože nás nezajímá vrácená hodnota
oCommMsg.Run
' zde opět nejsou závorky a metoda nemá parametry
data = Pm.FileTextRead("#data:file.txt", 1)
' zde jsou závorky, protože nás zajímá vrácená hodnota
JavaScriptVyber a zkopíruj do schránky
Pm.Debug("nějaký text");
// závorky se píší vždy
oCommMsg.Run();
// závorky se píší i když metoda nemá parametry
data = Pm.FileTextRead("#data:file.txt", 1);
// závorky se opět píší, v tom případě je zápis stejný jako ve VBScript
Založení a inicializace proměnné
V jazyce
JavaScript je jednodušší založit proměnnou a přiřadit ji hodnotu. Lze to provést jedním příkazem, zatímco v jazyce
VBScript jsou potřeba dva příkazy. Při přiřazení se neodlišuje, zda přiřazuji jednoduchou hodnotu nebo objekt, zatímco v jazyce
VBScript se při přiřazení objektu musí použít příkaz
Set.
Příklad:
Příkaz
Dim pouze založí proměnné ale nelze přiřadit hodnotu
VBScriptVyber a zkopíruj do schránky
Dim nVal, oPanel
nVal = 1
Set oPanel = pMe.Pm("/Panel1")
Příkaz
var založí proměnné a lze hned i přiřadit hodnotu
JavaScriptVyber a zkopíruj do schránky
var nVal = 1;
var oPanel = pMe.Pm("/Panel1");
Operátory jazyka
Oba jazyky mají mnoho stejných operátorů, například sčítání (
+), odčítání (
-), násobení (
*), dělení (
/) atd. Jazyk
JavaScript má však operátorů více a jsou hodně užitečné. Například bitový posun (
<< a
>>), podmíněný výraz (
a ? b : c), přičítaní/odečítání jedničky (
++ a
--).
Zvlášť praktické je zjednodušení příkazu pro připočtení hodnot (např. do proměnné v objektu
PmaData):
Příklad:
Přípočítat hodnotu 15 k proměnné znamená zopakovat výraz i na pravé straně příkazu.
VBScriptVyber a zkopíruj do schránky
pMe.Pm("/Data/#vars/Teplota").Value = pMe.Pm("/Data/#vars/Teplota").Value + 15
Připočítat hodnotu 15 k proměnné je mnohem jednodušší díky výrazu
+=, který neznamená "přiřaď" ale "připočti". Jsou podobné příkazy pro "odečti", "vynásob", "vyděl" ...
JavaScriptVyber a zkopíruj do schránky
pMe.Pm("/Data/#vars/Teplota").Value += 15;
Viz také
Operátory JavaScript a popis syntaxe.
Funkce jazyka
Oba jazyky mají velkou množinu vlastních funkcí (v jazyce
VBScript například funkce
Now,
Abs ...). Jazyk
JavaScript má také velký počet podobných funkcí,
nedoporučujeme je však používat - je lepší použít pouze metody objektu
Pm.
Datové typy jazyka
Oba jazyky mají datové typy jako "celé číslo", "Reálné číslo", "String", "Objekt". Hlavní rozdíl je v tom, že jazyk
JavaScript má
rozdílné typy pro "Datum" a "Array". Oba tyto typy jsou v systému PROMOTIC často používané a způsob implementace těchto typů v jazyce
JavaScript není vhodný pro účely systému PROMOTIC. Problém byl vyřešen následovně:
-
pro typ "Datum": V jazyce
VBScript je datum "něco jako reálné číslo" ze kterého lze přímo zteží poznat, jaký je rok, měsíc, den, hodina, minuta, sekunda, milisekunda. K tomu jsou pomocné
VBScript funkce, které z tohoto "reálného čísla" poznají rok, měsíc, atd.
Podobná koncepce je zavedena i pro
JavaScript: Všechny metody systému PROMOTIC, které vrací datum, vrací "něco jako reálné číslo". Tuto hodnotu pak lze například předávat do jiných metod a hlavně pomocí nového objektu
PmDateObject lze z této hodnoty zjistit jaký je rok, měsíc, den ...
-
pro typ "Array": Jazyk
VBScript má typ "Array" (lze vytvořit například pomocí funkce
Array). Nejběžnější jsou 1-rozměrné a 2-rozměrné varianty.
Podobná koncepce je zavedena i pro
JavaScript: Pomocí nové metody
Pm.CreatePmArray lze vytvořit "Array" jako speciální objekt
PmArray, a zároveň tento objekt vrací všechny
PROMOTIC metody, které podle dokumentace mají "Array" vracet.
Podmínka IF
Oba dva jazyky umí vytvořit podmínku pomocí příkazu
IF. V jazyce
JavaScript se však zapisuje trochu jiným způsobem.
Příklad:
VBScriptVyber a zkopíruj do schránky
If a > 1 Then
' ...
' ...
Else
' ...
' ...
End If
Podmínka se provádí pomocí příkazů
if...else. Pokud je v podmínce více příkazů, pak jsou uzavřeny do složených závorek
{...}.
JavaScriptVyber a zkopíruj do schránky
if (a > 1)
{
// ...
// ...
}
else
{
// ...
// ...
}
Příkaz cyklu FOR
Oba dva jazyky mají příkaz
FOR který umožňuje procházet část kódu vícekrát. V jazyce
JavaScript má tento příkaz trochu složitější zápis ale zase je mnohem obecnější.
Příklad:
VBScriptVyber a zkopíruj do schránky
For iRow = 0 To 100
' ...
' ...
Next
Příkaz
for má tři parametry.
- 1. parametr (např. i=0) je příkaz který se provede na začátku cyklu.
- 2. parametr (např. i<100) je výraz který se otestuje na konci cyklu pro zjištění, zda se má ještě dál opakovat
- 3. parametr (např. i++) je příkaz, který se provede na konci cyklu pro změnu proměnné cyklu
Pokud je v příkazu
for více příkazů které se mají opakovat, pak jsou uzavřeny do složených závorek
{...}.
JavaScriptVyber a zkopíruj do schránky
for (iRow = 0; iRow <= 100; iRow++)
{
// ...
// ...
}
Příkaz pro vícenásobnou podmínku
Oba dva jazyky mají příkaz pro vícenásobnou podmínku, kdy se sada příkazů provede pouze pokud nějaká proměnná nabývá příslušné hodnoty.
Příklad:
VBScriptVyber a zkopíruj do schránky
Select Case nVar
Case 1
sMsg = "OK"
Case 2
sMsg = "Warning"
Case 3
sMsg = "Alarm"
End Select
Příkaz
switch. Za každou sadou příkazů se dává
break; který ukončí podmínky a vyskočí z příkazu
switch.
JavaScriptVyber a zkopíruj do schránky
switch (nVar)
{
case 1:
sMsg = "OK";
break;
case 2:
sMsg = "Warning";
break;
case 3:
sMsg = "Alarm";
break;
}