Confronto tra parole chiave in diversi linguaggi
Aggiornamento: novembre 2007
In questo argomento vengono elencate le comuni attività di programmazione che è possibile riepilogare con una parola chiave del linguaggio. Per ulteriori informazioni sulle attività per cui sono necessari esempi di codice, vedere Confronto tra concetti di programmazione in diversi linguaggi con esempi di codice.
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Dichiarare una variabile |
dichiaratori (concetto, non parola chiave) |
dichiaratori (le parole chiave includono tipi definiti dall'utente e tipi incorporati) |
var |
(dichiarazione implicita) PUBLIC LOCAL PRIVATE |
|
Dichiarare una costante denominata |
const |
#DEFINE |
|||
Creare una nuova istanza di una classe |
new |
Funzione NEWOBJECT( ) |
|||
Creare un nuovo oggetto |
CreateObject() per oggetti COM |
CoCreateInstance() (per oggetti COM) |
nuovo ActiveXObject() |
Funzione CREATEOBJECT( ) |
|
Assegnare un oggetto a una variabile oggetto |
= |
= |
= |
= STORE |
|
Funzione/metodo che non restituisce un valore |
Sub2 |
void |
Void (solo server COM) |
||
Overload di una funzione o di un metodo (Visual Basic: overload di una routine o metodo) |
(Nessuna parola chiave del linguaggio richiesta) |
(Nessuna parola chiave del linguaggio richiesta) |
(Nessuna parola chiave del linguaggio richiesta) |
(Nessuna parola chiave del linguaggio richiesta) |
|
Fare riferimento all'oggetto corrente |
Me3 |
this |
this thisform |
||
Effettuare una chiamata non virtuale a un metodo virtuale dell'oggetto corrente |
MyClass::Func1(), dove MyClass è una classe C++ con una funzione membro Func1. |
n/d |
n/d |
n/d |
|
Recuperare un carattere da una stringa |
*(p + 10) o p[10] dove p corrisponde a char* o wchar_t* |
str[10] dove str è una stringa |
str[10], dove str è una string charAt substring substr |
SUBSTR( ) |
|
Dichiarare un tipo di dati composito (struttura) |
class, interface |
n/d |
|||
Inizializzare un oggetto (costruttore) |
costruttori (concetto, non parola chiave) |
Costruttori o costruttori di tipi predefiniti del sistema |
Costruttore (concetto, non parola chiave)6 |
Evento Init |
|
Terminare direttamente un oggetto |
n/d |
~ClassName |
n/d |
n/d |
n/d |
Metodo chiamato dal sistema appena prima che Garbage Collection recuperi un oggetto7 |
Finalize (in Visual Basic 6.0, Class_Terminate) |
Destructors (C++) (concetto, non parola chiave) |
n/d |
Evento Destroy |
|
Inizializzare una variabile nel punto di dichiarazione |
Dim x As Long = 5 Dim c As New Car(FuelTypeEnum.Gas) |
// inizializzare su un valore: int x=5; // con un costruttore adatto: C c(10); |
// inizializzare su un valore: int x = 123; // o utilizzare il costruttore predefinito: int x = new int(); |
var x = 5 var y : car = new car() |
LOCAL x x = 5 |
Accettare l'indirizzo di una funzione |
AddressOf (questo operatore restituisce un riferimento a una funzione sotto forma di istanza di delegato) |
Utilizzare il nome della funzione senza parentesi |
n/d |
||
Callback |
Passare l'indirizzo di una funzione ad un'altra che richiama il chiamante. Per un esempio, vedere Procedura: passare una routine a un'altra routine in Visual Basic. |
CALLBACK (tipo standard) callback (attributo IDL) |
n/d |
n/d |
|
Dichiarare che un oggetto può essere modificato in modo asincrono |
n/d |
n/d |
n/d |
||
Forzare la dichiarazione esplicita delle variabili |
n/d (Tutte le variabili devono essere dichiarate prima dell'uso) |
n/d (Tutte le variabili devono essere dichiarate prima dell'uso) |
modalità fast (attiva in base all'impostazione predefinita) |
_VFP.LanguageOptions NEW |
|
Attivare l'inferenza dei tipi locali |
|||||
Eseguire il test di una variabile oggetto che non fa riferimento a un oggetto |
pobj == NULL |
obj == null |
obj == undefined obj == null |
VARTYPE(obj)=="0" |
|
Valore di una variabile oggetto che non fa riferimento a un oggetto |
nullptr |
null undefined |
.F. |
||
Eseguire il test di un'espressione null di database |
n/d |
n/d |
x == null |
ISNULL( ) |
|
Verificare se una variabile Variant è stata inizializzata |
n/d |
n/d |
n/d |
x == undefined |
EMPTY( ) |
Definire una proprietà predefinita |
property: la parola chiave property fa riferimento a codice gestito |
n/d |
n/d |
Programmazione orientata ad oggetti
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Fare riferimento a una classe base |
super |
Proprietà BaseClass Proprietà ParentClass DODEFAULT() Class::member |
|||
Dichiarare un'interfaccia |
interface |
DEFINE CLASS |
|||
Specificare un'interfaccia da implementare |
(È sufficiente derivare dall'interfaccia) class C1 : public I1 |
class C1 : I1 Interfacce |
IMPLEMENTS |
IMPLEMENTS Nuovo |
|
Dichiarare una classe |
class |
DEFINE CLASSMyClassAS <ParentClass> |
|||
Dichiarare un modulo |
static class |
static class |
n/d |
n/d |
|
Dichiarare una definizione parziale di una classe o struttura |
n/d |
n/d |
n/d |
||
Specificare che una classe può essere solo ereditata. Non è possibile creare un'istanza della classe. |
abstract |
n/d |
|||
Specificare che una classe non può essere ereditata |
final |
n/d |
|||
Dichiarare un tipo enumerato |
enum |
n/d |
|||
Dichiarare una costante di classe |
const (applicata a una dichiarazione di campo) |
const |
#DEFINE |
||
Derivare una classe da una classe base |
Class C1 : public Base (nessuna parola chiave del linguaggio necessaria) |
class C1 : C2 |
Class c1 extends c2 |
DEFINE CLASS MyClass AS ParentClass |
|
Eseguire l'override di un metodo o una proprietà |
(Nessuna parola chiave del linguaggio richiesta tranne override per le compilazioni con /clr. Vedere Derived Classes) |
(Nessuna parola chiave del linguaggio richiesta) |
(Nessuna parola chiave del linguaggio richiesta) |
||
Dichiarare un metodo che deve essere implementato in una classe di derivazione |
Inserire = 0 alla fine della dichiarazione (metodo virtual pure) |
abstract |
(Nessuna parola chiave del linguaggio richiesta) |
||
Dichiarare un metodo non sottoponibile a override |
NotOverridable (i metodi sono NotOverridable per impostazione predefinita) |
final |
n/d |
||
Dichiarare una proprietà o un metodo virtuale oppure una funzione di accesso a una proprietà |
(I metodi sono virtuali in base all'impostazione predefinita) |
n/d |
|||
Nascondere un membro di una classe base in una classe derivata |
n/d |
||||
Dichiarare un riferimento indipendente dai tipi al metodo di una classe |
Utilizzare il nome della funzione senza parentesi |
n/d |
|||
Specificare che una variabile può contenere un oggetto di cui si desidera gestire gli eventi |
n/d |
(Scrivere il codice - nessuna parola chiave specifica) |
(Scrivere il codice - nessuna parola chiave specifica) |
EVENTHANDLER( ) Nuovo |
|
Specificare gli eventi per cui verrà chiamata una routine eventi |
Handles (le routine eventi possono comunque essere associate a una variabile WithEvents in base al modello di denominazione) |
n/d |
event += eventHandler; |
n/d |
BINDEVENTS( ) |
Valutare una volta un'espressione dell'oggetto per accedere a più membri |
n/d |
con9 |
WITH ... ENDWITH |
Gestione delle eccezioni
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Gestione strutturata delle eccezioni |
try catch finally throw |
TRY [ tryCommands ] [ CATCH [ To VarName ] [ WHEN IExpression ] ] [ catchCommands ] ] [ THROW [ eUserExpression ] ] [ EXIT ] [ FINALLY [ finallyCommands ] ] ENDTRY |
|||
Gestione delle eccezioni C++ |
n/d |
n/d |
n/d |
n/d |
Strutture decisionali
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Struttura decisionale (selezione) |
case |
switch case break |
CASE ICASE |
||
Struttura decisionale (if ... then) |
if else |
IF ... ENDIF IIF( ) |
|||
Struttura ciclica (condizionale) |
do, while break, continue |
DO, WHILE (clausole) |
|||
Struttura ciclica (iterazione) |
for (x=0;x<10;x++){...} for (prop in obj) { print (obj[prop]);} |
FOR (clausole) FOR ... ENDFOR Continue NEXT FOR EACH (clausole) ,FOR ... ENDFOR, Continue, Next |
Matrici
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Dichiarare una matrice |
int[] x = new int[5]; |
var x : int[] var arr = Array() |
DIMENSION DECLARE |
||
Inizializzare una matrice |
var x : int[] = [1, 2, 3, 4, 5] var arr = new Array(1, 2, 3, 4, 5)] |
x[1] = 1 x[2] = 2 |
|||
Riallocare una matrice |
n/d |
n/d |
arr.length=newSize (solo per matrici JScript)10 |
DIMENSION DECLARE |
Area di validità di una classe
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Visibile all'esterno del progetto o assembly |
public |
n/d |
|||
Visibile solo all'interno dell'assembly in cui viene dichiarato |
internal |
n/d |
|||
Visibile solo nelle classi correnti o derivate |
n/d |
n/d |
n/d |
||
L'accesso è limitato all'assembly corrente o ai tipi derivati dalla classe di appartenenza. |
protected internal |
n/d |
n/d |
||
Visibile solo all'interno del progetto (per le classi nidificate, all'interno della classe che le contiene) |
private |
n/d |
Area di validità di un membro
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Accessibile all'esterno della classe, del progetto e del modulo |
public |
(Nessuna parola chiave del linguaggio richiesta) |
|||
Accessibile all'esterno della classe, ma all'interno del progetto o del package |
public private: |
internal |
n/d |
||
Accessibile solo alle classi correnti e derivate |
protected |
PROTECTED |
|||
Accessibile solo all'interno della classe o del modulo |
private |
HIDDEN |
|||
Specificare che una funzione o un'altra classe ha accesso ai membri private di una classe dichiarante |
n/d |
friend (non consentito in C++) |
friend |
n/d |
n/d |
Protetto all'interno dell'assembly e privato per gli altri assembly |
n/d |
protected private |
n/d |
n/d |
n/d |
L'accesso è limitato all'assembly corrente o ai tipi derivati dalla classe di appartenenza |
protected internal |
n/d |
n/d |
Caratteristiche varie di durata
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Conservare le variabili locali della routine |
Static11 |
n/d |
n/d |
||
Condiviso da tutte le istanze di una classe |
static |
n/d |
Varie
Funzione |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
Codice commenti |
//, /* */ per commenti su più righe |
* && NOTE |
|||
Distinzione tra maiuscole e minuscole |
No |
Sì |
Sì |
Sì |
No |
Chiamare l'API Windows |
n/d |
n/d |
DECLARE - DLL |
||
Dichiarare e generare un evento |
n/d |
n/d |
Funzione RAISEEVENT( ) |
||
Threading di primitivi |
n/d |
n/d |
n/d |
||
Passare a un punto (diramazione) |
n/d |
n/d |
1 In Visual Basic, è possibile utilizzare soltanto Static per dichiarare una variabile, ad esempio Static x As Long, solo all'interno di una routine.
2 In Visual Basic, le routine dichiarate con la parola chiave Sub non possono restituire valori. Se una routine deve restituire un valore, è necessario dichiararla con la parola chiave Function.
3 In Visual Basic, Me non viene risolta in fase di compilazione e può pertanto essere utilizzata come valore restituito di una proprietà o un metodo.
4 In JScript, la funzione substr è ancora supportata, ma non è più il metodo ottimale per accedere ai caratteri all'interno di una stringa. Il modo più efficace per accedere ad un carattere da una specifica posizione in una stringa è utilizzando le parentesi quadre. Per accedere al decimo carattere della stringa str, ad esempio, utilizzare str[10].
5 In Visual Basic, i costruttori per le classi derivate da System.Object di .NET Framework sono sempre denominati New.
6 In JScript, non è consentito l'overload sui costruttori.
7 In genere, il codice in questo metodo libera risorse di sistema che altrimenti non verrebbero liberate automaticamente dal Garbage Collector.
8 In C++, una classe astratta include almeno un membro virtual pure.
9 In JScript non è presente il punto iniziale che verrebbe utilizzato in Visual Basic. Questa funzionalità può facilmente causare confusione, poiché le variabili possono essere erroneamente interpretate come proprietà e viceversa. Si noti inoltre che l'istruzione with produce codice lento.
10 In JScript, ciò non determina la riallocazione della matrice, né la relativa "espansione". Le matrici di JScript (dichiarate come tipo Array) sono sempre sparse e dinamiche. Le matrici native, dichiarate come System.Array o type[], non sono dinamiche.
11 In Visual Basic, le variabili locali statiche di metodi di classe non condivisi vengono archiviate per istanza di classe, anziché con la condivisione di un'unica copia come in altri linguaggi. Quando si utilizza Static per dichiarare una variabile, il valore di tale variabile viene mantenuto anche se la variabile perde e poi riacquisisce la propria area di validità.
Vedere anche
Riferimenti
Confronto tra concetti di programmazione in diversi linguaggi con esempi di codice
Confronto tra operatori in diversi linguaggi
Confronto tra tipi di dati in diversi linguaggi
Confronto tra controlli e oggetti di programmazione in diversi linguaggi e librerie