Promotic

Porovnání jazyků VBScript a JavaScript

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", "textový řetězec", "Objekt". Hlavní rozdíl je v tom, že jazyk JavaScriptrozdí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:
Podmínka se provádí pomocí příkazů If...Then...Else
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:
Příkaz For...Next
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 v příkazu for je 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:
Příkaz Select Case
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;
}
© MICROSYS, spol. s r.o.