Promotic

Porównanie języków VBScript oraz JavaScript

System PROMOTIC wykorzystuje język skryptów VBScript już od pierwszych wersji od 1995 roku.
Czas jednak płynie i ten język nie należy już do najnowocześniejszych. Wspúierany jest tylko przez produkty Microsoftu, jednak pozostali producenci go nie wspierają (np. InternetExplorer go wspiera lecz nie jest wspierany przez Chrome, Firefox, Edge ...).
Przez ten czas często stosowanym stał się język JavaScript i ten stał się podstawą i standardem technologii internetowych ale również został standardowym językiem w systemie PROMOTIC (od wersji Pm9.0.0 można ten język stosować wszędzie zamiast języka VBScript).

Celem tego rozdziału jest pokazanie, że nawet jeżeli język JavaScript jest bardziej ogólny (i dlatego może się wydawać, że jest bardziej złożony), to do celów systemu PROMOTIC zapisy okazują się prostszymi i w wielu przypadkach bardziej zrozumiałymi niż w języku VBScript.
Składnia jest często bardzo podobna jak w języku VBScript. Na różnice tych dwu języków zwrócimy uwagę właśnie tutaj.

Różnica podczas pisania dużych/małych liter

Obydwa jęzuki różnią się rozróżnianiem dużych i małych liter w nazwach zmiennych, właściwości oraz metod.
Język JavaScript rozróżnia duże i małe litery (jest case sensitive). Dlatego jest np. różnica między nazwą Value oraz value. Nazwy właściwości oraz metod należy pisać zgodnie z opisem w dokumentacji.
Język VBScript NIE rozróżnia duże i małe litery. Właściwość o nazwie "Value" można w tej składni napisać np. value, VALUE itd. Również tutaj zalecane jest pisanie nazw zgodnie z dokumentacją.


Domyślne właściwości lub metody

Język VBScript wspiera koncepcję tak zwanych "właściwości domyślnych" (lub metod). Każdy obiekt może posiadać jedną właściwość lub metodę określoną jakogłówną (domyślną) a wtedy tą nie trzeba w skrypcie pisać.
Przykład:
Obiekt PmaData posiada metodę Item określoną jako główną. Tak samo zmienna w PmaData (obiekt PmVar) posiada główną właściwość Value. Dlatego dostęp do wartości zmiennej "Temperatura1" można pisać w dowolny sposób:
Przykład1:
VBScriptWybierz oraz skopiuj do schowka

oData.Item("Temperatura1").Value = 95
' lub
oData("Temperatura1").Value = 95
' lub
oData.Item("Temperatura1") = 95
' lub
oData("Temperatura1") = 95


Język JavaScript nie posiada tej koncepcji i dlatego jest konieczne określić każdą właściwość oraz metodę. To znaczy, że w tym przypadku należy pisać:
Przykład2:
JavaScriptWybierz oraz skopiuj do schowka

oData.Item("Temperatura1").Value = 95;


Różnica przy oddzielaniu poleceń


W języku VBScript każde polecenie znajduje się standardowo na nowym wierszu (tzn. nowy wiersz służy jako separator poleceń).
W języku JavaScript każde polecenie musi być zakończone średnikiem i dlatego na jednym wierszu można wpisać kilka poleceń (nawet jeżeli nie jest dogodnym przesadanie w tej kwestii).

Przykład:
Dwa polecenia typu przepisanie wartości znajdują się każde na nowym wierszu
VBScriptWybierz oraz skopiuj do schowka

Dim a, b
a = 1
b = 2
 
Dwa polecenia mogą być każde na nowym wierszu
JavaScriptWybierz oraz skopiuj do schowka

var a = 1;
var b = 2;

a = 1; b = 2;   // lecz mogą być także na jednym wierszu


Różnica przy wywołaniu metod

Przy wywołaniu metod jest język JavaScript prostszy, ponieważ za nazwą metody zawsze muszą się znajdować nawiasy (bez względu na to, czy metoda zwraca wartość).

Przykład:
VBScriptWybierz oraz skopiuj do schowka

Pm.Debug "jakiś tekst"   ' w tym miejscu nie ma nawiasów, ponieważ nie interesuje nas wartość zwrotna
oCommMsg.Run   ' w tym miejscu ponownie nie ma nawiasów i metoda nie posiada parametrów
data = Pm.FileTextRead("#data:file.txt", 1)   ' a tym miejscu znajdują się nawiasy, ponieważ interesuje nas wartość zwrotna
JavaScriptWybierz oraz skopiuj do schowka

Pm.Debug("jakiś tekst");   // nawiasy muszą być zawsze pisane
oCommMsg.Run();   // nawiasy muszą być pisane nawet jeżeli metoda nie posiada parametrów
data = Pm.FileTextRead("#data:file.txt", 1);   // nawiasy są pisana ponownie, w tym przypadku zapis jest taki sam jak w VBScript


Wytworzenie i inicjalizacja zmiennej

W języku JavaScript jest prostsze wytworzenie zmiennej i przyszeregowanie jej wartości. To można wykonać przy pomocy jednego polecenia, podczas kiedy w języku VBScript są konieczne dwa polecenia. Przy przypisaniu nie rozróżnia się, czy dochodzi do przypisania prostej wartości czy obiektu, podczas kiedy w języku VBScript przy przypisaniu obiektu musi być zastosowane polecenie Set.
Przykład:
Polecenie Dim tylko wytworzy zmienne lecz nie umożliwia przypisania im wartości
VBScriptWybierz oraz skopiuj do schowka

Dim nVal, oPanel
nVal = 1
Set oPanel = pMe.Pm("/Panel1")
 
Polecenie var wytworzy zmienne i umożliwia im bezpośrednio przypisać wartość
JavaScriptWybierz oraz skopiuj do schowka

var nVal = 1;
var oPanel = pMe.Pm("/Panel1");


Operatory języka

Oba języki mają wiele wspólnych operatorów, na przykład dodawanie (+), odejmowanie (-), mnożenie (*), dzielenie (/) itd. Język JavaScript ma jednakże więcej operatorów a są bardzo przydatne. Na przykład przesunięcie bitowe (<< oraz >>), wyrażenie warunkowe (a ? b : c), dodawanie/odejmowani jedynki (++ oraz --).
Zwłaszcza przydatnym jest uproszczenie polecenia dodania wartości (np. do zmiennej w obiekcie PmaData):

Przykład:
Dodanie wartości 15 do zmiennej oznacza konieczność powtórzenia wyrażenia także po prawej stronie polecenia.
VBScriptWybierz oraz skopiuj do schowka

pMe.Pm("/Data/#vars/Temperatura").Value = pMe.Pm("/Data/#vars/Temperatura").Value + 15
 
Dodanie wartości 15 do zmiennej jest o wiele prostsze dzięki wyrażeniu +=, które nie oznacza "przypisz" lecz "dodaj". Istnieją podobne polecenia dla operacji "odejmij", "pomnóż", "podziel" ...
JavaScriptWybierz oraz skopiuj do schowka

pMe.Pm("/Data/#vars/Temperatura").Value += 15;


Patrz również Operatory JavaScript oraz opis składni.


Funkcje języka

Oba języki posiadają duże zestawy własnych funkcji (w języku VBScript na przykład funkcje Now, Abs ...). Język JavaScript posiada również dużą ilość podobnych funkcji, lecz nie zalecamy ich stosowanie - jest lepiej zastosować metody obiektu Pm.


Typy danych języka

Oba języki posiadają typy danych jak "liczba całkowita", "Liczba rzeczywista", "łańcuch tekstowy", "Obiekt". Podstawowa różnica spoczywa w tym, że język JavaScript posiada różne typy dla "Data" oraz "Array". Oba powyższe typy są często stosowanymi w systemie PROMOTIC i sposób implementacji tych typów w języku JavaScript nie jest odpowiedni dla systemu PROMOTIC. Problem został rozwiązany w następujący sposób:
- dla typu "Data": W języku VBScript datą jest "coś jakby liczba rzeczywista" z której trudno bezpośrednio rozeznać, jaki jest rok, miesiąc, dzień, godzina, minuta, sekunda, milisekunda. Do tych celów służą funkcje VBScript, które z tej "liczby rzeczywistej" potrafią określić rok, miesiąc, itd.
Podobna koncepcja jest wprowadzona także dla JavaScript: Wszystkie metody systemu PROMOTIC, które zwracają datę, zwracają "coś jakby liczbę rzeczywistą". Taką wartość możnw wtedy przekazywać do innych metod i głównie przy pomocy nowego obiektu PmDateObject można z tej wartości stwierdzić jaki jest rok, miesiąc, dzień ...
- dla typu "Array": Język VBScript posiada typ "Array" (można wytworzyć na przykład przy pomocy funkcji Array). Najpowszechniejszymi są warianty 1-wymiarowe i 2-wymiarowe.
Podobna koncepcja jest wprowadzona również dla JavaScript: Przy pomocy nowej metody Pm.CreatePmArray można wytworzyć "Array" jako specjalny obiekt PmArray, i obiekt ten równocześnie zwraca wszystkie metody PROMOTIC, które według dokumentacji "Array" powinny zwracać.


Warunek IF

Oba języki potrafią wytworzyć warunek przy pomocy polecenia IF. Jednakże w języku JavaScript polecenie jest zapisywane w trochę inny sposób.

Przykład:
Warunek jest wykonywany przy pomocy poleceń If...Then...Else
VBScriptWybierz oraz skopiuj do schowka

If a > 1 Then
' ...
' ...
Else
' ...
' ...
End If
 
Warunek jest wykonywany przy pomocy poleceń if...else. Jeżeli w warunku występuje klika poleceń, wtedy muszą być ujęte w nawiasach złożonych {...}.
JavaScriptWybierz oraz skopiuj do schowka

if (a > 1)
{
// ...
// ...
}
else
{
// ...
// ...
}


Polecenie pętli FOR

Oba języki posiadają polecenie FOR które umożliwia kilkukrotne wykonywanie części kodu. W języku JavaScript polecenie ma trochę bardziej skomplikowany zapis, lecz zato jest bardziej ogólne.

Przykład:
Polecenie For...Next
VBScriptWybierz oraz skopiuj do schowka

For iRow = 0 To 100
' ...
' ...
Next
 
Polecenie for ma trzy parametry.
- 1. parametr (np. i=0) jest polecenie, które zostanie wykonane na początku pętli.
- 2. parametr (np. i<100) jest wyrażenie, które jest sprawdzane na końcu pętli do stwierdzania, czy ma być jeszcze dalej powtarzane
- 3. parametr (np. i++) jest polecenie, które zostanie wykonane na końcu pętli w celu zmiany zmiennej pętli

Jeżeli w poleceniu for występuje kilka poleceń, które mają być powtarzane, wtedy muszą być ujęte w złożonych nawiasach {...}.
JavaScriptWybierz oraz skopiuj do schowka

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


Polecenie wielokrotnego warunku

Oba języki posiadają polecenie wielokrotnego warunku, kiedy zestaw poleceń zostanie wykonany tylko jeżeli jakaś zmienna posiada odpowiednią wartość.

Przykład:
Polecenie Select Case
VBScriptWybierz oraz skopiuj do schowka

Select Case nVar
Case 1
sMsg = "OK"
Case 2
sMsg = "Warning"
Case 3
sMsg = "Alarm"
End Select
 
Polecenie switch. Za każdym zestawem poleceń jest umieszcane polecenie break; który zakończy warunki i wyskoczy z polecenia switch.
JavaScriptWybierz oraz skopiuj do schowka

switch (nVar)
{
case 1:
sMsg = "OK";
break;
case 2:
sMsg = "Warning";
break;
case 3:
sMsg = "Alarm";
break;
}
© MICROSYS, spol. s r.o.