Promotic
WikipediaLinkedInYoutubeTwitterFacebook

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ř. Internet Explorer jej podporuje ale nepodporuje jej Firefox, Chrome, Opera ..). Za tu dobu se velmi prosadil jazyk JavaScript a ten se stal základem a standardem internetových technologií.
 
Systém PROMOTIC se tomuto trendu také pomalu přizpůsobuje. Při tvorbě PROMOTIC aplikace se uživatel může setkat s JavaScript syntaxí na těchto místech:
- v datové vazbě E - Vazba na obecný výraz
- v objektu PmPanel v konfigurátoru Nastavení skriptovacího jazyka.
 
Účelem této kapitoly je ukázat, že i když je jazyk JavaScript obecnější (a tedy 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 jazyku VBScript. Syntaxe je často velmi podobná jako v jazyku VBScript a na rozdíly těchto dvou jazyků upozorníme právě zde.
 

Rozdíl při oddělování příkazů

V jazyku VBScript je standardně každý příkaz na novém řádku (tzn. nový řádek slouží jako oddělovač příkazů). V jazyku JavaScript musí každý příkaz končit 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).
 
- pro VBScript:
a = 1
b = 1 - Dva příkazy typu přiřazení hodnot jsou každý na novém řadku
- pro JavaScript:
a = 1;
b = 2; - Dva příkazy mohou být každý na novém řádku
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šší v tom, že za názvem metody píše vždy závorky (bez ohledu na to zda metoda vrací hodnotu).
 
- pro VBScript:
Pm.Debug "nějaký text" - zde nejsou závorky protože nás nezajímá vrácená hodnota
PmCommMsg.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
- pro JavaScript:
Pm.Debug("nějaký text"); - závorky se píší vždy
PmCommMsg.Run(); - závorky se píší i když metoda nemá parametry
data = Pm.FileTextRead("#data:file.txt", 1); - závorky se opět píší, v tomto 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.
 
- pro VBScript:
Dim nVal, oPanel - Příkaz Dim pouze založí proměnné ale nelze přiřadit hodnotu
nVal = 1
Set oPanel = pMe.Pm("/Panel1")
- pro JavaScript:
var nVal = 1, oPanel = pMe.Pm("/Panel1"); - Příkaz var založí proměnné a lze hned i přiřadit hodnotu
 

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 PmData):

 
- pro VBScript: Přípočítat hodnotu 15 k proměnné znamená zopakovat výraz i na pravé straně příkazu.
pMe.Pm("/Data/#vars/Teplota").Value = pMe.Pm("/Data/#vars/Teplota").Value + 15
- pro JavaScript: Připočítat hotnotu 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" ..
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 jazyku VBScript například funkce Now, Abs ..). Jazyk JavaScript má také velký počet podobných funkcí, nedoporučujeme je však používat - lepší je využívat pouze metod 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 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 jazyku JavaScript není vhodný pro účely systému PROMOTIC. Problém byl vyřešen následovně:
- pro typ "Datum": V jazyku 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 PROMOTIC metody, 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.
 
- pro VBScript: Podmínka se provádí pomocí příkazů If...Then...Else
If a > 1 Then
   ...
Else
   ...
End If
- pro JavaScript: 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 {...}.
if (a > 1)
{
   ...
}
else
{
   ...
}
 

Příkaz cyklu FOR

Oba dva jazyky mají příkaz FOR který umožní 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ší.
 
- pro VBScript: Příkaz For...Next
For i=0 To 100
   ...
Next
- pro JavaScript: 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 {...}.

for (i=0; i<=100; i++)
{
   ...
}
 

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 jen když nějaká proměnná nabývá příslušné hodnoty.
 
- pro VBScript: Příkaz Select Case
Case 1
   sMsg = "ok"
Case 2
   sMsg = "warning"
Case 3
   sMsg = "alarm"
End Select
- pro JavaScript: Příkaz switch. Za každou sadou příkazů se dává break; který ukončí podmínky a vyskočí z příkazu switch.
switch (nVar)
{
case 1:
   sMsg = "ok"; break;
case 2:
   sMsg = "warning"; break;
case 3:
   sMsg = "alarm"; break;
}
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice