Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Area Aziende Cocktail Registrazione domini



ASP: migrare da VBScript a JScript o viceversa

Home + Articoli + Teoria + Articolo # 128
Autore: Luca Ruggiero

Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.


Tutti gli amanti dell'ASP, in special modo chi mi segue dagli albori della mia comparsa su Internet come autore di materiale didattico su questo linguaggio, sanno che ASP è una tecnologia e non direttamente un linguaggio e che, per l'implementazione degli script, si possono utilizzare tre diversi linguaggi
  1. VBScript - linguaggio di default consigliato da Microsoft in persona;
  2. JScript - versione Microsoft del noto linguaggio Javascript;
  3. PerlScript - versione lite del noto linguaggio di programmazione Perl, che non mi sognerei mai di prendere in considerazione per implementare pagine ASP.
Chi non era al corrente di questa cosa... adesso lo è!

Questo articolo vuole fungere da referenza per gli sviluppatori ASP che da VBScript vogliono migrare a JScript, o viceversa.

Scopo della migrazione, che resto imparziale nel suggerire o meno, è legata ai puri gusti estetici e funzionali che caratterizzano le sintassi e le potenzialità dei due linguaggi.

Dichiarazione iniziale del linguaggio utilizzato

Le pagine VBScript (opzionalmente) riportano la seguente dicitura che specifica al Web Server il linguaggio di scripting utilizzato
<%@LANGUAGE = VBScript%>
Per JScript la dicitura (obbligatoria) è la seguente
<%@LANGUAGE = JScript%>
L'obbligatorietà della della seconda nei confronti della prima sta nel fatto che tutti i Web Server di casa Microsoft (IIS e PWS) per default specificano il VBScript come linguaggio di scripting.

Differenze semantiche di base tra VBScript e JScript

La prima differenza riguarda il fatto che il VBScript, al contrario di JScript, non è un linguaggio case-sensitive (sensibile all'utilizzo di lettere maiuscole e minuscole).

Seconda differenza riguarda il fatto che JScript, al contrario di VBScript, riporta un punto e virgola (;) alla fine di ogni riga/istruzione. Il carattere può essere omesso ma se ne consiglia l'utilizzo.

Operatori

Segue un riepilogo tabellare di tutti gli operatori del VBScript e del JScript.

Significato VBScript JScript
Operatori aritmetici
Addizione + +
Sottrazione - -
Moltiplicazione * *
Divisione / /
Divisione intera \ /
Elevamento a potenza ^  
Uguaglianza = =
Modulo di una divisione Mod %
Incremento   ++
Decremento   --
Operatori di confronto
Assegnazione = ==
Diverso da... <> !=
Minore di... > >
Maggiore di... < <
Minore o uguale a... <= <=
Maggiore o uguale a... => =>
Operatori logici
Negazione Not !
Congiunzione logica And &&
Disgiunzione logica Or ||
Commenti
Commento su una riga ' //
Commento su più righe   /* */

Dichiarazione di variabili e costanti

Segue la sintassi per la dichiarazione e valorizzazione di una variabile in VBScript
Dim stringa
stringa = "Hello, World!"
Segue la sintassi per la dichiarazione di una variabile in JScript
var stringa = "Hello, World!";
VBScript (che usa la parola chiave Dim), al contrario del JScript (che usa la parola chiave var), non può dichiarare e valorizzare una variabile sulla stessa riga.

In il VBScript più utilizza la parola chiave Const per la dichiarazione di una costante, che può essere valorizzata sulla stessa riga in cui viene dichiarata
Const stringa = "Hello, World!"
Dichiarazione di oggetti ActiveX

La dichiarazione di oggetti ActiveX (piuttosto che COM++) è molto differente tra il VBScript ed il JScript.

In VBScript è necessario dichiarare l'oggetto, settarlo, inizializzarlo, aprirlo, utilizzarlo, chiuderlo e distruggerlo. Vediamo un esempio di apertura di una connessione al database
Dim cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "stringa di connessione"
Response.Write "Connessione stabilita con successo"
cn.Close
Set cn = Nothing
In JScript è molto più semplice e veloce
var cn = Server.CreateObject("ADODB.Connection");
cn.Open("stringa di connessione");
Response.Write("Connessione stabilita con successo");
cn.Close();
Lo stesso discorso vale per tutti gli oggetti utilizzabili attraverso ASP.

Nota: la dichiarazione
var cn = Server.CreateObject("ADODB.Connection");
in JScript puù essere sostituita con
var cn = new ActiveXObject("ADODB.Connection");
consigliata per questo linguaggio.

Istruzioni condizionali

Sia il VBScript che il JScript dispongono del costrutto "If" ed anche del costrutto "Select Case", solo che in JScript, nel primo caso, non si usa la parola chiave "Then" e, nel secondo caso, il costrutto si chiama "switch".

Iniziamo col costrutto "If" in VBScript
If condizione 1 Then
    istruzione 1
ElseIf condizione 2 Then
    istruzione 2
Else
    istruzione alternativa
End If
Vediamo l'equivalente codice in JScript
if (condizione 1)
{
    istruzione 1;
}
else if (condizione 2)
{
    istruzione 2;
}
else
{
    istruzione alternativa;
}
In JScript non si utilizza la parola chiave "Then" ma si includono i blocchi di istruzioni tra parentesi graffe; inoltre la condizione va inclusa tra parentesi tonde, cose che, opzionalmente, si può fare anche in VBScript.

Passiamo ad un esempio di "Select Case" in VBScript
Select Case caso
    Case 0    : istruzione 0
    Case 1    : istruzione 1
    Case 2    : istruzione 2
    Case Else : istruzioni altrenative
End Select
Vediamo l'equivalente codice in JScript con l'istruzione "switch"
switch (caso)
{
    case 0
        istruzione 0;
        break;
    case 1
        istruzione 1;
        break;
    case 2
        istruzione 2;
        break;
    case else
        istruzioni altrenative;
        break;
}
Le istruzioni, anche se funzionalmente identiche, sono sintatticamente differenti e vanno prese cosi come sono, senza fare confronti uno ad uno.

Istruzioni di iterazione

VBScript e JScript hanno anche le istruzioni di iterazione in comune (sintassi esclusa) e con stessa finalità.

Iniziamo dal ciclo "For", comune ad entrambi i linguaggi, e esaminiamo la modalità di redazione VBScript
Dim i
i = 0
For i = 0 To 9
    Response.Write i & "<br>"
Next

' Restituisce tutti i valori di "i" da 0 a 9
Viene inizializzata la variabile e stabilito il valore di arrivo; l'incremento viene fatto con la parola chiave "Next".

In Script il funzionamento è leggermente differente; esaminiamolo
for (var i = 0; i < 10; i++)
{
    Response.Write(i + "<br>");
}

// Restituisce tutti i valori di "i" da 0 a 10
La variabile può essere potenzialmente dichiarata direttamente all'interno del ciclo ed il confronto avviene per un valore minore a quello desiderato (minore di 10 per ottenere 9); l'incremento avviene direttamente nella riga di apertura del comando.

Continuiamo col ciclo "While". Facciamo un esempio in VBScript
Dim i
i = 0
While i = 9
    Response.Write i & "<br>"
    i = i + 1
Wend

' Restituisce tutti i valori di "i" da 0 a 9
La versione JScript è simile
var i = 0
while (i < 10)
{
    Response.Write(i + "<br>");
    i++;
}

// Restituisce tutti i valori di "i" da 0 a 10
Continuiamo col ciclo "Do While".

Esaminiamo la modalità VBScript
Dim i
i = 0
Do While i = 9
    Response.Write i & "<br>"
    i = i + 1
Loop

' Restituisce tutti i valori di "i" da 0 a 9
Vediamo la modalità JScript
var i = 0
do
{
    Response.Write(i + "<br>");
    i++;
}
while (i < 10);

// Restituisce tutti i valori di "i" da 0 a 10
La differenza è che JScript esegue comunque la prima operazione, spostando il controllo "while" in coda al listato di codice.

Gli array

Ecco un altro interessante elemento che comporta diverse differenze sintattiche e semantica, ma non funzionali, tra VBScript e JScript.

Iniziamo con un esempio VBScript
Dim giorni(7)
    giorni(0) = "Lunedi"
    giorni(1) = "Martedi"
    giorni(2) = "Mercoledi"
    giorni(3) = "Giovedi"
    giorni(4) = "Venerdi"
    giorni(5) = "Sabato"
    giorni(6) = "Domenica"
Response.Write giorni(5)

' Restituisce Sabato
Prima di esaminare le differenze, naturalmente, vediamo la versione JScript
var giorni = new Array();
    giorni[0] = "Lunedi";
    giorni[1] = "Martedi";
    giorni[2] = "Mercoledi";
    giorni[3] = "Giovedi";
    giorni[4] = "Venerdi";
    giorni[5] = "Sabato";
    giorni[6] = "Domenica";
Response.Write(giorni[5]);

// Restituisce Sabato
In VBScript è necessario specificare la lunghezza dell'array e si usano le parentesi tonde per indicizzare gli item; in JScript, invece, non è necessario stabilire a priori la lunghezza dell'array e si usano le parentesi quadre per indicizzarne gli item.

Sostanziale differenza sta nella verifica della lunghezza dell'array, utile sia per sapere quanti elementi ci sono, sia per impostare un ciclo dinamico fino alla sua fine.

Sulla scorta dell'esempio precednte, vediamo prima la versione VBScript e poi quella JScript
Response.Write UBound(giorni)   ' Restituisce 7
Response.Write(giorni.length); // Restituisce 7
VBScript utilizza la funzione UBound mentre JScript si avvale della proprietà length.

Le funzioni

Simili nella sintassi e nella funzionalità (perdonate la cacofonia) sono le funzioni.

Vediamo un esempio VBScript
Function Messaggio(testo)
    Response.Write testo
End Function
Vediamo adesso un esempio JScript
function Messaggio(testo)
{
    Response.Write(testo);
}
In VBScript utilizzeremo la parola chiave "Call" per richiamare la funzione, mentre in JScript non ce n'è nessuna
Call Messaggio("Hello, World")
Messaggio("Hello, World");
Principali funzioni/metodi per le stringhe, date e numeri

Concludiamo con una veloce panoramica, in schema tabellare, delle principali funzioni per la gestione delle stringhe, delle date e dei numeri.

VBScript JScript
Stringhe
Replace("Luca", "c", "n") "Luca".replace("c", "n");
Sostituisce la lettera "c" con la lettera "n" in "Luca", restituendo "Luna".
Split("Luca#Max#Claudio", "#") "Luca#Max#Claudio".split("#");
Crea un array di stringa in funzione del carattere #.
Trim(" Luca ")  
Elimina gli spazi intorno alla parola esaminata.
LCase("Luca") "Luca".toLowerCase();
Trasforma il testo in minuscolo.
UCase("Luca") "Luca".toUpperCase();
Trasforma il testo in maiuscolo.
Len("Luca") "Luca".length;
Calcola la lunghezza della stringa.
Left("Luca", 1) "Luca".substring(1);
Calcola una porzione di stringa a partire da sinistra.
Right("Luca", 1) "Luca".substring("Luca".length, 1);
Calcola una porzione di stringa a partire da destra.
InStr("Luca", "a") "Luca".indexOf("a")
Verifica la presenza di un carattere in una stringa.
Date
Now() var oggi = new Date();
var giorno = oggi.getDate();
var mese = oggi.getMonth() + 1;
var anno = oggi.getFullYear();
var ore = oggi.getHours();
var minuti = oggi.getMinutes();
var secondi = oggi.getSeconds();
Calcola la data e l'orario.
Date() var oggi = new Date();
var giorno = oggi.getDate();
var mese = oggi.getMonth() + 1;
var anno = oggi.getFullYear();
Calcola la data.
Time() var oggi = new Date();
var ore = oggi.getHours();
var minuti = oggi.getMinutes();
var secondi = oggi.getSeconds();
Calcola l'orario.
Numeri
Round(10,5) Math.round(10,5);
Arrotonda un numero.
Randomize()
CInt(Rnd() * 10)
Math.random(10);
CInt("10") parseInt("10");
Converte un numero da stringa a numerico.

Attenzione: il VBScript utilizza delle funzioni predefinite mentre il JScript adotta dei metodi degli oggetti corrispondenti, il che rende i due linguaggi, da un punto di vista pratico, molto differenti.

© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | Pubblicità | Supportaci | Staff | Contatti
  Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | AlVerde.net | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones