Coercizione in JScript
Aggiornamento: novembre 2007
In JScript è possibile eseguire operazioni su valori di tipi diversi ed essere certi che il compilatore non genererà eccezioni. Il compilatore JScript procederà invece automaticamente all'assegnazione forzata, denominata coercizione, del tipo di dati di un valore a un altro prima di eseguire l'operazione. Negli altri linguaggi, la coercizione è retta da regole più rigide.
Informazioni dettagliate sulla coercizione
Il compilatore consente tutte le coercizioni a meno che non sia provato che la coercizione sia destinata a fallire sempre. Se una coercizione potrebbe avere esito negativo, verrà generato un avviso in fase di compilazione e in molti casi, se la coercizione avrà effettivamente esito negativo, verrà generato un errore di runtime. Di seguito è riportato un esempio:
Operazione |
Risultato |
---|---|
Aggiunta di un numero e di una stringa |
Al numero viene assegnato forzatamente il tipo String. |
Aggiunta di un valore Boolean e di una stringa |
Al valore Boolean viene assegnato forzatamente il tipo String. |
Aggiunta di un numero e di un valore Boolean |
Al valore Boolean viene assegnato forzatamente il tipo Number. |
Prendere in considerazione l'esempio riportato di seguito.
var x = 2000; // A number.
var y = "Hello"; // A string.
x = x + y; // the number is coerced into a string.
print(x); // Outputs 2000Hello.
Per convertire esplicitamente una stringa in un valore integer, è possibile utilizzare il metodo parseInt. Per ulteriori informazioni, vedere Metodo parseInt. Per convertire esplicitamente una stringa in un numero, è possibile utilizzare il metodo parseFloat. Per ulteriori informazioni, vedere Metodo parseFloat. Tenere presente che le stringhe vengono convertite automaticamente nei numeri equivalenti solo a scopo di confronto e che rimangono tali per l'addizione (concatenazione).
Poiché adesso JScript è un linguaggio fortemente tipizzato, è disponibile un ulteriore meccanismo di coercizione. Questo utilizza il nome del tipo di destinazione come se fosse una funzione che accetta come argomento l'espressione da convertire. Tale meccanismo è applicabile a tutti i tipi primitivi e di riferimento di JScript e ai tipi di .NET Framework.
Mediante il codice seguente, ad esempio, si ottiene la conversione di un valore integer in un valore Boolean:
var i : int = 23;
var b : Boolean;
b = i;
b = Boolean(i);
Poiché il valore di i è diverso da zero, b è true.
Il nuovo meccanismo di coercizione è applicabile anche a molti tipi definiti dall'utente. Tuttavia, il funzionamento delle coercizioni in cui uno dei tipi sia definito dall'utente non è sempre garantito. In alcuni casi, infatti, lo scopo della conversione di tipi dissimili predisposta dall'utente può venire interpretato erroneamente. Ciò si verifica soprattutto quando il tipo del quale si effettua la conversione è costituito da più valori diversi. Mediante il codice che segue, ad esempio, vengono create due classi (tipi). Una contiene una sola variabile i, che rappresenta un valore di tipo integer. L'altra contiene tre variabili (s, f e d), ognuna di tipo differente. Nell'istruzione finale non è possibile determinare in JScript come convertire la variabile del primo tipo in una del secondo tipo.
class myClass {
var i : int = 42;
}
class yourClass {
var s : String = "Hello";
var f : float = 3.142;
var d : Date = new Date();
}
// Define a variable of each user-defined type.
var mine : myClass = new myClass();
var yours : yourClass;
// This fails because there is no obvious way to convert
// from myClass to yourClass
yours = yourClass(mine);
Vedere anche
Concetti
Coercizione mediante gli operatori bit per bit